From cbf9d98dba61924625629061f7680e3508fc2701 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 23 Aug 2023 10:48:14 -0700 Subject: [PATCH 01/74] ASM_PROC_FORCE (#1362) --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index 252413511..d8878ac4b 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,8 @@ FULL_DISASM ?= 0 RUN_CC_CHECK ?= 1 # Dump build object files OBJDUMP_BUILD ?= 0 +# Force asm processor to run on every file +ASM_PROC_FORCE ?= 0 # Number of threads to disassmble, extract, and compress with N_THREADS ?= $(shell nproc) @@ -92,6 +94,10 @@ ASM_PROC := python3 tools/asm-processor/build.py ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=global-with-filename +ifneq ($(ASM_PROC_FORCE), 0) + ASM_PROC_FLAGS += --force +endif + IINC := -Iinclude -Isrc -Iassets -Ibuild -I. ifeq ($(KEEP_MDEBUG),0) From 9cceea48f31bdeea1c2933a1f64a74b60b80f17a Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 2 Sep 2023 15:16:45 -0400 Subject: [PATCH 02/74] Documentation pass for the Target system (#1281) * cleanup * import bss * sActorHiliteMtx * some cleanups on func_800BB604 * Actor_IsInTargetableRange * rematch func_800BB604 Co-authored-by: engineer124 * Name ACTOR_FLAG_UNFRIENDLY and ACTOR_FLAG_FRIENDLY * Rename some Target_ functions * cleanusp * TargetMode enum * Target_800B82EC * sNaming * more * more naming * fairyHintPos * rotation * ACTOR_FLAG_TARGETABLE * update namefixer * remove trailing comma * bss * Wall of text for Target_800BB604 * function naming * cleanups * Target_GetAdjustedDistSq * NotLeash * more comments * minor comment * review * fix * rotZTick * review * name last members * fix * review * review * more namefixer * swap members * comment * Update src/code/z_actor.c Co-authored-by: Derek Hensley * Update src/code/z_actor.c Co-authored-by: Derek Hensley * review * format * Update src/code/z_actor.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64actor.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * review * fix * fix --------- Co-authored-by: engineer124 Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- docs/STYLE.md | 2 +- include/functions.h | 6 +- include/variables.h | 14 - include/z64actor.h | 76 +- include/z64player.h | 2 +- spec | 1 - src/code/z_actor.c | 821 ++++++++++-------- src/code/z_en_a_keep.c | 4 +- src/code/z_en_hy_code.c | 4 +- src/code/z_parameter.c | 2 +- src/code/z_player_call.c | 6 +- src/code/z_player_lib.c | 11 +- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 8 +- src/overlays/actors/ovl_Boss_01/z_boss_01.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 18 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 14 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 14 +- src/overlays/actors/ovl_Boss_05/z_boss_05.c | 2 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 4 +- src/overlays/actors/ovl_Boss_07/z_boss_07.c | 2 +- .../actors/ovl_Boss_Hakugin/z_boss_hakugin.c | 4 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 4 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 4 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 4 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 4 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 8 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 4 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 4 +- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 6 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 8 +- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 4 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 8 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 8 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 10 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 6 +- src/overlays/actors/ovl_En_An/z_en_an.c | 2 +- src/overlays/actors/ovl_En_And/z_en_and.c | 4 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 8 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 4 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 24 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 14 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 12 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 4 +- src/overlays/actors/ovl_En_Bal/z_en_bal.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 4 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 6 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 6 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 6 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 4 +- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 8 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 16 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 24 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 14 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 4 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- .../actors/ovl_En_Boj_01/z_en_boj_01.c | 2 +- .../actors/ovl_En_Boj_02/z_en_boj_02.c | 2 +- .../actors/ovl_En_Boj_03/z_en_boj_03.c | 2 +- .../actors/ovl_En_Boj_04/z_en_boj_04.c | 2 +- .../actors/ovl_En_Boj_05/z_en_boj_05.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 6 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 4 +- .../actors/ovl_En_Bombal/z_en_bombal.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 4 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 14 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 4 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- src/overlays/actors/ovl_En_Bsb/z_en_bsb.c | 2 +- src/overlays/actors/ovl_En_Bu/z_en_bu.c | 2 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 6 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 4 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 6 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 2 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 6 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 10 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 6 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 4 +- src/overlays/actors/ovl_En_Death/z_en_death.c | 4 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 8 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 6 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 10 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 6 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 2 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 6 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 6 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 12 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 8 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 8 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 4 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 6 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- src/overlays/actors/ovl_En_Dt/z_en_dt.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 44 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 4 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 2 +- .../actors/ovl_En_Encount2/z_en_encount2.c | 2 +- .../actors/ovl_En_Encount4/z_en_encount4.c | 2 +- .../ovl_En_Ending_Hero/z_en_ending_hero.c | 4 +- .../ovl_En_Ending_Hero2/z_en_ending_hero2.c | 4 +- .../ovl_En_Ending_Hero3/z_en_ending_hero3.c | 4 +- .../ovl_En_Ending_Hero4/z_en_ending_hero4.c | 4 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 4 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 4 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 4 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 12 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 6 +- .../actors/ovl_En_Firefly2/z_en_firefly2.c | 3 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 2 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 28 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 14 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 10 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 11 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 18 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 14 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 6 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 8 +- src/overlays/actors/ovl_En_Ge3/z_en_ge3.c | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 10 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 10 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 6 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 4 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 16 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 17 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 6 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 6 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 4 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 6 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 4 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 6 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 4 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 10 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 4 +- src/overlays/actors/ovl_En_Hs2/z_en_hs2.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 12 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../z_en_invadepoh_demo.c | 2 +- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 8 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 8 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 4 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- src/overlays/actors/ovl_En_Jso/z_en_jso.c | 2 +- src/overlays/actors/ovl_En_Jso2/z_en_jso2.c | 4 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 14 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 4 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 14 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 10 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 4 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 5 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 4 +- src/overlays/actors/ovl_En_Kitan/z_en_kitan.c | 2 +- .../actors/ovl_En_Knight/z_en_knight.c | 2 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 6 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 6 +- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 4 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 4 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 6 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 10 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 10 +- .../actors/ovl_En_Minideath/z_en_minideath.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 4 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 4 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 10 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 4 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 14 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 4 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 4 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 12 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 10 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 16 +- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 4 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 4 +- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 2 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 4 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 14 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 4 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 14 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 6 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 12 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 12 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 6 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 14 +- .../ovl_En_Po_Composer/z_en_po_composer.c | 2 +- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 15 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 14 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 8 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 4 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 6 +- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 8 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 8 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 20 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 26 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 6 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 16 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 4 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 10 +- src/overlays/actors/ovl_En_Rsn/z_en_rsn.c | 4 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 12 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 4 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 8 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 14 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 4 +- src/overlays/actors/ovl_En_Si/z_en_si.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 36 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 12 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 10 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 4 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 10 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 2 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 4 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 28 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 8 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 4 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 10 +- .../actors/ovl_En_Takaraya/z_en_takaraya.c | 4 +- src/overlays/actors/ovl_En_Talk/z_en_talk.c | 6 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 26 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 4 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 20 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 4 +- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 2 +- .../actors/ovl_En_Tanron6/z_en_tanron6.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 20 +- src/overlays/actors/ovl_En_Tg/z_en_tg.c | 2 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 7 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 12 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 14 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 4 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 4 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 10 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 6 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 8 +- .../actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 2 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 10 +- .../actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c | 4 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 4 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 4 +- .../actors/ovl_En_Wdhand/z_en_wdhand.c | 2 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 2 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 8 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 14 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 10 +- src/overlays/actors/ovl_En_Zl1/z_en_zl1.c | 2 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 2 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 2 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 10 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 4 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 2 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 8 +- .../actors/ovl_Item_Inbox/z_item_inbox.c | 2 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 4 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 6 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 8 +- .../actors/ovl_Obj_Kinoko/z_obj_kinoko.c | 4 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 6 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 4 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 6 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 8 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 8 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 8 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 4 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 4 +- .../actors/ovl_player_actor/z_player.c | 156 ++-- tools/disasm/functions.txt | 26 +- tools/disasm/variables.txt | 14 +- tools/namefixer.py | 18 +- tools/sizes/code_functions.csv | 26 +- 304 files changed, 1620 insertions(+), 1501 deletions(-) diff --git a/docs/STYLE.md b/docs/STYLE.md index 0cf1d051b..616c4a8cc 100644 --- a/docs/STYLE.md +++ b/docs/STYLE.md @@ -140,7 +140,7 @@ Damage flag enums are not being used at present: we want to wait until we have a Pre-C99, commas at the end of the last item in an enum will cause a compiler warning, so leave them off. -All compound flag lists (e.g. `ACTOR_FLAG_4 | ACTOR_FLAG_8`) should be listed in *ascending* order +All compound flag lists (e.g. `ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_FRIENDLY`) should be listed in *ascending* order ## Arrays diff --git a/include/functions.h b/include/functions.h index ff803000d..6c7bc067a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -477,7 +477,7 @@ void func_800B4AEC(PlayState* play, Actor* actor, f32 y); void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play); void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW); -void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play); +void Target_Draw(TargetContext* targetCtx, PlayState* play); s32 Flags_GetSwitch(PlayState* play, s32 flag); void Flags_SetSwitch(PlayState* play, s32 flag); @@ -558,7 +558,7 @@ PosRot* Actor_GetFocus(PosRot* dest, Actor* actor); PosRot* Actor_GetWorld(PosRot* dest, Actor* actor); PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor); -s32 func_800B83F8(Actor* actor, Player* player, s32 flag); +s32 Target_OutsideLeashRange(Actor* actor, Player* player, s32 ignoreLeash); s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState); s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemAction); s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemAction); @@ -1119,7 +1119,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup); void func_80123C58(Player* player); void Player_SetEquipmentData(PlayState* play, Player* player); void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction); -void func_80123DA4(Player* player); +void Player_Untarget(Player* player); void func_80123DC0(Player* player); void func_80123E90(PlayState* play, Actor* actor); s32 func_80123F2C(PlayState* play, s32 ammo); diff --git a/include/variables.h b/include/variables.h index 8a46bdbf5..1614d922b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1907,20 +1907,6 @@ extern u8 gSampleBankTable[]; // bss // extern UNK_TYPE1 D_801ED894; -extern CollisionPoly* D_801ED8B0; -extern s32 D_801ED8B4; -// extern UNK_TYPE1 D_801ED8B8; -// extern UNK_TYPE1 D_801ED8BC; -// extern UNK_TYPE1 D_801ED8C0; -// extern UNK_TYPE1 D_801ED8C4; -extern f32 D_801ED8C8; -extern f32 sBgmEnemyDistSq; -extern f32 D_801ED8D0; -// extern UNK_TYPE1 D_801ED8D4; -// extern UNK_TYPE1 D_801ED8D8; -// extern UNK_TYPE1 D_801ED8DC; -extern Mtx D_801ED8E0; -extern Actor* D_801ED920; extern Vec3f D_801EDE00; extern Vec3f D_801EDE10; diff --git a/include/z64actor.h b/include/z64actor.h index d757117fb..d794b8dd1 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -150,7 +150,7 @@ typedef struct Actor { /* 0x100 */ f32 uncullZoneScale; // Amount to increase the uncull zone scale by (in projected space) /* 0x104 */ f32 uncullZoneDownward; // Amount to increase uncull zone downward by (in projected space) /* 0x108 */ Vec3f prevPos; // World position from the previous update cycle - /* 0x114 */ u8 isTargeted; // Set to true if the actor is currently being targeted by the player + /* 0x114 */ u8 isLockedOn; // Set to true if the actor is currently being targeted by the player /* 0x115 */ u8 targetPriority; // Lower values have higher priority. Resets to 0 when player stops targeting /* 0x116 */ u16 textId; // Text ID to pass to link/display when interacting with the actor /* 0x118 */ u16 freezeTimer; // Actor does not update when set. Timer decrements automatically @@ -296,33 +296,47 @@ typedef enum { #define ACTORCTX_FLAG_6 (1 << 6) #define ACTORCTX_FLAG_7 (1 << 7) - -typedef struct { +// A set of 4 triangles which appear around an actor when the player Z-Targets it +typedef struct LockOnTriangleSet { /* 0x00 */ Vec3f pos; - /* 0x0C */ f32 unkC; + /* 0x0C */ f32 radius; // distance towards the center of the locked on /* 0x10 */ Color_RGBA8 color; -} TargetContextEntry; // size = 0x14 +} LockOnTriangleSet; // size = 0x14 typedef struct TargetContext { - /* 0x00 */ Vec3f unk0; - /* 0x0C */ Vec3f targetCenterPos; - /* 0x18 */ Color_RGBAf fairyInner; - /* 0x28 */ Color_RGBAf fairyOuter; - /* 0x38 */ Actor* arrowPointedActor; - /* 0x3C */ Actor* targetedActor; - /* 0x40 */ f32 unk40; - /* 0x44 */ f32 unk44; - /* 0x48 */ s16 unk48; // alpha - /* 0x4A */ u8 unk4A; - /* 0x4B */ u8 unk4B; - /* 0x4C */ s8 unk4C; - /* 0x4D */ UNK_TYPE1 pad4D[0x3]; - /* 0x50 */ TargetContextEntry unk50[3]; - /* 0x8C */ Actor* unk8C; + /* 0x00 */ Vec3f fairyPos; // Used by Tatl to indicate a targetable actor or general hint + /* 0x0C */ Vec3f lockOnPos; + /* 0x18 */ Color_RGBAf fairyInnerColor; + /* 0x28 */ Color_RGBAf fairyOuterColor; + /* 0x38 */ Actor* fairyActor; + /* 0x3C */ Actor* lockOnActor; + /* 0x40 */ f32 fairyMoveProgressFactor; // Controls Tatl so she can smootly transition to the target actor + /* 0x44 */ f32 lockOnRadius; // Control the circle lock-on triangles coming in from offscreen when you first target + /* 0x48 */ s16 lockOnAlpha; + /* 0x4A */ u8 fairyActorCategory; + /* 0x4B */ u8 rotZTick; + /* 0x4C */ s8 lockOnIndex; + /* 0x50 */ LockOnTriangleSet lockOnTriangleSets[3]; + /* 0x8C */ Actor* forcedTargetActor; // Never set to non-NULL /* 0x90 */ Actor* bgmEnemy; - /* 0x94 */ Actor* unk_94; + /* 0x94 */ Actor* arrowPointedActor; } TargetContext; // size = 0x98 +typedef enum TargetMode { + /* 0 */ TARGET_MODE_0, + /* 1 */ TARGET_MODE_1, + /* 2 */ TARGET_MODE_2, + /* 3 */ TARGET_MODE_3, + /* 4 */ TARGET_MODE_4, + /* 5 */ TARGET_MODE_5, + /* 6 */ TARGET_MODE_6, + /* 7 */ TARGET_MODE_7, + /* 8 */ TARGET_MODE_8, + /* 9 */ TARGET_MODE_9, + /* 10 */ TARGET_MODE_10, + /* 11 */ TARGET_MODE_MAX +} TargetMode; + typedef struct { /* 0x0 */ TexturePtr texture; /* 0x4 */ s16 x; @@ -407,7 +421,7 @@ typedef struct ActorContext { /* 0x00F */ u8 numLensActors; /* 0x010 */ ActorListEntry actorLists[ACTORCAT_MAX]; /* 0x0A0 */ Actor* lensActors[LENS_ACTOR_MAX]; // Draws up to LENS_ACTOR_MAX number of invisible actors - /* 0x120 */ TargetContext targetContext; + /* 0x120 */ TargetContext targetCtx; /* 0x1B8 */ ActorContextSceneFlags sceneFlags; /* 0x1E4 */ TitleCardContext titleCtxt; /* 0x1F4 */ PlayerImpact playerImpact; @@ -454,14 +468,14 @@ typedef enum { /* 3 */ DOORLOCK_MAX } DoorLockType; -// Targetability / ACTOR_FLAG_TARGETABLE? -#define ACTOR_FLAG_1 (1 << 0) -// +// Allows Tatl to fly over the actor and lock-on it (using the Z-target) +#define ACTOR_FLAG_TARGETABLE (1 << 0) +// Unused #define ACTOR_FLAG_2 (1 << 1) -// -#define ACTOR_FLAG_4 (1 << 2) -// -#define ACTOR_FLAG_8 (1 << 3) +// Changes the targeting behaviour for unfriendly actors (sound effects, Player's stance, etc) +#define ACTOR_FLAG_UNFRIENDLY (1 << 2) +// Opposite of the UNFRIENDLY flag. It is not checked explictly in the original game. +#define ACTOR_FLAG_FRIENDLY (1 << 3) // #define ACTOR_FLAG_10 (1 << 4) // @@ -680,9 +694,11 @@ typedef struct BlinkInfo { /* 0x2 */ s16 blinkTimer; } BlinkInfo; // size = 0x4 -extern TargetRangeParams gTargetRanges[]; +extern TargetRangeParams gTargetRanges[TARGET_MODE_MAX]; extern s16 D_801AED48[8]; extern Gfx D_801AEF88[]; extern Gfx D_801AEFA0[]; +extern Actor* D_801ED920; + #endif diff --git a/include/z64player.h b/include/z64player.h index 5974defc5..03bb71d94 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1168,7 +1168,7 @@ typedef struct Player { /* 0x564 */ ColliderQuad meleeWeaponQuads[2]; /* 0x664 */ ColliderQuad shieldQuad; /* 0x6E4 */ ColliderCylinder shieldCylinder; - /* 0x730 */ Actor* targetedActor; // Z/L-Targeted actor + /* 0x730 */ Actor* lockOnActor; // Z/L-Targeted actor /* 0x734 */ char unk_734[4]; /* 0x738 */ s32 unk_738; /* 0x73C */ s32 meleeWeaponEffectIndex[3]; diff --git a/spec b/spec index 6c8311802..7ebf16cd9 100644 --- a/spec +++ b/spec @@ -445,7 +445,6 @@ beginseg include "build/src/code/flg_set.o" include "build/src/code/z_DLF.o" include "build/src/code/z_actor.o" - include "build/data/code/z_actor.bss.o" include "build/src/code/z_actor_dlftbls.o" include "build/src/code/z_bgcheck.o" include "build/src/code/z_bg_collect.o" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 5debc583d..f88f511b5 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3,6 +3,7 @@ * Description: */ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" #include "sys_cfb.h" @@ -18,21 +19,26 @@ #include "objects/object_bdoor/object_bdoor.h" // bss -extern FaultClient sActorFaultClient; // 2 funcs -extern CollisionPoly* D_801ED8B0; // 1 func -extern s32 D_801ED8B4; // 2 funcs -extern Actor* D_801ED8B8; // 2 funcs -extern Actor* D_801ED8BC; // 2 funcs -extern Actor* D_801ED8C0; // 2 funcs -extern Actor* D_801ED8C4; // 2 funcs -extern f32 D_801ED8C8; // 2 funcs -extern f32 sBgmEnemyDistSq; // 2 funcs -extern f32 D_801ED8D0; // 2 funcs -extern s32 D_801ED8D4; // 2 funcs -extern s32 D_801ED8D8; // 2 funcs -extern s16 D_801ED8DC; // 2 funcs -extern Mtx D_801ED8E0; // 1 func -extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor +FaultClient sActorFaultClient; // 2 funcs + +CollisionPoly* D_801ED8B0; // 1 func +s32 D_801ED8B4; // 2 funcs + +Actor* sTargetableNearestActor; +Actor* sTargetablePrioritizedActor; +Actor* D_801ED8C0; +Actor* D_801ED8C4; + +f32 sTargetableNearestActorDistSq; +f32 sBgmEnemyDistSq; +f32 D_801ED8D0; +s32 sTargetablePrioritizedPriority; +s32 D_801ED8D8; +s16 sTargetPlayerRotY; + +Mtx sActorHiliteMtx; + +Actor* D_801ED920; // 2 funcs. 1 out of z_actor #define ACTOR_AUDIO_FLAG_SFX_ACTOR_POS (1 << 0) #define ACTOR_AUDIO_FLAG_SFX_CENTERED_1 (1 << 1) @@ -52,7 +58,7 @@ extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx); Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play); Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play); -void func_800BB8EC(GameState* gameState, ActorContext* actorCtx, Actor** arg2, Actor** arg3, Player* player); +void Target_GetTargetActor(PlayState* play, ActorContext* actorCtx, Actor** targetableP, Actor** arg3, Player* player); s32 func_800BA2FC(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projectedW); void Actor_AddToCategory(ActorContext* actorCtx, Actor* actor, u8 actorCategory); Actor* Actor_RemoveFromCategory(PlayState* play, ActorContext* actorCtx, Actor* actorToRemove); @@ -415,11 +421,11 @@ void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos *invW = (*invW < 1.0f) ? 1.0f : (1.0f / *invW); } -void Target_SetPos(TargetContext* targetCtx, s32 index, f32 x, f32 y, f32 z) { - targetCtx->unk50[index].pos.x = x; - targetCtx->unk50[index].pos.y = y; - targetCtx->unk50[index].pos.z = z; - targetCtx->unk50[index].unkC = targetCtx->unk44; +void Target_SetLockOnPos(TargetContext* targetCtx, s32 index, f32 x, f32 y, f32 z) { + targetCtx->lockOnTriangleSets[index].pos.x = x; + targetCtx->lockOnTriangleSets[index].pos.y = y; + targetCtx->lockOnTriangleSets[index].pos.z = z; + targetCtx->lockOnTriangleSets[index].radius = targetCtx->lockOnRadius; } typedef struct { @@ -427,282 +433,293 @@ typedef struct { /* 0x4 */ Color_RGBA8 outer; } TatlColor; // size = 0x8 +// For whatever reason it has an extra entry TatlColor sTatlColorList[] = { - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 255, 255, 230, 255 }, { 220, 160, 80, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 150, 150, 255, 255 }, { 150, 150, 255, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, - { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_SWITCH + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_BG + { { 255, 255, 230, 255 }, { 220, 160, 80, 0 } }, // ACTORCAT_PLAYER + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_EXPLOSIVES + { { 150, 150, 255, 255 }, { 150, 150, 255, 0 } }, // ACTORCAT_NPC + { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, // ACTORCAT_ENEMY + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_PROP + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_ITEMACTION + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_MISC + { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } }, // ACTORCAT_BOSS + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_DOOR + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_CHEST + { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, // ACTORCAT_MAX }; -void func_800B4F78(TargetContext* targetCtx, s32 type, PlayState* play) { +void Target_InitLockOn(TargetContext* targetCtx, ActorType type, PlayState* play) { TatlColor* tatlColorEntry; s32 i; - TargetContextEntry* targetEntry; + LockOnTriangleSet* triangleSet; - Math_Vec3f_Copy(&targetCtx->targetCenterPos, &play->view.eye); - targetCtx->unk48 = 0x100; + Math_Vec3f_Copy(&targetCtx->lockOnPos, &play->view.eye); + targetCtx->lockOnAlpha = 256; tatlColorEntry = &sTatlColorList[type]; - targetCtx->unk44 = 500.0f; + targetCtx->lockOnRadius = 500.0f; - targetEntry = targetCtx->unk50; - for (i = 0; i < ARRAY_COUNT(targetCtx->unk50); i++, targetEntry++) { - Target_SetPos(targetCtx, i, 0.0f, 0.0f, 0.0f); + triangleSet = targetCtx->lockOnTriangleSets; + for (i = 0; i < ARRAY_COUNT(targetCtx->lockOnTriangleSets); i++, triangleSet++) { + Target_SetLockOnPos(targetCtx, i, 0.0f, 0.0f, 0.0f); - targetEntry->color.r = tatlColorEntry->inner.r; - targetEntry->color.g = tatlColorEntry->inner.g; - targetEntry->color.b = tatlColorEntry->inner.b; + triangleSet->color.r = tatlColorEntry->inner.r; + triangleSet->color.g = tatlColorEntry->inner.g; + triangleSet->color.b = tatlColorEntry->inner.b; } } -void Target_SetColors(TargetContext* targetCtx, Actor* actor, s32 type, PlayState* play) { - targetCtx->unk0.x = actor->focus.pos.x; - targetCtx->unk0.y = actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y); - targetCtx->unk0.z = actor->focus.pos.z; +void Target_SetFairyState(TargetContext* targetCtx, Actor* actor, ActorType type, PlayState* play) { + targetCtx->fairyPos.x = actor->focus.pos.x; + targetCtx->fairyPos.y = actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y); + targetCtx->fairyPos.z = actor->focus.pos.z; - targetCtx->fairyInner.r = sTatlColorList[type].inner.r; - targetCtx->fairyInner.g = sTatlColorList[type].inner.g; - targetCtx->fairyInner.b = sTatlColorList[type].inner.b; - targetCtx->fairyInner.a = sTatlColorList[type].inner.a; - targetCtx->fairyOuter.r = sTatlColorList[type].outer.r; - targetCtx->fairyOuter.g = sTatlColorList[type].outer.g; - targetCtx->fairyOuter.b = sTatlColorList[type].outer.b; - targetCtx->fairyOuter.a = sTatlColorList[type].outer.a; + targetCtx->fairyInnerColor.r = sTatlColorList[type].inner.r; + targetCtx->fairyInnerColor.g = sTatlColorList[type].inner.g; + targetCtx->fairyInnerColor.b = sTatlColorList[type].inner.b; + targetCtx->fairyInnerColor.a = sTatlColorList[type].inner.a; + targetCtx->fairyOuterColor.r = sTatlColorList[type].outer.r; + targetCtx->fairyOuterColor.g = sTatlColorList[type].outer.g; + targetCtx->fairyOuterColor.b = sTatlColorList[type].outer.b; + targetCtx->fairyOuterColor.a = sTatlColorList[type].outer.a; } -void Actor_TargetContextInit(TargetContext* targetCtx, Actor* actor, PlayState* play) { +void Target_Init(TargetContext* targetCtx, Actor* actor, PlayState* play) { targetCtx->bgmEnemy = NULL; - targetCtx->unk8C = NULL; - targetCtx->targetedActor = NULL; - targetCtx->arrowPointedActor = NULL; - targetCtx->unk4B = 0; - targetCtx->unk4C = 0; - targetCtx->unk40 = 0.0f; - Target_SetColors(targetCtx, actor, actor->category, play); - func_800B4F78(targetCtx, actor->category, play); + targetCtx->forcedTargetActor = NULL; + targetCtx->lockOnActor = NULL; + targetCtx->fairyActor = NULL; + targetCtx->rotZTick = 0; + targetCtx->lockOnIndex = 0; + targetCtx->fairyMoveProgressFactor = 0.0f; + Target_SetFairyState(targetCtx, actor, actor->category, play); + Target_InitLockOn(targetCtx, actor->category, play); } -void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { +void Target_Draw(TargetContext* targetCtx, PlayState* play) { Player* player = GET_PLAYER(play); + Actor* actor; - if (!(player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | - PLAYER_STATE1_400 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000))) { - Actor* actor = targetCtx->targetedActor; - - OPEN_DISPS(play->state.gfxCtx); - - if (targetCtx->unk48 != 0) { - TargetContextEntry* entry; - s16 alpha = 255; - f32 var1 = 1.0f; - Vec3f projectedPos; - s32 spB8; - f32 invW; - s32 spB0; - s32 spAC; - f32 var2; - s32 i; - - if (targetCtx->unk4B != 0) { - spB8 = 1; - } else { - spB8 = 3; - } - - if (actor != NULL) { - Math_Vec3f_Copy(&targetCtx->targetCenterPos, &actor->focus.pos); - var1 = (500.0f - targetCtx->unk44) / 420.0f; - } else { - targetCtx->unk48 -= 120; - if (targetCtx->unk48 < 0) { - targetCtx->unk48 = 0; - } - alpha = targetCtx->unk48; - } - - Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &projectedPos, &invW); - - projectedPos.x = ((SCREEN_WIDTH / 2) * (projectedPos.x * invW)) * var1; - projectedPos.x = CLAMP(projectedPos.x, -SCREEN_WIDTH, SCREEN_WIDTH); - - projectedPos.y = ((SCREEN_HEIGHT / 2) * (projectedPos.y * invW)) * var1; - projectedPos.y = CLAMP(projectedPos.y, -SCREEN_HEIGHT, SCREEN_HEIGHT); - - projectedPos.z = projectedPos.z * var1; - - targetCtx->unk4C--; - if (targetCtx->unk4C < 0) { - targetCtx->unk4C = 2; - } - - Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z); - - if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) { - OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); - - for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) { - entry = &targetCtx->unk50[spAC]; - - if (entry->unkC < 500.0f) { - if (entry->unkC <= 120.0f) { - var2 = 0.15f; - } else { - var2 = ((entry->unkC - 120.0f) * 0.001f) + 0.15f; - } - - Matrix_Translate(entry->pos.x, entry->pos.y, 0.0f, MTXMODE_NEW); - Matrix_Scale(var2, 0.15f, 1.0f, MTXMODE_APPLY); - - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, entry->color.r, entry->color.g, entry->color.b, - (u8)alpha); - - Matrix_RotateZS((targetCtx->unk4B * 512), MTXMODE_APPLY); - - for (i = 0; i < 4; i++) { - Matrix_RotateZS(0x4000, MTXMODE_APPLY); - Matrix_Push(); - Matrix_Translate(entry->unkC, entry->unkC, 0.0f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(OVERLAY_DISP++, gZTargetLockOnTriangleDL); - Matrix_Pop(); - } - } - - alpha -= 255 / 3; - if (alpha < 0) { - alpha = 0; - } - } - } - } - - actor = targetCtx->unk_94; - if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { - TatlColor* color = &sTatlColorList[actor->category]; - - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); - - Matrix_Translate(actor->focus.pos.x, - actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f, - actor->focus.pos.z, MTXMODE_NEW); - Matrix_RotateYS((play->gameplayFrames * 3000), MTXMODE_APPLY); - Matrix_Scale((iREG(27) + 35) / 1000.0f, (iREG(28) + 60) / 1000.0f, (iREG(29) + 50) / 1000.0f, - MTXMODE_APPLY); - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, color->inner.r, color->inner.g, color->inner.b, 255); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_XLU_DISP++, gZTargetArrowDL); - } - - CLOSE_DISPS(play->state.gfxCtx); + if (player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | + PLAYER_STATE1_400 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000)) { + return; } + + actor = targetCtx->lockOnActor; + + OPEN_DISPS(play->state.gfxCtx); + + if (targetCtx->lockOnAlpha != 0) { + LockOnTriangleSet* entry; + s16 alpha = 255; + f32 projectdPosScale = 1.0f; + Vec3f projectedPos; + s32 totalEntries; + f32 invW; + s32 i; + s32 index; + f32 lockOnScaleX; + + if (targetCtx->rotZTick != 0) { + totalEntries = 1; + } else { + // Use multiple entries for the movement effect when the triangles are getting closer to the actor from the + // margin of the screen + totalEntries = ARRAY_COUNT(targetCtx->lockOnTriangleSets); + } + + if (actor != NULL) { + Math_Vec3f_Copy(&targetCtx->lockOnPos, &actor->focus.pos); + projectdPosScale = (500.0f - targetCtx->lockOnRadius) / 420.0f; + } else { + targetCtx->lockOnAlpha -= 120; + if (targetCtx->lockOnAlpha < 0) { + targetCtx->lockOnAlpha = 0; + } + alpha = targetCtx->lockOnAlpha; + } + + Actor_GetProjectedPos(play, &targetCtx->lockOnPos, &projectedPos, &invW); + + projectedPos.x = ((SCREEN_WIDTH / 2) * (projectedPos.x * invW)) * projectdPosScale; + projectedPos.x = CLAMP(projectedPos.x, -SCREEN_WIDTH, SCREEN_WIDTH); + + projectedPos.y = ((SCREEN_HEIGHT / 2) * (projectedPos.y * invW)) * projectdPosScale; + projectedPos.y = CLAMP(projectedPos.y, -SCREEN_HEIGHT, SCREEN_HEIGHT); + + projectedPos.z *= projectdPosScale; + + targetCtx->lockOnIndex--; + if (targetCtx->lockOnIndex < 0) { + targetCtx->lockOnIndex = ARRAY_COUNT(targetCtx->lockOnTriangleSets) - 1; + } + + Target_SetLockOnPos(targetCtx, targetCtx->lockOnIndex, projectedPos.x, projectedPos.y, projectedPos.z); + + if (!(player->stateFlags1 & PLAYER_STATE1_40) || (actor != player->lockOnActor)) { + OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); + + for (i = 0, index = targetCtx->lockOnIndex; i < totalEntries; + i++, index = (index + 1) % ARRAY_COUNT(targetCtx->lockOnTriangleSets)) { + entry = &targetCtx->lockOnTriangleSets[index]; + + if (entry->radius < 500.0f) { + s32 triangleIndex; + + if (entry->radius <= 120.0f) { + lockOnScaleX = 0.15f; + } else { + lockOnScaleX = ((entry->radius - 120.0f) * 0.001f) + 0.15f; + } + + Matrix_Translate(entry->pos.x, entry->pos.y, 0.0f, MTXMODE_NEW); + Matrix_Scale(lockOnScaleX, 0.15f, 1.0f, MTXMODE_APPLY); + + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, entry->color.r, entry->color.g, entry->color.b, (u8)alpha); + + Matrix_RotateZS(targetCtx->rotZTick * 0x200, MTXMODE_APPLY); + + // Draw the 4 lock-on triangles + for (triangleIndex = 0; triangleIndex < 4; triangleIndex++) { + Matrix_RotateZS(0x10000 / 4, MTXMODE_APPLY); + Matrix_Push(); + Matrix_Translate(entry->radius, entry->radius, 0.0f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(OVERLAY_DISP++, gZTargetLockOnTriangleDL); + Matrix_Pop(); + } + } + + alpha -= 255 / ARRAY_COUNT(targetCtx->lockOnTriangleSets); + if (alpha < 0) { + alpha = 0; + } + } + } + } + + actor = targetCtx->arrowPointedActor; + if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { + TatlColor* color = &sTatlColorList[actor->category]; + + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); + + Matrix_Translate(actor->focus.pos.x, actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f, + actor->focus.pos.z, MTXMODE_NEW); + Matrix_RotateYS(play->gameplayFrames * 0xBB8, MTXMODE_APPLY); + Matrix_Scale((iREG(27) + 35) / 1000.0f, (iREG(28) + 60) / 1000.0f, (iREG(29) + 50) / 1000.0f, MTXMODE_APPLY); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, color->inner.r, color->inner.g, color->inner.b, 255); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(POLY_XLU_DISP++, gZTargetArrowDL); + } + + CLOSE_DISPS(play->state.gfxCtx); } // OoT: func_8002C7BC -void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameState* gameState) { - PlayState* play = (PlayState*)gameState; - Actor* sp68 = NULL; +void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor, PlayState* play) { + s32 pad; + Actor* actor = NULL; s32 category; Vec3f projectedPos; f32 invW; - if ((player->targetedActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { - targetCtx->unk_94 = NULL; + // If currently not locked on to an actor and not pressing down on the analog stick then try to find a targetable + // actor + if ((player->lockOnActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { + targetCtx->arrowPointedActor = NULL; } else { - func_800BB8EC(gameState, &play->actorCtx, &sp68, &D_801ED920, player); - targetCtx->unk_94 = sp68; + Target_GetTargetActor(play, &play->actorCtx, &actor, &D_801ED920, player); + targetCtx->arrowPointedActor = actor; } - if (targetCtx->unk8C != NULL) { - sp68 = targetCtx->unk8C; - targetCtx->unk8C = NULL; - } else if (actor != NULL) { - sp68 = actor; + if (targetCtx->forcedTargetActor != NULL) { + actor = targetCtx->forcedTargetActor; + targetCtx->forcedTargetActor = NULL; + } else if (lockOnActor != NULL) { + actor = lockOnActor; } - if (sp68 != NULL) { - category = sp68->category; + if (actor != NULL) { + category = actor->category; } else { category = player->actor.category; } - if ((sp68 != targetCtx->arrowPointedActor) || (category != targetCtx->unk4A)) { - targetCtx->arrowPointedActor = sp68; - targetCtx->unk4A = category; - targetCtx->unk40 = 1.0f; + if ((actor != targetCtx->fairyActor) || (category != targetCtx->fairyActorCategory)) { + targetCtx->fairyActor = actor; + targetCtx->fairyActorCategory = category; + targetCtx->fairyMoveProgressFactor = 1.0f; } - if (sp68 == NULL) { - sp68 = &player->actor; + if (actor == NULL) { + actor = &player->actor; } - if (!Math_StepToF(&targetCtx->unk40, 0.0f, 0.25f)) { - f32 temp_f0; - f32 x; - f32 y; - f32 z; + if (!Math_StepToF(&targetCtx->fairyMoveProgressFactor, 0.0f, 0.25f)) { + f32 fairyMoveScale = 0.25f / targetCtx->fairyMoveProgressFactor; + f32 x = actor->focus.pos.x - targetCtx->fairyPos.x; + f32 y = (actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y)) - targetCtx->fairyPos.y; + f32 z = actor->focus.pos.z - targetCtx->fairyPos.z; - temp_f0 = 0.25f / targetCtx->unk40; - - x = sp68->focus.pos.x - targetCtx->unk0.x; - y = (sp68->focus.pos.y + (sp68->targetArrowOffset * sp68->scale.y)) - targetCtx->unk0.y; - z = sp68->focus.pos.z - targetCtx->unk0.z; - - targetCtx->unk0.x += x * temp_f0; - targetCtx->unk0.y += y * temp_f0; - targetCtx->unk0.z += z * temp_f0; + targetCtx->fairyPos.x += x * fairyMoveScale; + targetCtx->fairyPos.y += y * fairyMoveScale; + targetCtx->fairyPos.z += z * fairyMoveScale; } else { - Target_SetColors(targetCtx, sp68, category, play); + Target_SetFairyState(targetCtx, actor, category, play); } - if ((actor != NULL) && (targetCtx->unk4B == 0)) { - Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW); + if ((lockOnActor != NULL) && (targetCtx->rotZTick == 0)) { + Actor_GetProjectedPos(play, &lockOnActor->focus.pos, &projectedPos, &invW); if ((projectedPos.z <= 0.0f) || (fabsf(projectedPos.x * invW) >= 1.0f) || (fabsf(projectedPos.y * invW) >= 1.0f)) { - actor = NULL; + lockOnActor = NULL; } } - if (actor != NULL) { - if (actor != targetCtx->targetedActor) { + if (lockOnActor != NULL) { + if (lockOnActor != targetCtx->lockOnActor) { s32 sfxId; - func_800B4F78(targetCtx, actor->category, play); + // Lock On entries need to be re-initialized when changing the targeted actor + Target_InitLockOn(targetCtx, lockOnActor->category, play); - targetCtx->targetedActor = actor; + targetCtx->lockOnActor = lockOnActor; - if (actor->id == ACTOR_EN_BOOM) { - targetCtx->unk48 = 0; + if (lockOnActor->id == ACTOR_EN_BOOM) { + // Avoid drawing the lock on triangles on a zora boomerang + targetCtx->lockOnAlpha = 0; } - sfxId = - CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1) ? NA_SE_SY_LOCK_ON : NA_SE_SY_LOCK_ON_HUMAN; + sfxId = CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) + ? NA_SE_SY_LOCK_ON + : NA_SE_SY_LOCK_ON_HUMAN; Audio_PlaySfx(sfxId); } - targetCtx->targetCenterPos.x = actor->world.pos.x; - targetCtx->targetCenterPos.y = actor->world.pos.y - (actor->shape.yOffset * actor->scale.y); - targetCtx->targetCenterPos.z = actor->world.pos.z; + targetCtx->lockOnPos.x = lockOnActor->world.pos.x; + targetCtx->lockOnPos.y = lockOnActor->world.pos.y - (lockOnActor->shape.yOffset * lockOnActor->scale.y); + targetCtx->lockOnPos.z = lockOnActor->world.pos.z; - if (targetCtx->unk4B == 0) { - f32 temp_f0_2; - f32 clampedFloat; + if (targetCtx->rotZTick == 0) { + f32 lockOnStep = (500.0f - targetCtx->lockOnRadius) * 3.0f; - temp_f0_2 = (500.0f - targetCtx->unk44) * 3.0f; - clampedFloat = CLAMP(temp_f0_2, 30.0f, 100.0f); + lockOnStep = CLAMP(lockOnStep, 30.0f, 100.0f); - if (Math_StepToF(&targetCtx->unk44, 80.0f, clampedFloat)) { - targetCtx->unk4B++; + if (Math_StepToF(&targetCtx->lockOnRadius, 80.0f, lockOnStep)) { + targetCtx->rotZTick++; } } else { - targetCtx->unk4B = (targetCtx->unk4B + 3) | 0x80; - targetCtx->unk44 = 120.0f; + // 0x80 is or'd to avoid getting this value be set to zero + // This rotation value gets multiplied by 0x200, which multiplied by 0x80 gives a full turn (0x10000) + targetCtx->rotZTick = (targetCtx->rotZTick + 3) | 0x80; + targetCtx->lockOnRadius = 120.0f; } } else { - targetCtx->targetedActor = NULL; - Math_StepToF(&targetCtx->unk44, 500.0f, 80.0f); + targetCtx->lockOnActor = NULL; + Math_StepToF(&targetCtx->lockOnRadius, 500.0f, 80.0f); } } @@ -1048,7 +1065,7 @@ void* Actor_FindSharedMemoryEntry(PlayState* play, s16 id) { void Actor_Kill(Actor* actor) { actor->draw = NULL; actor->update = NULL; - actor->flags &= ~ACTOR_FLAG_1; + actor->flags &= ~ACTOR_FLAG_TARGETABLE; } void Actor_SetWorldToHome(Actor* actor) { @@ -1089,7 +1106,7 @@ void Actor_Init(Actor* actor, PlayState* play) { Actor_SetFocus(actor, 0.0f); Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos); Actor_SetScale(actor, 0.01f); - actor->targetMode = 3; + actor->targetMode = TARGET_MODE_3; actor->terminalVelocity = -20.0f; actor->xyzDistToPlayerSq = FLT_MAX; @@ -1702,18 +1719,18 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, } } -Gfx* Hilite_Draw(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx, Gfx* dl, Hilite** hilite) { +Gfx* Hilite_Draw(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx, Gfx* dl, Hilite** hiliteP) { LookAt* lookAt = GRAPH_ALLOC(gfxCtx, sizeof(LookAt)); f32 correctedEyeX = (eye->x == object->x) && (eye->z == object->z) ? eye->x + 0.001f : eye->x; - *hilite = GRAPH_ALLOC(gfxCtx, sizeof(Hilite)); + *hiliteP = GRAPH_ALLOC(gfxCtx, sizeof(Hilite)); - guLookAtHilite(&D_801ED8E0, lookAt, *hilite, correctedEyeX, eye->y, eye->z, object->x, object->y, object->z, 0.0f, - 1.0f, 0.0f, lightDir->x, lightDir->y, lightDir->z, lightDir->x, lightDir->y, lightDir->z, 0x10, + guLookAtHilite(&sActorHiliteMtx, lookAt, *hiliteP, correctedEyeX, eye->y, eye->z, object->x, object->y, object->z, + 0.0f, 1.0f, 0.0f, lightDir->x, lightDir->y, lightDir->z, lightDir->x, lightDir->y, lightDir->z, 0x10, 0x10); gSPLookAt(dl++, lookAt); - gDPSetHilite1Tile(dl++, 1, *hilite, 0x10, 0x10); + gDPSetHilite1Tile(dl++, 1, *hiliteP, 0x10, 0x10); return dl; } @@ -1803,56 +1820,86 @@ PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor) { return dest; } -f32 func_800B82EC(Actor* actor, Player* player, s16 angle) { - f32 temp_f12; - s16 temp_v0 = BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), angle); - s16 yaw = ABS_ALT(temp_v0); +/** + * Returns the squared xyz distance from the actor to Player. + * + * This distance will be adjusted smaller if Player is already targeting an actor. The more Player is facing the actor, + * the smaller the distance is adjusted. + */ +f32 Target_GetAdjustedDistSq(Actor* actor, Player* player, s16 playerShapeYaw) { + f32 adjDistSq; + s16 yawDiff; - if (player->targetedActor != NULL) { - if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_CANT_LOCK_ON))) { + // The yaw, with player as the origin, from where player is facing to where the actor is positioned + yawDiff = ABS_ALT(BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), playerShapeYaw)); + + if (player->lockOnActor != NULL) { + if ((yawDiff > 0x4000) || (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { return FLT_MAX; } - temp_f12 = actor->xyzDistToPlayerSq - ((actor->xyzDistToPlayerSq * 0.8f) * ((0x4000 - yaw) * (1.0f / 0x8000))); - return temp_f12; + // Linear scaling, yaw being 90 degree means it will return the original distance, 0 degree will adjust to 60% + // of the distance + adjDistSq = + actor->xyzDistToPlayerSq - ((actor->xyzDistToPlayerSq * 0.8f) * ((0x4000 - yawDiff) * (1.0f / 0x8000))); + return adjDistSq; } - if (yaw >= 0x2AAB) { + if (yawDiff > (0x10000 / 6)) { return FLT_MAX; } return actor->xyzDistToPlayerSq; } #define TARGET_RANGE(range, leash) \ - { SQ(range), (f32)range / leash } + { SQ(range), (f32)(range) / (leash) } -TargetRangeParams gTargetRanges[] = { - TARGET_RANGE(70, 140), TARGET_RANGE(170, 255), TARGET_RANGE(280, 5600), TARGET_RANGE(350, 525), - TARGET_RANGE(700, 1050), TARGET_RANGE(1000, 1500), TARGET_RANGE(100, 105.36842), TARGET_RANGE(140, 163.33333), - TARGET_RANGE(240, 576), TARGET_RANGE(280, 280000), TARGET_RANGE(2500, 3750), +TargetRangeParams gTargetRanges[TARGET_MODE_MAX] = { + TARGET_RANGE(70, 140), // TARGET_MODE_0 + TARGET_RANGE(170, 255), // TARGET_MODE_1 + TARGET_RANGE(280, 5600), // TARGET_MODE_2 + TARGET_RANGE(350, 525), // TARGET_MODE_3 + TARGET_RANGE(700, 1050), // TARGET_MODE_4 + TARGET_RANGE(1000, 1500), // TARGET_MODE_5 + TARGET_RANGE(100, 105.36842), // TARGET_MODE_6 + TARGET_RANGE(140, 163.33333), // TARGET_MODE_7 + TARGET_RANGE(240, 576), // TARGET_MODE_8 + TARGET_RANGE(280, 280000), // TARGET_MODE_9 + TARGET_RANGE(2500, 3750), // TARGET_MODE_10 }; -s32 func_800B83BC(Actor* actor, f32 arg1) { - return arg1 < gTargetRanges[actor->targetMode].rangeSq; +/** + * Checks if an actor at distance `distSq` is inside the range specified by its targetMode + */ +s32 Target_IsActorInRange(Actor* actor, f32 distSq) { + return distSq < gTargetRanges[actor->targetMode].rangeSq; } -s32 func_800B83F8(Actor* actor, Player* player, s32 flag) { - if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_1) || (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { +/** + * Returns true if the actor is outside the leash distance to player. + * + * Passing true to ignoreLeash avoids the distance and yaw checks, and considers the actor inside the leash distance. + */ +s32 Target_OutsideLeashRange(Actor* actor, Player* player, s32 ignoreLeash) { + if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_TARGETABLE) || + (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { return true; } - if (!flag) { - s16 yaw = BINANG_SUB(actor->yawTowardsPlayer, 0x8000) - player->actor.shape.rot.y; - s16 phi_v1 = ABS_ALT(yaw); - f32 dist; + if (!ignoreLeash) { + s16 yawDiff; + f32 distSq; - if ((player->targetedActor == NULL) && (phi_v1 >= 0x2AAB)) { - dist = FLT_MAX; + // The yaw, with player as the origin, from where player is facing to where the actor is positioned + yawDiff = ABS_ALT(BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), player->actor.shape.rot.y)); + + if ((player->lockOnActor == NULL) && (yawDiff > (0x10000 / 6))) { + distSq = FLT_MAX; } else { - dist = actor->xyzDistToPlayerSq; + distSq = actor->xyzDistToPlayerSq; } - return !func_800B83BC(actor, gTargetRanges[actor->targetMode].leashScale * dist); + return !Target_IsActorInRange(actor, gTargetRanges[actor->targetMode].leashScale * distSq); } return false; @@ -1911,7 +1958,7 @@ s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRan if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || ((exchangeItemAction > PLAYER_IA_NONE) && Player_InCsMode(play)) || - (!actor->isTargeted && + (!actor->isLockedOn && ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) || (xzRange < actor->xzDistToPlayer)))) { return false; @@ -1971,7 +2018,7 @@ s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) { if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) && (talkActor != NULL)) { player->talkActor = actor2; - player->targetedActor = actor2; + player->lockOnActor = actor2; return true; } @@ -2372,7 +2419,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto actorCtx->absoluteSpace = NULL; Actor_SpawnEntry(actorCtx, actorEntry, play); - Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); + Target_Init(&actorCtx->targetCtx, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); Actor_InitHalfDaysBit(actorCtx); Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL); Actor_SpawnHorse(play, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); @@ -2473,13 +2520,13 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { actor->flags &= ~ACTOR_FLAG_1000000; if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) { - if (actor == params->player->targetedActor) { - actor->isTargeted = true; + if (actor == params->player->lockOnActor) { + actor->isLockedOn = true; } else { - actor->isTargeted = false; + actor->isLockedOn = false; } - if ((actor->targetPriority != 0) && (params->player->targetedActor == NULL)) { + if ((actor->targetPriority != 0) && (params->player->lockOnActor == NULL)) { actor->targetPriority = 0; } @@ -2604,22 +2651,22 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } } - actor = player->targetedActor; + actor = player->lockOnActor; if ((actor != NULL) && (actor->update == NULL)) { actor = NULL; - func_80123DA4(player); + Player_Untarget(player); } if ((actor == NULL) || (player->unk_738 < 5)) { actor = NULL; - if (actorCtx->targetContext.unk4B != 0) { - actorCtx->targetContext.unk4B = 0; + if (actorCtx->targetCtx.rotZTick != 0) { + actorCtx->targetCtx.rotZTick = 0; Audio_PlaySfx(NA_SE_SY_LOCK_OFF); } } if (!(player->stateFlags1 & PLAYER_STATE1_2)) { - func_800B5814(&actorCtx->targetContext, player, actor, &play->state); + Target_Update(&actorCtx->targetCtx, player, actor, play); } TitleCard_Update(&play->state, &actorCtx->titleCtxt); @@ -3396,21 +3443,21 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { Actor* newHead; ActorOverlay* overlayEntry = actor->overlayEntry; - if ((player != NULL) && (actor == player->targetedActor)) { - func_80123DA4(player); + if ((player != NULL) && (actor == player->lockOnActor)) { + Player_Untarget(player); Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), CAM_MODE_NORMAL); } - if (actor == actorCtx->targetContext.arrowPointedActor) { - actorCtx->targetContext.arrowPointedActor = NULL; + if (actor == actorCtx->targetCtx.fairyActor) { + actorCtx->targetCtx.fairyActor = NULL; } - if (actor == actorCtx->targetContext.unk8C) { - actorCtx->targetContext.unk8C = NULL; + if (actor == actorCtx->targetCtx.forcedTargetActor) { + actorCtx->targetCtx.forcedTargetActor = NULL; } - if (actor == actorCtx->targetContext.bgmEnemy) { - actorCtx->targetContext.bgmEnemy = NULL; + if (actor == actorCtx->targetCtx.bgmEnemy) { + actorCtx->targetCtx.bgmEnemy = NULL; } AudioSfx_StopByPos(&actor->projectedPos); @@ -3427,7 +3474,7 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { return newHead; } -s32 func_800BB59C(PlayState* play, Actor* actor) { +s32 Target_InTargetableScreenRegion(PlayState* play, Actor* actor) { s16 x; s16 y; @@ -3436,110 +3483,156 @@ s32 func_800BB59C(PlayState* play, Actor* actor) { return (x > -20) && (x < gScreenWidth + 20) && (y > -160) && (y < gScreenHeight + 160); } -void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, s32 actorCategory) { - PlayState* play = (PlayState*)gameState; - f32 temp_f0_2; - Actor* targetedActor; - Actor* actor; - s32 phi_s2; - CollisionPoly* sp80; - s32 sp7C; - Vec3f sp70; +/** + * Search for targetable actors of the `actorCategory` category. + * + * Looks for the actor of said category with higher targetPriority and the one that is nearest to player. This actor + * must be within the range (relative to player) speicified by its targetMode. + * + * The actor must be on-screen + * + * The highest priority actor is stored in `sTargetablePrioritizedActor`, while the nearest actor is stored in + * `sTargetableNearestActor`. The higher priority / smaller distance of those actors are stored in + * `sTargetablePrioritizedPriority` and `sTargetableNearestActorDistSq`. + * + * There is not much info to infer anything about ACTOR_FLAG_40000000, D_801ED8C4/D_801ED8C0, D_801ED8D8/D_801ED8D0. + * All appear unused in any meaningful way. + * + * For an actor to be taken in consideration by this function it needs: + * - Non-NULL update function (maybe obvious?) + * - Not be Player itself. + * - It must be targetable or ACTOR_FLAG_40000000 + * - Not be the already targeted actor, unless it has the ACTOR_FLAG_80000 flag + * - Be withing the range specified by its targetMode. + * - It must be on-screen (within a margin) + * - Must not be blocked by a surface (?) + * + * This function also checks for the nearest enemy actor, which allows determining if enemy background music should be + * played. This actor is stored in `targetContext.bgmEnemy` and its distance is stored in `sBgmEnemyDistSq` + * + * This function is expected to be called with almost every actor category in each cycle. On a new cycle its global + * variables must be reset by the caller, otherwise the information of the previous cycle will be retained on this one. + */ +void Target_FindTargetableActorForCategory(PlayState* play, ActorContext* actorCtx, Player* player, + ActorType actorCategory) { + f32 distSq; + Actor* actor = actorCtx->actorLists[actorCategory].first; + Actor* lockOnActor = player->lockOnActor; + s32 isNearestTargetableActor; s32 phi_s2_2; - actor = actorCtx->actorLists[actorCategory].first; - targetedActor = player->targetedActor; - while (actor != NULL) { - if ((actor->update != NULL) && ((Player*)actor != player)) { - if (actor->flags & (ACTOR_FLAG_40000000 | ACTOR_FLAG_1)) { - if ((actorCategory == ACTORCAT_ENEMY) && CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1)) { - if ((actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sBgmEnemyDistSq)) { - actorCtx->targetContext.bgmEnemy = actor; - sBgmEnemyDistSq = actor->xyzDistToPlayerSq; - } - } + for (; actor != NULL; actor = actor->next) { + if ((actor->update == NULL) || ((Player*)actor == player)) { + continue; + } - if ((actor != targetedActor) || (actor->flags & ACTOR_FLAG_80000)) { - temp_f0_2 = func_800B82EC(actor, player, D_801ED8DC); - phi_s2_2 = (actor->flags & ACTOR_FLAG_1) != 0; - if (phi_s2_2) { - phi_s2_2 = temp_f0_2 < D_801ED8C8; - } - phi_s2 = phi_s2_2; - phi_s2_2 = (actor->flags & ACTOR_FLAG_40000000) != 0; - if (phi_s2_2) { - phi_s2_2 = temp_f0_2 < D_801ED8D0; - } + // Actor must be at least either targetable or ACTOR_FLAG_40000000 + if (!(actor->flags & (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000000))) { + continue; + } - if (((phi_s2) || (phi_s2_2)) && (func_800B83BC(actor, temp_f0_2))) { - if (func_800BB59C(play, actor)) { - if (((!BgCheck_CameraLineTest1(&play->colCtx, &player->actor.focus.pos, &actor->focus.pos, - &sp70, &sp80, true, true, true, true, &sp7C)) || - (SurfaceType_IsIgnoredByProjectiles(&play->colCtx, sp80, sp7C)))) { - if (actor->targetPriority != 0) { - if ((phi_s2 != 0) && (actor->targetPriority < D_801ED8D4)) { - D_801ED8BC = actor; - D_801ED8D4 = actor->targetPriority; - } - if ((phi_s2_2 != 0) && (actor->targetPriority < D_801ED8D8)) { - D_801ED8C4 = actor; - D_801ED8D8 = actor->targetPriority; - } - } else { - if (phi_s2 != 0) { - D_801ED8B8 = actor; - D_801ED8C8 = temp_f0_2; - } - if (phi_s2_2 != 0) { - D_801ED8C0 = actor; - D_801ED8D0 = temp_f0_2; - } - } - } - } - } - } + // Determine the closest enemy actor to player within a range. Used for playing enemy background music. + if ((actorCategory == ACTORCAT_ENEMY) && + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { + if ((actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sBgmEnemyDistSq)) { + actorCtx->targetCtx.bgmEnemy = actor; + sBgmEnemyDistSq = actor->xyzDistToPlayerSq; } } - actor = actor->next; + // If this actor is the currently targeted one, then ignore it unless it has the ACTOR_FLAG_80000 flag + if ((actor == lockOnActor) && !(actor->flags & ACTOR_FLAG_80000)) { + continue; + } + + distSq = Target_GetAdjustedDistSq(actor, player, sTargetPlayerRotY); + + isNearestTargetableActor = (actor->flags & ACTOR_FLAG_TARGETABLE) && (distSq < sTargetableNearestActorDistSq); + phi_s2_2 = (actor->flags & ACTOR_FLAG_40000000) && (distSq < D_801ED8D0); + + if (!isNearestTargetableActor && !phi_s2_2) { + continue; + } + + if (Target_IsActorInRange(actor, distSq) && Target_InTargetableScreenRegion(play, actor)) { + CollisionPoly* poly; + s32 bgId; + Vec3f posResult; + + if (BgCheck_CameraLineTest1(&play->colCtx, &player->actor.focus.pos, &actor->focus.pos, &posResult, &poly, + true, true, true, true, &bgId)) { + if (!SurfaceType_IsIgnoredByProjectiles(&play->colCtx, poly, bgId)) { + continue; + } + } + + if (actor->targetPriority != 0) { + if (isNearestTargetableActor && (actor->targetPriority < sTargetablePrioritizedPriority)) { + sTargetablePrioritizedActor = actor; + sTargetablePrioritizedPriority = actor->targetPriority; + } + if (phi_s2_2 && (actor->targetPriority < D_801ED8D8)) { + D_801ED8C4 = actor; + D_801ED8D8 = actor->targetPriority; + } + } else { + if (isNearestTargetableActor) { + sTargetableNearestActor = actor; + sTargetableNearestActorDistSq = distSq; + } + if (phi_s2_2) { + D_801ED8C0 = actor; + D_801ED8D0 = distSq; + } + } + } } } -u8 D_801AED8C[] = { +u8 sTargetableActorCategories[] = { ACTORCAT_BOSS, ACTORCAT_ENEMY, ACTORCAT_BG, ACTORCAT_EXPLOSIVES, ACTORCAT_NPC, ACTORCAT_ITEMACTION, ACTORCAT_CHEST, ACTORCAT_SWITCH, ACTORCAT_PROP, ACTORCAT_MISC, ACTORCAT_DOOR, ACTORCAT_SWITCH, }; -void func_800BB8EC(GameState* gameState, ActorContext* actorCtx, Actor** arg2, Actor** arg3, Player* player) { +/** + * Search for the nearest targetable actor. + * + * The specific criteria is specified in Target_FindTargetableActorForCategory. + * + * The actor found is stored in the targetableP parameter. It may be NULL if no actor that fulfills the criteria is + * found. + */ +void Target_GetTargetActor(PlayState* play, ActorContext* actorCtx, Actor** targetableP, Actor** arg3, Player* player) { u8* actorCategories; s32 i; - D_801ED8B8 = D_801ED8BC = D_801ED8C0 = D_801ED8C4 = NULL; - D_801ED8C8 = D_801ED8D0 = sBgmEnemyDistSq = FLT_MAX; - D_801ED8D4 = D_801ED8D8 = INT32_MAX; + sTargetableNearestActor = sTargetablePrioritizedActor = D_801ED8C0 = D_801ED8C4 = NULL; + sTargetableNearestActorDistSq = D_801ED8D0 = sBgmEnemyDistSq = FLT_MAX; + sTargetablePrioritizedPriority = D_801ED8D8 = INT32_MAX; - actorCtx->targetContext.bgmEnemy = NULL; - D_801ED8DC = player->actor.shape.rot.y; + actorCtx->targetCtx.bgmEnemy = NULL; + sTargetPlayerRotY = player->actor.shape.rot.y; - actorCategories = D_801AED8C; + actorCategories = sTargetableActorCategories; + // Try to search for a targetable actor that's a Boss, Enemy or Bg first for (i = 0; i < 3; i++) { - func_800BB604(gameState, actorCtx, player, *actorCategories); + Target_FindTargetableActorForCategory(play, actorCtx, player, *actorCategories); actorCategories++; } - if (D_801ED8B8 == NULL) { - for (; i < ARRAY_COUNT(D_801AED8C); i++) { - func_800BB604(gameState, actorCtx, player, *actorCategories); + // If no actor in the above categories was found then try to search for one in every other category + if (sTargetableNearestActor == NULL) { + for (; i < ARRAY_COUNT(sTargetableActorCategories); i++) { + Target_FindTargetableActorForCategory(play, actorCtx, player, *actorCategories); actorCategories++; } } - if (D_801ED8B8 == NULL) { - *arg2 = D_801ED8BC; + if (sTargetableNearestActor == NULL) { + *targetableP = sTargetablePrioritizedActor; } else { - *arg2 = D_801ED8B8; + *targetableP = sTargetableNearestActor; } if (D_801ED8C0 == NULL) { @@ -3810,7 +3903,7 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16 s32 Actor_IsTargeted(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); - if ((player->stateFlags3 & PLAYER_STATE3_80000000) && actor->isTargeted) { + if ((player->stateFlags3 & PLAYER_STATE3_80000000) && actor->isLockedOn) { return true; } @@ -3823,7 +3916,7 @@ s32 Actor_IsTargeted(PlayState* play, Actor* actor) { s32 Actor_OtherIsTargeted(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); - if ((player->stateFlags3 & PLAYER_STATE3_80000000) && !actor->isTargeted) { + if ((player->stateFlags3 & PLAYER_STATE3_80000000) && !actor->isLockedOn) { return true; } @@ -4481,10 +4574,10 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { } if (arg3 < phi_f2) { - actor->flags &= ~ACTOR_FLAG_1; + actor->flags &= ~ACTOR_FLAG_TARGETABLE; Math_SmoothStepToS(&arg2, 0, 6, 0x14, 1); } else { - actor->flags |= ACTOR_FLAG_1; + actor->flags |= ACTOR_FLAG_TARGETABLE; Math_SmoothStepToS(&arg2, 0xFF, 6, 0x14, 1); } diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index 3f9f6b90e..1fa4d4cf2 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -1,7 +1,7 @@ #include "global.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnAObj*)thisx) @@ -46,7 +46,7 @@ static ColliderCylinderInit sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnAObj_Init(Actor* thisx, PlayState* play) { diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 02666fc4c..e2f31c404 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -231,7 +231,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos); enHy->actor.world.rot.y = enHy->actor.shape.rot.y; enHy->actor.gravity = 0.0f; - enHy->actor.flags &= ~ACTOR_FLAG_1; + enHy->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } return ret; @@ -239,7 +239,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { s32 EnHy_SetPointFowards(EnHy* enHy, PlayState* play, f32 gravity, s16 animIndex) { enHy->actor.gravity = gravity; - enHy->actor.flags |= ACTOR_FLAG_1; + enHy->actor.flags |= ACTOR_FLAG_TARGETABLE; EnHy_ChangeObjectAndAnim(enHy, play, animIndex); enHy->curPoint++; return false; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index cd458e331..3ba6a9e99 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6400,7 +6400,7 @@ void Interface_Draw(PlayState* play) { Minimap_Draw(play); if ((R_PAUSE_BG_PRERENDER_STATE != 2) && (R_PAUSE_BG_PRERENDER_STATE != 3)) { - Actor_DrawZTarget(&play->actorCtx.targetContext, play); + Target_Draw(&play->actorCtx.targetCtx, play); } Gfx_SetupDL39_Overlay(play->state.gfxCtx); diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index a109dab17..44427d54c 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,9 +1,9 @@ #include "prevent_bss_reordering.h" #include "global.h" -#define FLAGS \ - (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000 | \ - ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | \ + ACTOR_FLAG_2000000 | ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000) ActorFunc sPlayerCallInitFunc; ActorFunc sPlayerCallDestroyFunc; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index cd91ee42d..e272bbfea 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -518,7 +518,7 @@ s32 func_80123448(PlayState* play) { Player* player = GET_PLAYER(play); return (player->stateFlags1 & PLAYER_STATE1_400000) && - (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->targetedActor == NULL)); + (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->lockOnActor == NULL)); } // TODO: Player_IsGoronOrDeku is a temporary name until we have more info on this function. @@ -1315,9 +1315,8 @@ void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, Pla player->itemAction = itemAction; } -// Player_Untarget / Player_StopTargeting? -void func_80123DA4(Player* player) { - player->targetedActor = NULL; +void Player_Untarget(Player* player) { + player->lockOnActor = NULL; player->stateFlags2 &= ~PLAYER_STATE2_2000; } @@ -1335,14 +1334,14 @@ void func_80123DC0(Player* player) { ~(PLAYER_STATE1_8000 | PLAYER_STATE1_10000 | PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); } - func_80123DA4(player); + Player_Untarget(player); } void func_80123E90(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); func_80123DC0(player); - player->targetedActor = actor; + player->lockOnActor = actor; player->unk_A78 = actor; player->stateFlags1 |= PLAYER_STATE1_10000; Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, actor); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 427cc85d0..4baff41ce 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -865,7 +865,7 @@ s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemI case SUBS_OFFER_MODE_AUTO_TARGETED: //! @bug: Both x and y conditionals are always true, || should be an && if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) && - (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isTargeted) { + (fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isLockedOn) { actor->flags |= ACTOR_FLAG_10000; canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId); } diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c index c226c89f3..706b86b27 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c +++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c @@ -83,16 +83,16 @@ void func_80BD66AC(BgHakaTomb* this, PlayState* play) { s16 csId; if (Flags_GetClear(play, this->dyna.actor.room)) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId <= CS_ID_NONE) && Flags_GetClear(play, this->dyna.actor.room)) { - this->dyna.actor.flags |= ACTOR_FLAG_1; - if (this->dyna.actor.isTargeted) { + this->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; + if (this->dyna.actor.isLockedOn) { func_80BD6754(this); } } else { - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_Boss_01/z_boss_01.c b/src/overlays/actors/ovl_Boss_01/z_boss_01.c index 8d13ab6d3..3ca53ff7f 100644 --- a/src/overlays/actors/ovl_Boss_01/z_boss_01.c +++ b/src/overlays/actors/ovl_Boss_01/z_boss_01.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss01*)thisx) diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 255e2d3f7..751aa5523 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -13,7 +13,7 @@ #include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss02*)thisx) @@ -593,7 +593,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, BHEART_PARAM_NORMAL); } - this->actor.targetMode = 10; + this->actor.targetMode = TARGET_MODE_10; this->subCamUp.z = this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; if (TWINMOLD_GET_TYPE(&this->actor) == TWINMOLD_TYPE_STATIC) { @@ -601,7 +601,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { play->specialEffects = (void*)sEffects; this->actor.update = Boss02_Static_Update; this->actor.draw = Boss02_Static_Draw; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->playerScale = 0.01f; if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_55) || (sBlueWarp != NULL)) { this->unk_1D20 = 0; @@ -772,7 +772,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_0195 != 0) { this->actor.world.rot.z = Math_SinS(this->unk_014C * 0x1200) * 0xE00; } else { @@ -1192,9 +1192,9 @@ void Boss02_Tail_Update(Actor* thisx, PlayState* play) { } if ((this->actor.focus.pos.y < BgCheck_EntityRaycastFloor1(&play->colCtx, &outPoly, &pos)) || sIsInGiantMode) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } } @@ -1816,7 +1816,7 @@ void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_StopManual(play, &play->csCtx); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; player->stateFlags1 &= ~PLAYER_STATE1_100; this->playerScale = 0.01f; Play_DisableMotionBlur(); @@ -2227,7 +2227,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; Cutscene_StopManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1D20 = 0; sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3; sRedTwinmold->unk_0146[0] = sBlueTwinmold->unk_0146[0] = 60; @@ -2289,7 +2289,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { Cutscene_StopManual(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_END); this->unk_1D20 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; sp68->unk_0144 = 10; if ((sRedTwinmold->unk_0144 >= 10) && (sBlueTwinmold->unk_0144 >= 10)) { f32 phi_f0; diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 10f988f0b..168da5368 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -57,7 +57,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_water_effect/object_water_effect.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss03*)thisx) @@ -477,7 +477,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { this->jointTable[i].z = Math_SinS(this->unk_240 * 0x10 + i * 19000) * 4000.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; return; } @@ -508,7 +508,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { sGyorgEffects[i].type = GYORG_EFFECT_NONE; } - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; this->actor.colChkInfo.mass = MASS_HEAVY; this->actor.colChkInfo.health = 10; @@ -546,7 +546,7 @@ void func_809E344C(Boss03* this, PlayState* play) { this->actionFunc = func_809E34B8; Animation_MorphToLoop(&this->skelAnime, &gGyorgFastSwimmingAnim, -15.0f); this->unk_274 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -756,7 +756,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { this->unk_276 = 0x1000; this->unk_2BD = true; this->unk_278 = 15.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SkelAnime_Update(&this->skelAnime); @@ -1169,7 +1169,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->subCamAt.y = player->actor.world.pos.y + 30.0f; this->csState = 1; this->csTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2D5 = true; this->subCamFov = KREG(14) + 60.0f; @@ -1423,7 +1423,7 @@ void Boss03_SetupDeathCutscene(Boss03* this, PlayState* play) { this->workTimer[WORK_TIMER_UNK0_C] = 0; this->unk_242 = 0; this->csState = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void Boss03_DeathCutscene(Boss03* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index 4f4f907c5..82495ea1e 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -8,7 +8,7 @@ #include "z64shrink_window.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss04*)thisx) @@ -164,7 +164,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->actor.params = 0x64; Actor_SetScale(&this->actor, 0.1f); - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; this->actor.hintId = TATL_HINT_ID_WART; this->actor.colChkInfo.health = 20; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -232,7 +232,7 @@ void Boss04_Destroy(Actor* thisx, PlayState* play) { void func_809EC544(Boss04* this) { this->actionFunc = func_809EC568; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void func_809EC568(Boss04* this, PlayState* play) { @@ -522,7 +522,7 @@ void func_809ED224(Boss04* this) { this->unk_2D0 = 10000.0f; this->unk_2C8 = 200; Actor_PlaySfx(&this->actor, NA_SE_EN_ME_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Audio_RestorePrevBgm(); this->unk_1F6 = 10; } @@ -543,7 +543,7 @@ void func_809ED2A0(Boss04* this, PlayState* play) { } if (this->unk_1F8 == 3) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_700 = 0.0f; this->unk_6FC = 0.0f; this->unk_6F8 = 0.0f; @@ -749,9 +749,9 @@ void Boss04_Update(Actor* thisx, PlayState* play2) { func_809ED45C(this, play); if (this->unk_2CC > 3000.0f) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider1.base); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider2.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider2.base); diff --git a/src/overlays/actors/ovl_Boss_05/z_boss_05.c b/src/overlays/actors/ovl_Boss_05/z_boss_05.c index 314370079..535a3a8f5 100644 --- a/src/overlays/actors/ovl_Boss_05/z_boss_05.c +++ b/src/overlays/actors/ovl_Boss_05/z_boss_05.c @@ -6,7 +6,7 @@ #include "z_boss_05.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((Boss05*)thisx) diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index a65b1185a..38ca4f799 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -11,7 +11,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_knight/object_knight.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss06*)thisx) @@ -152,7 +152,7 @@ void Boss06_Init(Actor* thisx, PlayState* play) { this->unk_200[i] = temp_v0[i]; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void Boss06_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Boss_07/z_boss_07.c b/src/overlays/actors/ovl_Boss_07/z_boss_07.c index 824c70fa2..d2bc5d6be 100644 --- a/src/overlays/actors/ovl_Boss_07/z_boss_07.c +++ b/src/overlays/actors/ovl_Boss_07/z_boss_07.c @@ -7,7 +7,7 @@ #include "z_boss_07.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((Boss07*)thisx) diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c index d9a7cb348..9c759b63c 100644 --- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c +++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c @@ -8,7 +8,7 @@ #include "z64quake.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((BossHakugin*)thisx) @@ -203,7 +203,7 @@ static CollisionCheckInfoInit D_80B0EA80 = { 30, 80, 100, MASS_IMMOVABLE }; static InitChainEntry D_80B0EAD8[] = { ICHAIN_S8(hintId, 27, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 27, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index f5f88b80e..79e52d082 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -6,7 +6,7 @@ #include "z_dm_ah.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAh*)thisx) @@ -168,7 +168,7 @@ void DmAh_Init(Actor* thisx, PlayState* play) { OBJECT_AH_LIMB_MAX); this->animIndex = DMAH_ANIM_NONE; DmAh_ChangeAnim(this, DMAH_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_27C |= 1; if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c index ef6367ca2..91fd6ea80 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -6,7 +6,7 @@ #include "z_dm_al.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAl*)thisx) @@ -84,7 +84,7 @@ void DmAl_Init(Actor* thisx, PlayState* play) { MADAME_AROMA_LIMB_MAX); this->animIndex = MADAME_AROMA_ANIM_NONE; DmAl_ChangeAnim(this, MADAME_AROMA_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmAl_HandleCutscene; } diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 5e4300084..dfcb610c8 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -8,7 +8,7 @@ #include "objects/object_an4/object_an4.h" #include "objects/object_msmo/object_msmo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmAn*)thisx) @@ -199,7 +199,7 @@ void func_80C1C958(DmAn* this, PlayState* play) { this->animIndex = DMAN_ANIM_NONE; DmAn_ChangeAnim(this, play, DMAN_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; this->actor.draw = func_80C1D0B0; diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c index baeba3ce5..a0fa8d6b3 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -6,7 +6,7 @@ #include "z_dm_bal.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((DmBal*)thisx) @@ -70,7 +70,7 @@ static AnimationInfo sAnimationInfo[TINGLE_CS_ANIM_MAX] = { void DmBal_Init(Actor* thisx, PlayState* play) { DmBal* this = THIS; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.uncullZoneForward = 3000.0f; Actor_SetScale(&this->actor, 0.02f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 80d1bef15..0948b7afc 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -146,7 +146,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; DmChar08* this = THIS; - thisx->targetMode = 5; + thisx->targetMode = TARGET_MODE_5; this->eyeMode = TURTLE_EYEMODE_CLOSED; thisx->targetArrowOffset = 120.0f; ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f); @@ -201,7 +201,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->eyeMode = TURTLE_EYEMODE_BLINK_STRAIGHT; this->unk_207 = 0; this->unk_208 = 0; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; if (gSaveContext.save.entrance == ENTRANCE(ZORA_CAPE, 8)) { this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->actionFunc = func_80AAFAC4; @@ -220,7 +220,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT; this->unk_207 = 0; this->unk_208 = 0; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80AAFAE4; this->unk_1F0 = 1.0f; break; @@ -300,7 +300,7 @@ void func_80AAF884(DmChar08* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol); - this->dyna.actor.flags |= ACTOR_FLAG_1; + this->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80AAF8F4; } } diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 33df49243..2f7435053 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -8,7 +8,7 @@ #include "objects/object_an4/object_an4.h" #include "objects/object_msmo/object_msmo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmGm*)thisx) @@ -199,7 +199,7 @@ void func_80C248A8(DmGm* this, PlayState* play) { this->animIndex = DMGM_ANIM_NONE; DmGm_ChangeAnim(this, play, DMGM_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->unk_2AE |= 1; this->actor.draw = func_80C25000; diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c index 327f25868..cf62f4557 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -6,7 +6,7 @@ #include "z_dm_nb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((DmNb*)thisx) @@ -83,7 +83,7 @@ void DmNb_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX); this->animIndex = DMNB_ANIM_NONE; DmNb_ChangeAnim(this, DMNB_ANIM_0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmNb_HandleCutscene; } diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index acfd72b76..9b1d0f048 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1768,7 +1768,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->tatlMessageTimer++; if (this->tatlMessageTimer > 800) { this->tatlMessageTimer = 0; @@ -1793,7 +1793,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) { void DmStk_ClockTower_Idle(DmStk* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { DmStk_ClockTower_AdjustHeightAndRotation(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (this->animIndex == SK_ANIM_CALL_DOWN_MOON_LOOP) { this->actor.targetArrowOffset = 3100.0f; diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 3c12f1bbb..6eb910d2d 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -220,7 +220,7 @@ s32 func_80C2291C(DmTag* this, PlayState* play) { void func_80C229AC(DmTag* this, PlayState* play) { SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } void DmTag_DoNothing(DmTag* this, PlayState* play) { @@ -246,12 +246,12 @@ void DmTag_Init(Actor* thisx, PlayState* play) { this->unk_18E = 2; this->unk_18C = 0; SubS_SetOfferMode(&this->unk_18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = DmTag_DoNothing; } else if (this->actor.room == 2) { Actor_Kill(&this->actor); } else { - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->unk_18E = 1; this->unk_18C = 0; this->actionFunc = func_80C229AC; diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index 586704c3b..8d3fc8db4 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -82,7 +82,7 @@ void DoorAna_Init(Actor* thisx, PlayState* play) { DoorAna_SetupAction(this, DoorAna_WaitOpen); } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } void DoorAna_Destroy(Actor* thisx, PlayState* play) { @@ -130,7 +130,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { s32 grottoType = DOORANA_GET_TYPE(&this->actor); if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) { - if ((this->actor.targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && + if ((this->actor.targetMode != TARGET_MODE_0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) && (player->unk_AE7 == 0)) { @@ -162,10 +162,10 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { (this->actor.xzDistToPlayer <= 20.0f) && (this->actor.playerHeightRel >= -50.0f) && (this->actor.playerHeightRel <= 15.0f)) { player->stateFlags1 |= PLAYER_STATE1_80000000; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; } else { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } } diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index 8244c7fb6..ea443472f 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -83,7 +83,7 @@ void ElfMsg2_Init(Actor* thisx, PlayState* play) { ElfMsg2_SetupAction(this, func_8096EFD0); } else { ElfMsg2_SetupAction(this, func_8096EF98); - this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_1); + this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_TARGETABLE); this->actor.textId = func_8096EE50(this); } this->actor.shape.rot.z = 0; @@ -137,7 +137,7 @@ void func_8096EFD0(ElfMsg2* this, PlayState* play) { if ((this->actor.home.rot.y < 0) && (this->actor.home.rot.y >= -0x80) && (Flags_GetSwitch(play, -this->actor.home.rot.y - 1))) { ElfMsg2_SetupAction(this, func_8096EF98); - this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_1); + this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_TARGETABLE); this->actor.textId = func_8096EE50(this); } } diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index 1ac67f889..09928dfe9 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -7,7 +7,7 @@ #include "z_en_ah.h" #include "objects/object_ah/object_ah.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAh*)thisx) @@ -499,11 +499,11 @@ void func_80BD36B8(EnAh* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BD3DB0, &sp18) || ((this->unk_1DC != sp18.result) && !func_80BD3548(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1DC = sp18.result; func_80BD3658(this, play); @@ -545,7 +545,7 @@ void EnAh_Init(Actor* thisx, PlayState* play) { EnAh_ChangeAnim(this, ENAH_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_1DC = 0; this->unk_2D8 = 0; diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 4447877ee..0d6ee9380 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -7,7 +7,7 @@ #include "z_en_akindonuts.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAkindonuts*)thisx) @@ -152,7 +152,7 @@ static u16 D_80BF04AC[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -1318,7 +1318,7 @@ void func_80BEEE10(EnAkindonuts* this, PlayState* play) { this->actionFunc = func_80BEEFA8; } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { @@ -1341,7 +1341,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->actionFunc = func_80BEEE10; } else if (this->unk_32C & 0x20) { this->unk_32C &= ~0x20; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_32C &= ~0x4; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 3c3625840..0f8679b3c 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -6,7 +6,7 @@ #include "z_en_al.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAl*)thisx) @@ -702,8 +702,8 @@ s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BDF390(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_4F0 = PLAYER_IA_NONE; this->unk_4C2 = 0; this->unk_4D4 = 40.0f; @@ -787,11 +787,11 @@ void func_80BDF5E8(EnAl* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BDFC70, &sp20) || ((this->unk_35C != sp20.result) && !func_80BDF390(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_35C = sp20.result; this->unk_368 = func_80BDE384(this, play); diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index 1aef0a374..916bfca1b 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_400 | ACTOR_FLAG_4 | ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_400 | ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnAm*)thisx) @@ -209,7 +209,7 @@ void EnAm_RemoveEnemyTexture(EnAm* this, PlayState* play) { this->textureBlend -= 10; } else { this->textureBlend = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unkFlag = 0; } } @@ -230,7 +230,7 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) { if (this->textureBlend + 20 >= 255) { this->textureBlend = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->enemyCollider.info.bumper.dmgFlags = 0x81C2C788; this->interactCollider.info.bumper.dmgFlags = 0x760D3877; this->enemyCollider.base.atFlags |= AT_ON; diff --git a/src/overlays/actors/ovl_En_An/z_en_an.c b/src/overlays/actors/ovl_En_An/z_en_an.c index 6b85ffc53..3ab31bfb8 100644 --- a/src/overlays/actors/ovl_En_An/z_en_an.c +++ b/src/overlays/actors/ovl_En_An/z_en_an.c @@ -6,7 +6,7 @@ #include "z_en_an.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAn*)thisx) diff --git a/src/overlays/actors/ovl_En_And/z_en_and.c b/src/overlays/actors/ovl_En_And/z_en_and.c index 8c450a8ac..c244a0c5e 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -6,7 +6,7 @@ #include "z_en_and.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnAnd*)thisx) @@ -124,7 +124,7 @@ void EnAnd_Init(Actor* thisx, PlayState* play) { this->animIndex = ENAND_ANIM_NONE; EnAnd_ChangeAnim(this, ENAND_ANIM_0); Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->flags |= 8; this->actionFunc = EnAnd_HandleCutscene; } diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index 3adc9ad12..d8b87a81f 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -8,7 +8,7 @@ #include "z_en_ani.h" #include "z64quake.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnAni*)thisx) diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index bfc0e6e5a..eab1c83ce 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Racedog/z_en_racedog.h" #include "overlays/actors/ovl_En_Dg/z_en_dg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnAob01*)thisx) @@ -1114,7 +1114,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { case EVENTINF_DOG_RACE_STATE_NOT_STARTED: EnAob01_InitializeDogTextOffsets(); EnAob01_SpawnDogs(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnAob01_BeforeRace_Idle; break; @@ -1125,7 +1125,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { this->csId = this->actor.csId; EnAob01_Race_FollowSelectedDog(this, play); CutsceneManager_Queue(this->csId); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnAob01_Race_HidePlayer(this, play); this->actionFunc = EnAob01_Race_StartCutscene; break; @@ -1133,7 +1133,7 @@ void EnAob01_Init(Actor* thisx, PlayState* play) { case EVENTINF_DOG_RACE_STATE_ENDED: EnAob01_InitializeDogTextOffsets(); EnAob01_SpawnDogs(this, play); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = EnAob01_AfterRace_GiveRaceResult; break; diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index e8b74f8ec..daba8eea6 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -33,7 +33,7 @@ ActorInit En_Attack_Niw_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -59,7 +59,7 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { this->randomTargetCenterOffset.z = Rand_CenteredFloat(100.0f); Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; // Unnecessary: this actor does not start with this flag + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Unnecessary: this actor does not start with this flag this->actor.shape.rot.y = this->actor.world.rot.y = (Rand_ZeroOne() - 0.5f) * 60000.0f; this->actionFunc = EnAttackNiw_EnterViewFromOffscreen; } diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 156d7f956..8d1e306bb 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -205,7 +205,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); this->unk_374 = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; switch (BEAVER_GET_PARAM_F00(thisx)) { case 0: phi_v1 = @@ -303,12 +303,12 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { this->unk_2FA = 5; if (this->unk_374 & 2) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_374 |= 0x20; } } else { this->unk_2FA = 0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_374 |= 0x20; } func_80A94B20(play); @@ -322,7 +322,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { case ENTRANCE(WATERFALL_RAPIDS, 3): this->unk_2FA = 0; if (!(this->unk_374 & 2)) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); } if (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 3)) { this->unk_2FA = 0xA; @@ -378,18 +378,18 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { if (this->unk_2FA == 2) { if (!(this->unk_374 & 2)) { this->unk_374 |= 0x20; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); this->actionFunc = func_80A97C24; } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80A95C5C(this, play); } } else { if (this->unk_374 & 2) { this->unk_374 |= 0x20; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } this->actionFunc = func_80A97C24; } @@ -592,7 +592,7 @@ void func_80A95C5C(EnAz* this, PlayState* play) { this->actor.world.pos.y = this->actor.home.pos.y + 120.0f; this->actor.gravity = -1.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_IDLE, &this->animIndex); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_3C0 = 0; this->actionFunc = func_80A95CEC; @@ -627,7 +627,7 @@ void func_80A95DA0(EnAz* this, PlayState* play) { this->actor.gravity = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_374 |= 0x1000; Math_Vec3f_Copy(&this->actor.world.pos, &sp40->curPoint); @@ -650,7 +650,7 @@ void func_80A95E88(EnAz* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); } this->unk_374 &= ~0x2000; - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { func_80A95F94(this, play); } } @@ -1620,7 +1620,7 @@ void func_80A97EAC(EnAz* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER); this->unk_374 |= 0x1000; this->unk_3C2 = 0; diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index b2d64c386..bf93ad365 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -6,7 +6,7 @@ #include "z_en_baba.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBaba*)thisx) @@ -513,7 +513,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { this->actor.draw = EnBaba_Draw; this->stateFlags |= BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (play->sceneId == SCENE_BOMYA) { this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; @@ -558,7 +558,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { } else { this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; if (BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_SWAY) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->animIndex = BOMB_SHOP_LADY_ANIM_SWAY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_DoNothing; @@ -672,11 +672,11 @@ void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { ((this->scheduleResult != scheduleOutput.result) && !EnBaba_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = BOMB_SHOP_LADY_SCH_NONE; } else { this->stateFlags |= BOMB_SHOP_LADY_STATE_DRAW_SHADOW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; @@ -686,7 +686,7 @@ void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A39, &this->actor); // "I'm sorry" this->actionFunc = EnBaba_FollowSchedule_Talk; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -744,7 +744,7 @@ void EnBaba_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -4.0f; this->actionFunc = EnBaba_FinishInit; } diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c index 17eb5c9ef..25f867ec1 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBaguo*)thisx) @@ -133,7 +133,7 @@ void EnBaguo_Init(Actor* thisx, PlayState* play) { this->actor.world.rot.z = 0; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements[0].dim.modelSphere.radius = 30; @@ -146,7 +146,7 @@ void EnBaguo_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -3.0f; this->actor.colChkInfo.damageTable = &sDamageTable; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_HARD; this->actionFunc = EnBaguo_UndergroundIdle; } @@ -165,7 +165,7 @@ void EnBaguo_UndergroundIdle(EnBaguo* this, PlayState* play) { this->actor.world.rot.z = 0; this->actor.world.rot.x = this->actor.world.rot.z; this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBaguo_EmergeFromUnderground; } this->actor.shape.rot.y = this->actor.world.rot.y; @@ -293,7 +293,7 @@ void EnBaguo_RetreatUnderground(EnBaguo* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_APPEAR); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBaguo_UndergroundIdle; } } @@ -354,7 +354,7 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) { this->timer = 30; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.0f); this->collider.elements->dim.scale = 3.0f; this->collider.elements->info.toucher.damage = 8; diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c index 0bd7dfc0b..e6ac52cee 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -7,7 +7,7 @@ #include "z_en_baisen.h" #include "objects/object_bai/object_bai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBaisen*)thisx) @@ -97,7 +97,7 @@ void EnBaisen_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (this->paramCopy == 0) { diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.c b/src/overlays/actors/ovl_En_Bal/z_en_bal.c index 303baccf6..490517e09 100644 --- a/src/overlays/actors/ovl_En_Bal/z_en_bal.c +++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.c @@ -7,7 +7,7 @@ #include "z_en_bal.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBal*)thisx) diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c index cef624ca8..d1de1bb0d 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bat/object_bat.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnBat*)thisx) @@ -315,7 +315,7 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play) { } void EnBat_SetupDie(EnBat* this, PlayState* play) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); this->actor.speed *= Math_CosS(this->actor.world.rot.x); this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index 6d96d9e28..06c70aa24 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnBb*)thisx) @@ -370,7 +370,7 @@ void EnBb_SetupDead(EnBb* this, PlayState* play) { } this->actor.flags |= ACTOR_FLAG_10; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBb_Dead; } @@ -488,7 +488,7 @@ void EnBb_Revive(EnBb* this, PlayState* play) { if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.0005f)) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_ON; this->collider.base.atFlags |= AT_ON; this->actor.world.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 8226fa138..7b9355305 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -15,7 +15,7 @@ #include "z_en_bba_01.h" #include "objects/object_bba/object_bba.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBba01*)thisx) @@ -158,7 +158,7 @@ void EnBba01_FinishInit(EnHy* this, PlayState* play) { //! @bug: gBbaSkel does not match EnHy's skeleton assumptions. //! Since gBbaSkel has more limbs than expected, joint and morph tables will overflow if (EnHy_Init(this, play, &gBbaSkel, ENHY_ANIM_BBA_6)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnBba01_Draw; this->waitingOnInit = false; if (ENBBA01_GET_PATH_INDEX(&this->actor) == ENBBA01_PATH_INDEX_NONE) { @@ -228,7 +228,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->enHy.collider); Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->enHy.actor.flags &= ~ACTOR_FLAG_1; + this->enHy.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH_INDEX(&this->enHy.actor), ENBBA01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index ddf379c5b..0f9d16a47 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200) #define THIS ((EnBbfall*)thisx) @@ -269,7 +269,7 @@ void EnBbfall_SetupWaitForPlayer(EnBbfall* this) { } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBbfall_WaitForPlayer; } @@ -290,7 +290,7 @@ void EnBbfall_SetupEmerge(EnBbfall* this) { this->collider.base.ocFlags1 |= OC1_ON; this->actor.velocity.y = 17.0f; EnBbfall_EnableColliders(this); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEFALL_APPEAR); this->actionFunc = EnBbfall_Emerge; } diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.c b/src/overlays/actors/ovl_En_Bee/z_en_bee.c index 0e8727c45..d3fa6ad4a 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -6,7 +6,7 @@ #include "z_en_bee.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBee*)thisx) @@ -98,7 +98,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) { OBJECT_BEE_LIMB_MAX); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->instanceId = sNumLoadedBees; sNumLoadedBees++; diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index 9e5641aad..ac19bdb44 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -32,7 +32,7 @@ ActorInit En_Bh_InitVars = { void EnBh_Init(Actor* thisx, PlayState* play) { EnBh* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); SkelAnime_InitFlex(play, &this->skelAnime, &gBhSkel, &gBhFlyingAnim, this->jointTable, this->morphTable, OBJECT_BH_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index fd3818b01..a147db127 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -7,7 +7,7 @@ #include "z_en_bigokuta.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnBigokuta*)thisx) @@ -86,10 +86,8 @@ static ColliderCylinderInit sBodyCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 4, 130, 120, MASS_HEAVY }; static InitChainEntry sInitChain[] = { - ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), - ICHAIN_S8(hintId, TATL_HINT_ID_BIG_OCTO, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_S8(hintId, TATL_HINT_ID_BIG_OCTO, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 33, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c index f1bd9ae9b..bd17bb873 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -10,7 +10,7 @@ #include "overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) #define THIS ((EnBigpamet*)thisx) @@ -123,9 +123,11 @@ TexturePtr D_80A29754[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE), - ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_S8(hintId, 1, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 15, ICHAIN_CONTINUE), + ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), + ICHAIN_F32(targetArrowOffset, 4333, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; s32 D_80A29778 = 0; @@ -364,7 +366,7 @@ void func_80A2811C(EnBigpamet* this, PlayState* play) { void func_80A281B4(EnBigpamet* this) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80A281DC; } @@ -628,7 +630,7 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.params = ENBIGPAMET_0; if ((this->actor.parent->params == GEKKO_ON_SNAPPER) || (this->actor.parent->params == GEKKO_REAR_ON_SNAPPER) || @@ -680,7 +682,7 @@ void func_80A28DC0(EnBigpamet* this, PlayState* play) { void func_80A28E40(EnBigpamet* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRearUpAnim, -2.0f); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->actionFunc = func_80A28E98; } diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index 4e9eb8944..cced08a09 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -9,7 +9,7 @@ #include "objects/object_bigpo/object_bigpo.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnBigpo*)thisx) @@ -289,7 +289,7 @@ void EnBigpo_LowerCutsceneSubCamera(EnBigpo* this, PlayState* play) { } void EnBigpo_InitWellBigpo(EnBigpo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_WellWaitForProximity; this->fireRadius = 200.0f; } @@ -488,7 +488,7 @@ void EnBigpo_SetupWarpOut(EnBigpo* this) { this->collider.base.ocFlags1 &= ~OC1_ON; this->rotVelocity = 0x2000; this->idleTimer = 32; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR); this->actionFunc = EnBigpo_WarpingOut; @@ -549,7 +549,7 @@ void EnBigpo_SetupIdleFlying(EnBigpo* this) { this->actor.world.rot.y = this->actor.shape.rot.y; this->collider.base.acFlags |= AC_ON; this->collider.base.ocFlags1 |= OC1_ON; - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_IdleFlying; } @@ -749,7 +749,7 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) { this->actor.velocity.y = 0.0f; this->actor.world.pos.y -= 15.0f; func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_MISC); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); // targetable OFF, enemy music OFF + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); // targetable OFF, enemy music OFF this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_400; this->actionFunc = EnBigpo_LanternFalling; } @@ -816,8 +816,8 @@ void EnBigpo_ScoopSoulAppearing(EnBigpo* this, PlayState* play) { void EnBigpo_SetupScoopSoulIdle(EnBigpo* this) { this->savedHeight = this->actor.world.pos.y; Actor_SetFocus(&this->actor, -10.0f); - this->idleTimer = 400; // 20 seconds - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->idleTimer = 400; // 20 seconds + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_ScoopSoulIdle; } @@ -839,7 +839,7 @@ void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) { } void EnBigpo_SetupScoopSoulLeaving(EnBigpo* this) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10000); // targetable OFF and unknown OFF + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10000); // unknown OFF this->actionFunc = EnBigpo_ScoopSoulFadingAway; } @@ -851,7 +851,7 @@ void EnBigpo_ScoopSoulFadingAway(EnBigpo* this, PlayState* play) { } void EnBigpo_InitDampeMainPo(EnBigpo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnBigpo_SelectRandomFireLocations; } @@ -897,7 +897,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { randomFirePo->actor.update = EnBigpo_UpdateFire; func_800BC154(play, &play->actorCtx, &randomFirePo->actor, ACTORCAT_PROP); randomFirePo->unk20C = fireIndex; - randomFirePo->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + randomFirePo->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // make invisible by size: 0 Actor_SetScale(&randomFirePo->actor, 0); @@ -1128,7 +1128,7 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, PlayState* play) { } if (Actor_ApplyDamage(&this->actor) == 0) { - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD); Enemy_StartFinishingBlow(play, &this->actor); if (this->actor.params == BIG_POE_TYPE_SUMMONED) { // dampe type @@ -1163,7 +1163,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) { } if (EnBigpo_ApplyDamage(this, play) == 0) { - if ((this->actor.isTargeted) && (this->actionFunc != EnBigpo_WarpingOut) && + if ((this->actor.isLockedOn) && (this->actionFunc != EnBigpo_WarpingOut) && !(this->collider.base.acFlags & AC_HARD) && (this->actor.category == ACTORCAT_ENEMY)) { this->unk20C++; } else { diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index f4d498a14..744b46e24 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -12,7 +12,7 @@ #include "objects/object_bigslime/object_bigslime.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) #define THIS ((EnBigslime*)thisx) @@ -308,7 +308,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_GEKKO_GIANT_SLIME, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(targetArrowOffset, -13221, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; void EnBigslime_Init(Actor* thisx, PlayState* play2) { @@ -372,7 +372,7 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) { this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(gBigslimeFrozenTexAnim); this->iceShardTexAnim = Lib_SegmentedToVirtual(gBigslimeIceShardTexAnim); this->actor.world.pos.y = GBT_ROOM_5_MIN_Y; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.shadowAlpha = 255; this->gekkoScale = 0.007f; this->actor.shape.rot.y = 0; @@ -765,7 +765,7 @@ void EnBigslime_BreakIntoMinislime(EnBigslime* this, PlayState* play) { EnBigslime_SetPlayerParams(this, play); EnBigslime_EndCutscene(this, play); this->actor.colChkInfo.mass = 50; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_400); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_400); this->actor.flags |= ACTOR_FLAG_200; this->actor.hintId = TATL_HINT_ID_GEKKO_GIANT_SLIME; this->gekkoRot.x = 0; @@ -1001,7 +1001,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { if (this->callTimer == 0) { EnBigslime_EndCutscene(this, play); this->formBigslimeTimer = 2; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnBigslime_SetupIdleNoticePlayer(this); } } else if (this->isAnimFinished) { @@ -2040,7 +2040,7 @@ void EnBigslime_JumpGekko(EnBigslime* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->gekkoCollider.base.acFlags |= AC_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->jumpTimer--; @@ -2352,7 +2352,7 @@ void EnBigslime_SetupCutsceneDefeat(EnBigslime* this, PlayState* play) { this->minislime[i]->actor.params = MINISLIME_DEFEAT_IDLE; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnBigslime_GekkoThaw(this, play); this->actionFunc = EnBigslime_CutsceneDefeat; } diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index 0f2850266..81e94d78f 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -6,7 +6,7 @@ #include "z_en_bji_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBji01*)thisx) @@ -381,7 +381,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.child = NULL; this->animIndex = SHIKASHI_ANIM_NONE; diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index d21340d15..ed68e212f 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -6,7 +6,7 @@ #include "z_en_bjt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBjt*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c index 1dc827057..6abc25f79 100644 --- a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c +++ b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c @@ -6,7 +6,7 @@ #include "z_en_boj_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj01*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c index c5cff183a..ccf96aa67 100644 --- a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c +++ b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c @@ -6,7 +6,7 @@ #include "z_en_boj_02.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj02*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c index f72a5c081..ee00b2b5c 100644 --- a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c +++ b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c @@ -6,7 +6,7 @@ #include "z_en_boj_03.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj03*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c index efb7e96df..8ef2c98ea 100644 --- a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c +++ b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c @@ -6,7 +6,7 @@ #include "z_en_boj_04.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj04*)thisx) diff --git a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c index 2a6991922..ccb7f1cef 100644 --- a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c +++ b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c @@ -6,7 +6,7 @@ #include "z_en_boj_05.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBoj05*)thisx) diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index b40f1c774..7e277f4cf 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -7,7 +7,7 @@ #include "z_en_bom_bowl_man.h" #include "objects/object_cs/object_cs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBomBowlMan*)thisx) @@ -139,7 +139,7 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_CS_LIMB_MAX); this->unk_2F6 = ENBOMBOWLMAN_GET_F0(&this->actor); this->unk_2F4 = ENBOMBOWLMAN_GET_F(&this->actor); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); if (this->unk_2F6 == ENBOMBOWLMAN_F0_0) { @@ -414,7 +414,7 @@ void func_809C52B4(EnBomBowlMan* this) { this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.world.pos.x = 1340.0f; this->actor.world.pos.z = -1795.0f; this->unk_29C = 3; diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 6ef27baca..4409a7316 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -58,7 +58,7 @@ static ColliderSphereInit sSphereInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 1000 * BOMBCHU_SCALE, ICHAIN_STOP), }; @@ -180,7 +180,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.shape.rot.y = player->actor.shape.rot.y; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx_SurfaceBomb(play, &this->actor); this->isMoving = true; diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c index a7ebc75be..5d45ffc55 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -64,7 +64,7 @@ void EnBombal_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); this->actor.colChkInfo.mass = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.health = 1; this->scale = 0.1f; this->csId = this->actor.csId; diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index f3baf9341..21d8bf309 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -7,7 +7,7 @@ #include "z_en_bombers.h" #include "overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBombers*)thisx) @@ -144,7 +144,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphtable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.01f); this->unk_2BC = ENBOMBERS_GET_F0(&this->actor); diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index 390eca9f1..b8795c3f2 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -6,7 +6,7 @@ #include "z_en_bombers2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBombers2*)thisx) @@ -113,7 +113,7 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphTable, OBJECT_CS_LIMB_MAX); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) { diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c index 92a3f71f1..bf9ba05a9 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_bombf/object_bombf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10) #define THIS ((EnBombf*)thisx) @@ -110,7 +110,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play2) { thisx->focus.pos = thisx->world.pos; thisx->colChkInfo.cylRadius = 10; thisx->colChkInfo.cylHeight = 10; - thisx->targetMode = 0; + thisx->targetMode = TARGET_MODE_0; if (ENBOMBF_GET(thisx) == ENBOMBF_0) { this->timer = 140; @@ -118,7 +118,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play2) { thisx->gravity = -1.5f; func_800BC154(play, &play->actorCtx, thisx, 3); thisx->colChkInfo.mass = 200; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; EnBombf_SetupAction(this, func_808AEE3C); } else { thisx->colChkInfo.mass = MASS_IMMOVABLE; @@ -158,7 +158,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { this->timer = 180; this->unk_204 = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_PL_PULL_UP_ROCK); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { player->actor.child = NULL; player->heldActor = NULL; @@ -178,7 +178,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { bombf->unk_1F8 = 1; bombf->timer = 0; this->timer = 180; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_204 = 0.0f; } } @@ -189,7 +189,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { if (bombf != NULL) { bombf->timer = 100; this->timer = 180; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_204 = 0.0f; } } else { @@ -209,7 +209,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) { if (this->timer == 0) { this->unk_204 += 0.05f; if (this->unk_204 >= 1.0f) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 9218016e3..cb8d48d3e 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -7,7 +7,7 @@ #include "overlays/actors/ovl_En_Bombal/z_en_bombal.h" #include "z_en_bomjima.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnBomjima*)thisx) @@ -185,7 +185,7 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_2E6 = ENBOMJIMA_GET_F0(&this->actor); this->unk_2E4 = ENBOMJIMA_GET_F(&this->actor); Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index e52c49a82..2e1984651 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -7,7 +7,7 @@ #include "z_en_bomjimb.h" #include "overlays/actors/ovl_En_Niw/z_en_niw.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnBomjimb*)thisx) @@ -157,7 +157,7 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_2C6 = ENBOMJIMB_GET_F0(&this->actor); diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index 8c6f58850..c89179e8b 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -52,7 +52,7 @@ static ColliderQuadInit sQuadInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_S8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_S8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_VEC3S(shape.rot, 0, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 2a2b8f6e8..959a986a4 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -69,7 +69,7 @@ ActorInit En_Box_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnBox_SetupAction(EnBox* this, EnBoxActionFunc func) { diff --git a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c index 6c6e832c8..cdcf0879f 100644 --- a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c +++ b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnBsb*)thisx) diff --git a/src/overlays/actors/ovl_En_Bu/z_en_bu.c b/src/overlays/actors/ovl_En_Bu/z_en_bu.c index 043f1ebb7..ad26cf99d 100644 --- a/src/overlays/actors/ovl_En_Bu/z_en_bu.c +++ b/src/overlays/actors/ovl_En_Bu/z_en_bu.c @@ -6,7 +6,7 @@ #include "z_en_bu.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnBu*)thisx) diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c index 92d56eec5..7453c6d79 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -6,7 +6,7 @@ #include "z_en_bubble.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnBubble*)thisx) @@ -77,7 +77,7 @@ void EnBubble_SetDimensions(EnBubble* this, f32 dim) { f32 z; f32 norm; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 1.0f); this->actor.shape.yOffset = 16.0f; this->modelRotSpeed = 16.0f; @@ -144,7 +144,7 @@ s32 EnBubble_Explosion(EnBubble* this, PlayState* play) { &sEffectEnvColor, Rand_S16Offset(100, 50), 25, 0); } Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0x50); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; return Rand_S16Offset(90, 60); } diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index 91822be01..89e73c9a6 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -7,7 +7,7 @@ #include "z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnClearTag*)thisx) @@ -422,7 +422,7 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { Vec3f vel; Vec3f accel; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (thisx->params >= 0) { this->activeTimer = 70; Math_Vec3f_Copy(&pos, &this->actor.world.pos); diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index ad9210498..daa07db44 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -7,7 +7,7 @@ #include "z_en_cne_01.h" #include "objects/object_cne/object_cne.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnCne01*)thisx) @@ -148,7 +148,7 @@ s32 func_809CB4A0(EnCne01* this, PlayState* play) { void EnCne01_FinishInit(EnHy* this, PlayState* play) { if (EnHy_Init(this, play, &gCneSkel, ENHY_ANIM_OS_ANIME_11)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnCne01_Draw; this->waitingOnInit = false; if (ENCNE01_GET_PATH_INDEX(&this->actor) == ENCNE01_PATH_INDEX_NONE) { @@ -218,7 +218,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->enHy.collider); Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->enHy.actor.flags &= ~ACTOR_FLAG_1; + this->enHy.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH_INDEX(&this->enHy.actor), ENCNE01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 5b7b74db1..0c10f72cd 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -64,7 +64,7 @@ void EnColMan_Init(Actor* thisx, PlayState* play) { EnColMan* this = THIS; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->scale = (BREG(55) / 1000.0f) + 0.01f; switch (this->actor.params) { diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index 6d72a49fa..f96e43cd5 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -7,7 +7,7 @@ #include "z_en_cow.h" #include "z64horse.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnCow*)thisx) @@ -129,7 +129,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; this->animCycle = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; gHorsePlayedEponasSong = false; func_801A5080(4); @@ -146,7 +146,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { EnCow_SetTailPos(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; break; diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index fcdd89d03..ca1f1db13 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -7,7 +7,7 @@ #include "z_en_crow.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnCrow*)thisx) @@ -138,7 +138,7 @@ void EnCrow_Init(Actor* thisx, PlayState* play) { sDeadCount = 0; if (this->actor.parent != NULL) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } EnCrow_SetupFlyIdle(this); } @@ -172,7 +172,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { dist = Actor_WorldDistXZToPoint(&this->actor, &this->actor.parent->world.pos); } else { dist = 450.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { @@ -456,7 +456,7 @@ void EnCrow_Respawn(EnCrow* this, PlayState* play) { scaleTarget = 0.01f; } if (Math_StepToF(&this->actor.scale.x, scaleTarget, scaleTarget * 0.1f)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_10; this->actor.colChkInfo.health = 1; EnCrow_SetupFlyIdle(this); @@ -481,7 +481,7 @@ void EnCrow_UpdateDamage(EnCrow* this, PlayState* play) { } else { this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); EnCrow_SetupDamaged(this, play); } diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 4477a8b8d..6a936636c 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -6,7 +6,7 @@ #include "z_en_dai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnDai*)thisx) @@ -541,7 +541,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { this->animIndex = ENDAI_ANIM_NONE; EnDai_ChangeAnim(this, ENDAI_ANIM_0); Actor_SetScale(&this->actor, 0.2f); - this->actor.targetMode = 10; + this->actor.targetMode = TARGET_MODE_10; this->unk_1F0 = D_80B3FBF0; this->unk_1FC = D_80B3FBF0; this->unk_1CE = 0; @@ -561,7 +561,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { } this->unk_1CD = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_1CE |= (0x100 | 0x20); this->unk_1CE |= 0x80; this->actionFunc = func_80B3EEDC; diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index bfdf704a8..ddf98cd3d 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -6,7 +6,7 @@ #include "z_en_daiku.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDaiku*)thisx) @@ -99,7 +99,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); if (this->unk_278 == ENDAIKU_PARAM_FF_3) { diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index b744dbbb0..5282697a4 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -9,7 +9,7 @@ #include "objects/object_daiku/object_daiku.h" #include "objects/object_bombiwa/object_bombiwa.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDaiku2*)thisx) @@ -84,7 +84,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU2_GET_7F(&this->actor); this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor); diff --git a/src/overlays/actors/ovl_En_Death/z_en_death.c b/src/overlays/actors/ovl_En_Death/z_en_death.c index de02f44ad..ca7fd6a3b 100644 --- a/src/overlays/actors/ovl_En_Death/z_en_death.c +++ b/src/overlays/actors/ovl_En_Death/z_en_death.c @@ -7,7 +7,7 @@ #include "z_en_death.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnDeath*)thisx) @@ -133,7 +133,7 @@ static InitChainEntry D_808C9A60[] = { ICHAIN_VEC3F(scale, 0, ICHAIN_CONTINUE), ICHAIN_S8(hintId, TATL_HINT_ID_GOMESS, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 5, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_STOP), }; #endif diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c index da8ea8b85..aa0b0ff5f 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -9,7 +9,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnDekubaba*)thisx) @@ -222,7 +222,7 @@ void EnDekubaba_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 4; // Big Deku Baba hint does not exist in MM this->actor.hintId = TATL_HINT_ID_BIO_DEKU_BABA; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; } else { this->size = 1.0f; @@ -230,7 +230,7 @@ void EnDekubaba_Init(Actor* thisx, PlayState* play) { this->collider.elements[i].dim.worldSphere.radius = this->collider.elements[i].dim.modelSphere.radius; } this->actor.hintId = TATL_HINT_ID_DEKU_BABA; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; } EnDekubaba_SetupWait(this); @@ -868,7 +868,7 @@ void EnDekubaba_PrunedSomersaultDie(EnDekubaba* this, PlayState* play) { this->actor.scale.y = 0.0f; this->actor.scale.x = 0.0f; this->actor.speed = 0.0f; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, this->size * 3.0f, 0, (s32)(this->size * 12.0f), (s32)(this->size * 5.0f), 15, HAHEN_OBJECT_DEFAULT, 10, NULL); } diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index e0cba18b0..7da0437a9 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnDekunuts*)thisx) @@ -131,11 +131,11 @@ void EnDekunuts_Init(Actor* thisx, PlayState* play) { } if (this->actor.params == ENDEKUNUTS_GET_FF00_1) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.colType = COLTYPE_NONE; this->collider.info.bumperFlags |= (BUMP_NO_HITMARK | BUMP_NO_SWORD_SFX | BUMP_NO_DAMAGE | BUMP_NO_AT_INFO); } else if (this->actor.params == ENDEKUNUTS_GET_FF00_2) { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; } func_808BD428(this); diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 8b87ce39e..3d4d95b87 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -6,7 +6,7 @@ #include "z_en_demo_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDemoheishi*)thisx) @@ -61,7 +61,7 @@ void EnDemoheishi_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); EnDemoheishi_SetupIdle(this); diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index b35f4d5c5..bd0139222 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -7,7 +7,7 @@ #include "z_en_dg.h" #include "overlays/actors/ovl_En_Aob_01/z_en_aob_01.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_800000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_800000) #define THIS ((EnDg*)thisx) @@ -491,7 +491,7 @@ void EnDg_TryPickUp(EnDg* this, PlayState* play) { } EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_SIT_DOWN); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; if (Player_GetMask(play) == PLAYER_MASK_TRUTH) { this->actor.flags |= ACTOR_FLAG_10000; @@ -516,7 +516,7 @@ s32 EnDg_FindFollowerForBremenMask(PlayState* play) { while (enemy != NULL) { if (enemy->id == ACTOR_EN_DG) { - if (enemy->isTargeted) { + if (enemy->isLockedOn) { sBremenMaskFollowerIndex = ((EnDg*)enemy)->index; return true; } @@ -1241,7 +1241,7 @@ void EnDg_JumpOutOfWater(EnDg* this, PlayState* play) { void EnDg_Held(EnDg* this, PlayState* play) { if (Actor_HasNoParent(&this->actor, play)) { this->grabState = DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (sIsAnyDogHeld) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; sIsAnyDogHeld = false; @@ -1312,7 +1312,7 @@ void EnDg_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH_INDEX(&this->actor), ENDG_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.0075f); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.gravity = -3.0f; this->timer = Rand_S16Offset(60, 60); this->dogFlags = DOG_FLAG_NONE; diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 8779f9e6d..0dcce10d0 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -7,7 +7,7 @@ #include "z_en_dinofos.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_400) #define THIS ((EnDinofos*)thisx) @@ -439,7 +439,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { } if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && - this->actor.isTargeted && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && + this->actor.isLockedOn && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) { if (Rand_ZeroOne() < 0.5f) { func_8089C024(this, 2); @@ -1131,7 +1131,7 @@ void func_8089CF70(EnDinofos* this, PlayState* play) { void func_8089CFAC(EnDinofos* this) { Animation_PlayOnce(&this->skelAnime, &gDinolfosDieAnim); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_DEAD); this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 8e2b9b382..25a54ec4a 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -6,7 +6,7 @@ #include "z_en_dnh.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnh*)thisx) diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index f9dd65a46..2dfc36daa 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -6,7 +6,7 @@ #include "z_en_dnk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnk*)thisx) @@ -239,12 +239,12 @@ void func_80A51648(EnDnk* this, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (ENDNK_GET_3C(&this->actor) == 4) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); this->actionFunc = EnDnk_HandleCutscene; Actor_SetScale(&this->actor, 0.1f); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnDnk_DoNothing; Actor_SetScale(&this->actor, 0.01f); } diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index d31d6c02f..500259dc6 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -12,7 +12,7 @@ #include "overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnDno*)thisx) @@ -778,7 +778,7 @@ void func_80A72C04(EnDno* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Math_Vec3f_Copy(&this->unk_334, &this->actor.world.pos); SubS_ActorPathing_Init(play, &this->unk_334, &this->actor, &this->actorPath, play->setupPathList, EN_DNO_GET_7F(&this->actor), 1, 0, 1, 0); @@ -907,7 +907,7 @@ void func_80A730A0(EnDno* this, PlayState* play) { void func_80A73244(EnDno* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_328 = 2; this->actor.speed = 0.0f; Flags_UnsetSwitch(play, EN_DNO_GET_RACE_STARTED_SWITCH_FLAG(&this->actor)); diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index 82a7bc5f7..2518cbc47 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -9,7 +9,7 @@ #include "z_en_dnp.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnDnp*)thisx) @@ -271,14 +271,14 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_322 & 0x200)) { this->unk_322 |= (0x200 | 0x10); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->cueId = 255; } SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = func_80B3D11C; ret = true; } else if (this->unk_322 & 0x200) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~(0x200 | 0x10); this->actionFunc = func_80B3D2D4; @@ -380,7 +380,7 @@ void func_80B3D47C(EnDnp* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Math_SmoothStepToF(&this->actor.scale.x, 0.0085f, 0.1f, 0.01f, 0.001f); if ((s32)(this->actor.scale.x * 10000.0f) >= 85) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_322 &= ~0x10; this->unk_322 |= 0x400; @@ -411,11 +411,11 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->unk_322 = 0; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_322 |= (0x100 | 0x80 | 0x10); this->actor.gravity = -1.0f; if (DEKU_PRINCESS_GET_TYPE(&this->actor) == DEKU_PRINCESS_TYPE_RELEASED_FROM_BOTTLE) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.85f * 0.001f); SubS_SetOfferMode(&this->unk_322, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actor.shape.rot.x = 0; diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c index b84545f12..cd25a835b 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -9,7 +9,7 @@ #include "z_en_dnq.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDnq*)thisx) @@ -148,7 +148,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_37C & 0x20)) { - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->cueId = 255; this->unk_37C |= 0x20; } @@ -156,7 +156,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { ret = true; } else { if (this->unk_37C & 0x20) { - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; this->cueId = 255; this->unk_37C &= ~0x20; SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -462,7 +462,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->picto.actor, 0.02f); - this->picto.actor.targetMode = 1; + this->picto.actor.targetMode = TARGET_MODE_1; this->unk_386 = 0; this->unk_37C = 0; SubS_SetOfferMode(&this->unk_37C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index e04d2bf4d..723ee895f 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -6,7 +6,7 @@ #include "z_en_dns.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnDns*)thisx) @@ -254,14 +254,14 @@ s32 func_8092CB98(EnDns* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (!(this->unk_2C6 & 0x80)) { this->cueType = EnDns_GetCueType(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_2C6 |= 0x80; this->cueId = 255; } phi_v1 = 1; } else if (this->unk_2C6 & 0x80) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2C6 &= ~0x80; } @@ -517,7 +517,7 @@ void EnDns_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -0.8f; this->unk_2D2 = 0; this->unk_2C6 = 0; diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index 6b141e281..c85cdf6ee 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnDodongo*)thisx) @@ -898,7 +898,7 @@ void func_80878724(EnDodongo* this) { this->timer = 0; this->unk_304 = 0; Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); this->actionFunc = func_808787B0; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 7fa39da26..289b1403d 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -347,7 +347,7 @@ static EnDoorInfo sObjInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.x, 0, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index d48bfd359..dfa0e4934 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -79,7 +79,7 @@ EnDoorEtcInfo sObjInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.x, 0, ICHAIN_CONTINUE), ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index e1e7197d9..efaa851e6 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -7,7 +7,7 @@ #include "z_en_dragon.h" #include "overlays/actors/ovl_En_Ot/z_en_ot.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnDragon*)thisx) @@ -208,7 +208,7 @@ void EnDragon_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 4; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 0xA; + this->actor.targetMode = TARGET_MODE_10; Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); this->collider.elements[0].dim.scale = this->collider.elements[1].dim.scale = this->collider.elements[2].dim.scale = @@ -751,7 +751,7 @@ void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_100000; this->action = DEEP_PYTHON_ACTION_SETUP_DEAD; this->actionFunc = EnDragon_SetupDead; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 22312a7c2..50db36063 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -9,7 +9,7 @@ #include "z_en_ds2n.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnDs2n*)thisx) diff --git a/src/overlays/actors/ovl_En_Dt/z_en_dt.c b/src/overlays/actors/ovl_En_Dt/z_en_dt.c index 0ac7dcb4b..e82d6d6e3 100644 --- a/src/overlays/actors/ovl_En_Dt/z_en_dt.c +++ b/src/overlays/actors/ovl_En_Dt/z_en_dt.c @@ -6,7 +6,7 @@ #include "z_en_dt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnDt*)thisx) diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index d690fd585..30dc3de26 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -12,7 +12,7 @@ #include "overlays/actors/ovl_En_Estone/z_en_estone.h" #include "overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) #define THIS ((EnEgol*)thisx) @@ -1059,7 +1059,7 @@ void EnEgol_Damaged(EnEgol* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_100000; this->actionFunc = EnEgol_StartDeathCutscene; } diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 023c73f7c..61cf693d7 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -884,7 +884,7 @@ void func_8088E60C(EnElf* this, PlayState* play) { void func_8088E850(EnElf* this, PlayState* play) { Vec3f nextPos; Player* player = GET_PLAYER(play); - Actor* arrowPointedActor; + Actor* targetFairyActor; f32 xScale; f32 distFromLinksHead; u32 cueChannel; @@ -970,15 +970,15 @@ void func_8088E850(EnElf* this, PlayState* play) { break; default: - arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; + targetFairyActor = play->actorCtx.targetCtx.fairyActor; if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor != NULL)) { Math_Vec3f_Copy(&nextPos, &player->talkActor->focus.pos); } else { - Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetContext.unk0); + Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetCtx.fairyPos); } nextPos.y += 1500.0f * this->actor.scale.y; - if (arrowPointedActor != NULL) { + if (targetFairyActor != NULL) { func_8088DB4C(this, &nextPos, 0.0f, 30.0f, 0.2f); if (this->actor.speed >= 5.0f) { func_8088F5F4(this, play, 0x10); @@ -1039,7 +1039,7 @@ void func_8088EF18(Color_RGBAf* dest, Color_RGBAf* newColor, Color_RGBAf* curCol } void func_8088EFA4(EnElf* this, PlayState* play) { - Actor* arrayPointerActor = play->actorCtx.targetContext.arrowPointedActor; + Actor* targetFairyActor = play->actorCtx.targetCtx.fairyActor; Player* player = GET_PLAYER(play); f32 transitionRate; @@ -1064,35 +1064,35 @@ void func_8088EFA4(EnElf* this, PlayState* play) { this->outerColor.b = 80.0f; this->outerColor.a = 0.0f; } - } else if (play->actorCtx.targetContext.unk40 != 0.0f) { + } else if (play->actorCtx.targetCtx.fairyMoveProgressFactor != 0.0f) { this->unk_268 = 0; this->unk_238 = 1.0f; if (!this->unk_269) { Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_DASH_NORMAL); } } else if (this->unk_268 == 0) { - if ((arrayPointerActor == NULL) || - (Math_Vec3f_DistXYZ(&this->actor.world.pos, &play->actorCtx.targetContext.unk0) < 50.0f)) { + if ((targetFairyActor == NULL) || + (Math_Vec3f_DistXYZ(&this->actor.world.pos, &play->actorCtx.targetCtx.fairyPos) < 50.0f)) { this->unk_268 = 1; } } else if (this->unk_238 != 0.0f) { if (Math_StepToF(&this->unk_238, 0.0f, 0.25f)) { - this->innerColor = play->actorCtx.targetContext.fairyInner; - this->outerColor = play->actorCtx.targetContext.fairyOuter; + this->innerColor = play->actorCtx.targetCtx.fairyInnerColor; + this->outerColor = play->actorCtx.targetCtx.fairyOuterColor; } else { transitionRate = 0.25f / this->unk_238; - func_8088EF18(&this->innerColor, &play->actorCtx.targetContext.fairyInner, &this->innerColor, + func_8088EF18(&this->innerColor, &play->actorCtx.targetCtx.fairyInnerColor, &this->innerColor, transitionRate); - func_8088EF18(&this->outerColor, &play->actorCtx.targetContext.fairyOuter, &this->outerColor, + func_8088EF18(&this->outerColor, &play->actorCtx.targetCtx.fairyOuterColor, &this->outerColor, transitionRate); } } if (this->fairyFlags & 1) { - if ((arrayPointerActor == NULL) || (player->targetedActor == NULL)) { + if ((targetFairyActor == NULL) || (player->lockOnActor == NULL)) { this->fairyFlags ^= 1; } - } else if ((arrayPointerActor != NULL) && (player->targetedActor != NULL)) { + } else if ((targetFairyActor != NULL) && (player->lockOnActor != NULL)) { u8 temp = this->unk_269; u16 targetSfxId = (this->unk_269 == 0) ? NA_SE_NONE : NA_SE_NONE; @@ -1105,7 +1105,7 @@ void func_8088EFA4(EnElf* this, PlayState* play) { void func_8088F214(EnElf* this, PlayState* play) { s32 sp34; - Actor* arrowPointedActor; + Actor* targetFairyActor; Player* player = GET_PLAYER(play); s32 pad; @@ -1136,12 +1136,12 @@ void func_8088F214(EnElf* this, PlayState* play) { sp34 = 1; Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_BELL_ANGER - SFX_FLAG); } else { - arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; + targetFairyActor = play->actorCtx.targetCtx.fairyActor; if (player->stateFlags1 & PLAYER_STATE1_400) { sp34 = 10; this->unk_25C = 100; - } else if ((arrowPointedActor == NULL) || (arrowPointedActor->category == 4)) { - if (arrowPointedActor != NULL) { + } else if ((targetFairyActor == NULL) || (targetFairyActor->category == ACTORCAT_NPC)) { + if (targetFairyActor != NULL) { this->unk_25C = 100; player->stateFlags2 |= PLAYER_STATE2_100000; sp34 = 0; @@ -1280,13 +1280,13 @@ void func_8088FA38(EnElf* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->fairyFlags & 0x10) { - refPos = play->actorCtx.targetContext.unk0; + refPos = play->actorCtx.targetCtx.fairyPos; if (this->unk_234 != NULL) { refPos = this->unk_234->world.pos; } else { - if ((player->targetedActor == NULL) || (&player->actor == player->targetedActor) || - (&this->actor == player->targetedActor) || (this->unk_264 & 4)) { + if ((player->lockOnActor == NULL) || (&player->actor == player->lockOnActor) || + (&this->actor == player->lockOnActor) || (this->unk_264 & 4)) { refPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f); refPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 5.0f; @@ -1462,7 +1462,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { gSaveContext.save.saveInfo.playerData.tatlTimer = 0; } - if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) { + if ((player->tatlTextId == 0) && (player->lockOnActor == NULL)) { if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 600) && (gSaveContext.save.saveInfo.playerData.tatlTimer <= 3000)) { player->tatlTextId = QuestHint_GetTatlTextId(play); diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index 2584a1c73..ef53999de 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" #include "objects/object_bubble/object_bubble.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnElfbub*)thisx) @@ -82,7 +82,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { } this->oscillationAngle = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnElfbub_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index 0650770ce..42ac47f69 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -67,7 +67,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { this->unk_148 = 0; this->unk_14A = 0; this->actor.focus.pos.y += 40.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (this->unk_147) { case ENELFGRP_1: @@ -172,7 +172,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { } else { this->actor.textId = 0x578; } - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } break; } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index cadbe6047..22a28ed43 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -71,7 +71,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) { this->spawnTotalMax = -1; this->spawnDistanceMax = -1.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnEncount1_SpawnActor; } diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c index effbb3eba..c840c33e1 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -112,7 +112,7 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) { this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; Collider_InitAndSetJntSph(play, &this->collider, &this->dyna.actor, &sJntSphInit, &this->colElement); - this->dyna.actor.targetMode = 6; + this->dyna.actor.targetMode = TARGET_MODE_6; this->dyna.actor.colChkInfo.health = 1; this->scale = 0.1f; this->switchFlag = ENCOUNT2_GET_SWITCH_FLAG(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 913e8b7e5..077273309 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -53,7 +53,7 @@ void EnEncount4_Init(Actor* thisx, PlayState* play) { return; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_809C3FD8; } diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c index 33b50bc2a..c281bd61f 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c +++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_dt_Skel_00B0CC, &object_dt_Anim_000BE0, this->jointTable, this->morphTable, OBJECT_DT_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c index 78c948911..31bc4be65 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c +++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero2*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_bai_Skel_007908, &object_bai_Anim_0011C0, this->jointTable, this->morphTable, OBJECT_BAI_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c index b7ac5cbad..bfca5a5b5 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c +++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero3.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero3*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero3_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_toryo_Skel_007150, &object_toryo_Anim_000E50, this->jointTable, this->morphTable, OBJECT_TORYO_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c index f0828f8bf..3d75e19d7 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero4.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero4*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero4_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpear, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c index c49121150..2120f0a27 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero5.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero5*)thisx) @@ -35,7 +35,7 @@ void EnEndingHero5_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 2d13f126c..8f6551e84 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -6,7 +6,7 @@ #include "z_en_ending_hero6.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnEndingHero6*)thisx) @@ -84,7 +84,7 @@ void EnEndingHero6_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; SkelAnime_InitFlex(play, &this->skelAnime, sSkeletons[this->type], sAnimations[this->type], this->jointTable, this->morphTable, sLimbCounts[this->type]); diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index d7933db62..f99f179af 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnFamos*)thisx) @@ -706,7 +706,7 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { void EnFamos_SetupDeathFade(EnFamos* this) { EnFamos_SetupDeathDebris(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.shadowDraw = NULL; this->actionFunc = EnFamos_DeathFade; this->actor.speed = 0.0f; diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c index d1da1ef8d..3da9f2673 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -7,7 +7,7 @@ #include "z_en_fg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_200 | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_4000) #define THIS ((EnFg*)thisx) @@ -197,7 +197,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { switch (EnFg_GetDamageEffect(this)) { case BETAFROG_DMGEFFECT_DEKUSTICK: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_1); this->skelAnime.playSpeed = 0.0f; this->actor.shape.shadowDraw = NULL; @@ -212,7 +212,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_ARROW: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; rotY = this->collider.base.ac->world.rot.y; rotX = this->collider.base.ac->world.rot.x; @@ -226,7 +226,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_EXPLOSION: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); this->actor.params = BETAFROG_BLACK; this->skelAnime.playSpeed = 0.0f; @@ -261,7 +261,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { switch (EnFg_GetDamageEffect(this)) { case BETAFROG_DMGEFFECT_ARROW: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; rotY = ac->world.rot.y; @@ -279,7 +279,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { break; case BETAFROG_DMGEFFECT_EXPLOSION: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); EnFg_ChangeAnim(&this->skelAnime, BETAFROG_ANIM_IDLE); this->actor.params = BETAFROG_BLACK; 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 6af86aaad..6b9d031df 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly*)thisx) @@ -125,7 +125,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 5, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 4000, ICHAIN_STOP), }; @@ -658,7 +658,7 @@ void EnFirefly_UpdateDamage(EnFirefly* this, PlayState* play) { } else { Enemy_StartFinishingBlow(play, &this->actor); this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Negate effects of fire on Fire Keese and Ice on Ice Keese if (((this->currentType == KEESE_FIRE) && (this->actor.colChkInfo.damageEffect == KEESE_DMGEFF_FIRE)) || diff --git a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c index 00a0d4d9d..3459faf40 100644 --- a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c +++ b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c @@ -6,7 +6,8 @@ #include "z_en_firefly2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnFirefly2*)thisx) diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c index b047e65ee..645ad7300 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -9,7 +9,7 @@ #include "z_en_fish2.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFish2*)thisx) diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index f481c346c..33e49d6e5 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -791,7 +791,7 @@ FishingFishInit sFishInits[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 5, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -831,7 +831,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->focus.pos = thisx->world.pos; thisx->focus.pos.y += 75.0f; - thisx->flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (sLinkAge != 1) { // HIGH_SCORE(HS_FISHING) from OoT @@ -960,8 +960,8 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { if (thisx->params == 200) { this->unk_150 = 100; func_800BC154(play, &play->actorCtx, thisx, ACTORCAT_PROP); - thisx->targetMode = 0; - thisx->flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + thisx->targetMode = TARGET_MODE_0; + thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); } else { this->unk_150 = 10; @@ -2819,7 +2819,7 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { if (this->unk_1CB == 0) { if (this->unk_1CC == 0) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { D_8090CCF8 = D_809171CC; @@ -2829,7 +2829,7 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { } } else { this->unk_1CC--; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else if (Actor_TextboxIsClosing(&this->actor, play)) { this->unk_1CB = 0; @@ -2882,9 +2882,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((D_80917200 != 0) || (sSubCamId != SUB_CAM_ID_DONE) || ((player->actor.world.pos.z > 1150.0f) && (this->unk_150 != 100))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (D_8090CD14 != 0) { if (D_80917202 == 0) { this->actor.focus.pos = sLurePos; @@ -3094,7 +3094,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (D_80917206 == 2) { func_809038A4(this, input); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } break; @@ -3131,7 +3131,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (D_80917206 == 2) { func_809038A4(this, input); } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } break; @@ -3174,7 +3174,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->unk_1AC.z = Rand_ZeroFloat(50.0f); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; break; case -2: @@ -3212,7 +3212,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } Math_ApproachF(&this->unk_1A8, 2048.0f, 1.0f, 128.0f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } break; @@ -5092,9 +5092,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { SkelAnime_Update(&this->skelAnime); if ((D_8090CD04 != 0) || Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_20); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_20); } if ((this->actor.xzDistToPlayer < 120.0f) || Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index 7798abf96..a8e916aa0 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -7,7 +7,7 @@ #include "z_en_floormas.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnFloormas*)thisx) @@ -159,7 +159,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) { if (this->actor.params == ENFLOORMAS_GET_7FFF_10) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_808D2AA8; return; } @@ -573,7 +573,7 @@ void func_808D19D4(EnFloormas* this) { void func_808D1B44(EnFloormas* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { if (SkelAnime_Update(&this->skelAnime)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_194 = 50; func_808D0C14(this); } @@ -713,7 +713,7 @@ void func_808D217C(EnFloormas* this, Player* player) { Vec3f* ptr; Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 36.0f, 45.0f, ANIMMODE_ONCE, -3.0f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; func_808D08D0(this); @@ -756,7 +756,7 @@ void func_808D22C8(EnFloormas* this, PlayState* play) { this->actor.shape.rot.x = 0; this->actor.velocity.y = 6.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.speed = -3.0f; func_808D1740(this); } else if ((this->unk_190 % 20) == 0) { @@ -899,7 +899,7 @@ void func_808D2A20(EnFloormas* this) { Actor_Kill(&this->actor); } else { this->actor.draw = NULL; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); this->actionFunc = func_808D2AA8; } } @@ -1025,7 +1025,7 @@ void func_808D2E34(EnFloormas* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_DEAD); } Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (this->actor.colChkInfo.damage != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE); } diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index 268ea9626..f106aa406 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -7,7 +7,7 @@ #include "z_en_fsn.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFsn*)thisx) @@ -1424,7 +1424,7 @@ void EnFsn_IdleBackroom(EnFsn* this, PlayState* play) { this->textId = 0; EnFsn_HandleConversationBackroom(this, play); this->actionFunc = EnFsn_ConverseBackroom; - } else if (this->actor.xzDistToPlayer < 100.0f || this->actor.isTargeted) { + } else if (this->actor.xzDistToPlayer < 100.0f || this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } } @@ -1479,7 +1479,7 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { if (ENFSN_IS_SHOP(&this->actor)) { this->actor.shape.rot.y = BINANG_ROT180(this->actor.shape.rot.y); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnFsn_GetCutscenes(this); EnFsn_InitShop(this, play); } else { @@ -1491,8 +1491,8 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->blinkTimer = 20; this->eyeTexIndex = 0; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->animIndex = FSN_ANIM_IDLE; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnFsn_IdleBackroom; diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 4881e38a7..b0a5200e2 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -11,7 +11,8 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnFu*)thisx) @@ -217,7 +218,7 @@ void EnFu_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.gravity = -0.2f; this->actor.shape.rot.y += 0x4000; this->actor.world.rot = this->actor.shape.rot; @@ -230,7 +231,7 @@ void EnFu_Init(Actor* thisx, PlayState* play) { this->unk_54E = 0; this->unk_550 = 0; func_809622FC(this); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; func_809619D0(this, play); if (CURRENT_DAY == 2) { Vec3f sp40 = this->actor.child->home.pos; @@ -757,7 +758,7 @@ void func_80962EBC(EnFu* this, PlayState* play) { void func_80962F10(EnFu* this) { this->unk_548 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SET_WEEKEVENTREG(WEEKEVENTREG_08_01); this->actionFunc = func_80962F4C; } @@ -856,7 +857,7 @@ void func_809632D0(EnFu* this) { mizu->unk_160 = 0; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80963350; } diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c index d56a8f9bf..0bf2f3544 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -9,7 +9,7 @@ #include "objects/object_fz/object_fz.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnFz*)thisx) @@ -157,7 +157,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_FREEZARD, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -180,7 +180,7 @@ void EnFz_Init(Actor* thisx, PlayState* play) { this->actor.gravity = 0.0f; this->actor.velocity.y = 0.0f; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_BC8 = 0; this->unk_BCF = 0; this->unk_BCC = 1; @@ -472,7 +472,7 @@ void func_80933014(EnFz* this) { void func_809330D4(EnFz* this) { this->unk_BD6 = 2; this->unk_BCE = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80933104; } @@ -543,7 +543,7 @@ void func_80933324(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_80933368; } @@ -653,7 +653,7 @@ void func_809336C0(EnFz* this, PlayState* play) { this->unk_BCC = 1; this->unk_BCE = 0; this->unk_BD8 = 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_BD7 = 0; this->unk_BCA = 60; func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_PROP); @@ -671,7 +671,7 @@ void func_80933790(EnFz* this) { this->unk_BD6 = 3; this->unk_BCE = 0; this->unk_BD8 = 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; this->unk_BBC = 0.0f; this->actionFunc = func_809337D4; @@ -702,7 +702,7 @@ void func_8093389C(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_809338E0; } @@ -763,7 +763,7 @@ void func_80933AF4(EnFz* this) { this->unk_BCA = 40; this->unk_BCC = 1; this->unk_BCE = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actionFunc = func_80933B38; } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 63f5a6736..9b96771be 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -7,7 +7,7 @@ #include "z_en_gb2.h" #include "objects/object_ps/object_ps.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnGb2*)thisx) @@ -380,7 +380,7 @@ void func_80B0FEBC(EnGb2* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, this->unk_26E, &this->actor); this->actionFunc = func_80B0FFA8; - } else if ((this->actor.xzDistToPlayer < 300.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -670,7 +670,7 @@ void func_80B10A48(EnGb2* this, PlayState* play) { this->actor.draw = NULL; this->unk_26C |= 0x100; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; break; } @@ -697,7 +697,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { this->csIdIndex = 1; this->unk_26C &= ~0x40; this->actionFunc = func_80B10DAC; - } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isLockedOn) { this->unk_26C |= 0x40; Actor_OfferTalk(&this->actor, play, 300.0f); } @@ -844,7 +844,7 @@ void func_80B11268(EnGb2* this, PlayState* play) { if (Flags_GetClear(play, 2) && Flags_GetClear(play, 3) && Flags_GetClear(play, 4) && Flags_GetClear(play, 5)) { this->unk_28A = 0xFF; this->unk_26C &= ~0x100; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnGb2_Draw; this->unk_26E = 0x14F9; this->actionFunc = func_80B11048; @@ -861,7 +861,7 @@ void func_80B11344(EnGb2* this, PlayState* play) { } static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 4, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_4, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 2200, ICHAIN_STOP), }; @@ -943,7 +943,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_80)) { this->actor.draw = NULL; this->unk_26C |= 0x100; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; } else { this->unk_28A = 255; diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index c78f14048..25556fdf7 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -6,7 +6,7 @@ #include "z_en_ge1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGe1*)thisx) @@ -86,7 +86,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) { this->morphTable, GERUDO_WHITE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; - this->picto.actor.targetMode = 6; + this->picto.actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->picto.actor, 0.01f); this->animIndex = this->cueId = -1; // GERUDO_WHITE_ANIM_NONE this->stateFlags = 0; @@ -112,7 +112,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnGe1_PerformCutsceneActions; this->picto.actor.draw = NULL; this->picto.actor.flags |= ACTOR_FLAG_20 | ACTOR_FLAG_10; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; break; } diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 0ed4cac86..eeacf00a5 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -6,7 +6,7 @@ #include "z_en_ge2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_80000000) #define THIS ((EnGe2*)thisx) @@ -97,7 +97,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) { this->picto.actor.world.rot.x = this->picto.actor.shape.rot.x = 0; this->picto.actor.world.rot.z = this->picto.actor.shape.rot.z = 0; - this->picto.actor.targetMode = 6; + this->picto.actor.targetMode = TARGET_MODE_6; this->stateFlags = 0; this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; this->cueId = -1; @@ -464,7 +464,7 @@ void EnGe2_KnockedOut(EnGe2* this, PlayState* play) { this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); this->stateFlags &= ~GERUDO_PURPLE_STATE_KO; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -515,7 +515,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_KnockedOut; Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->stateFlags |= GERUDO_PURPLE_STATE_KO; } } else if (this->picto.actor.home.rot.x == 0) { diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index 1f680e9e8..8baf9c0a3 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -6,7 +6,7 @@ #include "z_en_ge3.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_80000000) #define THIS ((EnGe3*)thisx) diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index ced79c782..a01bfbd19 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -12,7 +12,7 @@ #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGeg*)thisx) @@ -420,7 +420,7 @@ void func_80BB217C(EnGeg* this, PlayState* play) { this->actor.gravity = -1.0f; func_80BB1C1C(this); this->actionFunc = func_80BB221C; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; } } @@ -459,7 +459,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { Message_StartTextbox(play, this->unk_496, &this->actor); this->unk_230 &= ~8; this->actionFunc = func_80BB27D4; - } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 300.0f); this->unk_230 |= 8; } diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index fe7d0198f..ab1f8b539 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_gg/object_gg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnGg*)thisx) @@ -685,17 +685,17 @@ void EnGg_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { if (play->csCtx.state == CS_STATE_IDLE) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index c933d4e39..abb80780d 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -7,7 +7,7 @@ #include "z_en_gg2.h" #include "objects/object_gg/object_gg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnGg2*)thisx) @@ -129,7 +129,7 @@ void func_80B3AE60(EnGg2* this, PlayState* play) { case 1: case 8: this->unk_2EE = 5; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); this->actionFunc = func_80B3B120; break; @@ -423,13 +423,13 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else { this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index 974bf929f..387763de1 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -7,7 +7,7 @@ #include "z_en_ginko_man.h" #include "objects/object_boj/object_boj.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGinkoMan*)thisx) @@ -61,7 +61,7 @@ static AnimationInfo sAnimationInfo[] = { void EnGinkoMan_Init(Actor* thisx, PlayState* play) { EnGinkoMan* this = THIS; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.uncullZoneForward = 400.0f; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.cylRadius = 100; @@ -79,7 +79,7 @@ void EnGinkoMan_Destroy(Actor* thisx, PlayState* play) { } void EnGinkoMan_SetupIdle(EnGinkoMan* this) { - this->actor.flags |= ACTOR_FLAG_1; // targetable + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); this->actionFunc = EnGinkoMan_Idle; } diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index bc2042f9e..495f4712c 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -6,7 +6,7 @@ #include "z_en_girla.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGirlA*)thisx) @@ -585,7 +585,7 @@ void EnGirlA_InitalUpdate(EnGirlA* this, PlayState* play) { this->itemParams = shopItem->params; this->drawFunc = shopItem->drawFunc; this->getItemDrawId = shopItem->getItemDrawId; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.25f); this->actor.shape.yOffset = 24.0f; this->actor.shape.shadowScale = 4.0f; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 16b4c2993..dd87be400 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -7,7 +7,7 @@ #include "z_en_gk.h" #include "objects/object_gk/object_gk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnGk*)thisx) @@ -646,7 +646,7 @@ void func_80B51760(EnGk* this, PlayState* play) { this->unk_2E4 = 0; this->unk_1E4 |= 2; } - } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (gSaveContext.save.entrance != ENTRANCE(GORON_RACETRACK, 1))) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } @@ -851,7 +851,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { SET_WEEKEVENTREG(WEEKEVENTREG_24_80); this->actionFunc = func_80B51698; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (player->transformation == PLAYER_FORM_GORON) { this->actor.textId = 0xE74; @@ -1049,7 +1049,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B51FD0; this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 82b4bfce7..787ce43b9 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_in2/object_in2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGm*)thisx) @@ -1036,7 +1036,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3B8 = scheduleOutput->time1 - scheduleOutput->time0; this->unk_3BA = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; func_8094E054(this, play, 7); @@ -1229,14 +1229,14 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951DD0); Math_Vec3s_Copy(&this->actor.world.rot, &D_80951DDC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x1000 | 0x100); this->unk_3A4 |= 0x200; this->unk_3C8 = 3; this->unk_3CA = 3; this->unk_3CC = 8; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_3B4 = 60.0f; func_8094E054(this, play, 10); return true; @@ -1245,8 +1245,8 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80950280(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 phi_v1; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_3A4 = 0; this->unk_3C8 = 0; this->unk_3CA = 0; @@ -1587,11 +1587,11 @@ void func_80950CDC(EnGm* this, PlayState* play) { if (!Schedule_RunScript(play, D_80951820, &sp20) || ((this->unk_258 != sp20.result) && !func_80950280(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_258 = sp20.result; this->unk_268 = func_8094F074(this, play); diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 212065a31..10dda353c 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -20,7 +20,8 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) + #define THIS ((EnGo*)thisx) #define ENGO_STANDING_Y_OFFSET 0.0f // Actor shape offset in use when a Goron is in any standing state. @@ -953,7 +954,7 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { if (!this->springArrivalCutsceneActive) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = true; this->interruptedActionFunc = this->actionFunc; @@ -961,7 +962,7 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->actionFunc = EnGo_HandleSpringArrivalCutscene; } else if (this->springArrivalCutsceneActive) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = false; SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -1657,7 +1658,7 @@ void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &newSittingStretcherPos); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, this->scaleFactor); this->sleepState = ENGO_AWAKE; this->actionFlags = 0; @@ -1681,7 +1682,7 @@ void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { animFrame = Rand_ZeroOne() * this->skelAnime.endFrame; this->skelAnime.curFrame = animFrame; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, this->scaleFactor); this->sleepState = ENGO_AWAKE; this->actionFlags = 0; @@ -1875,8 +1876,8 @@ void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE); this->scaleFactor *= ENGO_MEDIGORON_SCALE_MULTIPLIER; Actor_SetScale(&this->actor, this->scaleFactor); - this->actor.flags &= ~ACTOR_FLAG_1; - this->actor.targetMode = 3; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_3; this->actionFlags = 0; this->actor.gravity = -1.0f; SubS_SetOfferMode(&this->actionFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); @@ -1907,7 +1908,7 @@ void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Effect_Add(play, &this->indexEffect, EFFECT_TIRE_MARK, 0, 0, &tireMarkInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->scaleFactor = ENGO_NORMAL_SCALE; this->msgEventFunc = NULL; diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index 949e50142..461a1969f 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGrasshopper*)thisx) @@ -264,7 +264,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { s32 i; this->actor.hintId = TATL_HINT_ID_DRAGONFLY; - this->actor.targetMode = 4; + this->actor.targetMode = TARGET_MODE_4; this->actor.colChkInfo.mass = 60; this->actor.colChkInfo.health = 2; @@ -770,7 +770,7 @@ void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) { EnGrasshopper_ChangeAnim(this, DRAGONFLY_ANIM_DAMAGE); this->actor.speed = 0.0f; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->approachSpeed = 0.0f; this->collider.elements[1].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD); Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index d4ae8ed26..e3ddfee6a 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -10,7 +10,7 @@ #include "objects/object_gs/object_gs.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnGs*)thisx) @@ -148,7 +148,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) { this->actor.world.rot.z = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_216 = 0; this->unk_218 = 0; this->unk_200 = 1.0f; @@ -927,7 +927,7 @@ void func_80999BC8(Actor* thisx, PlayState* play2) { EnGs* this = THIS; s32 pad; - if (this->actor.isTargeted && !func_801A5100()) { + if (this->actor.isLockedOn && !func_801A5100()) { this->unk_19D = 0; this->unk_19A |= 1; func_80999AC0(this); diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index 48b08c7ff..d51cf7703 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -7,7 +7,7 @@ #include "z_en_guard_nuts.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) #define THIS ((EnGuardNuts*)thisx) @@ -101,7 +101,7 @@ void EnGuardNuts_Init(Actor* thisx, PlayState* play) { SkelAnime_Init(play, &this->skelAnime, &gDekuPalaceGuardSkel, &gDekuPalaceGuardWaitAnim, this->jointTable, this->morphTable, DEKU_PALACE_GUARD_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Actor_SetScale(&this->actor, 0.015f); Math_Vec3f_Copy(&this->guardPos, &this->actor.world.pos); diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index bdcf620ef..28b37cc91 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -7,7 +7,7 @@ #include "z_en_guruguru.h" #include "objects/object_fu/object_fu.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnGuruguru*)thisx) @@ -75,7 +75,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable, this->morphTable, 16); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; if (this->actor.params != 2) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); } @@ -85,7 +85,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { } else if (this->actor.params == 2) { this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnGuruguru_DoNothing; } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index a335e39d2..83973d9e9 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -6,7 +6,7 @@ #include "z_en_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnHeishi*)thisx) @@ -84,7 +84,7 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) { } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index 6b0124b00..2c652f11c 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -6,7 +6,7 @@ #include "z_en_hg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnHg*)thisx) @@ -145,7 +145,7 @@ void EnHg_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.colChkInfo.health = 0; this->actor.gravity = -1.0f; for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) { diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index bbdb2c387..15bfd598b 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -6,7 +6,7 @@ #include "z_en_hgo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnHgo*)thisx) @@ -102,7 +102,7 @@ void EnHgo_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&thisx->colChkInfo, NULL, &sColChkInfoInit); - thisx->targetMode = 6; + thisx->targetMode = TARGET_MODE_6; this->eyeIndex = 0; this->blinkTimer = 0; @@ -124,7 +124,7 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play) { } void EnHgo_SetupDoNothing(EnHgo* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnHgo_DoNothing; } diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 2bb10c351..e07dfb8a9 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_hintnuts/object_hintnuts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) #define THIS ((EnHiddenNuts*)thisx) @@ -83,7 +83,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index cb9812390..5ad3e9dcf 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnHintSkb*)thisx) @@ -586,8 +586,8 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { (this->actionFunc == func_80C1FE80)) { if (this->actionFunc != func_80C2077C) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if (this->actionFunc == func_80C1FE80) { @@ -596,8 +596,8 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { func_80C2075C(this); } } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.textId = 0; if (this->skelAnime.animation == &object_skb_Anim_00697C) { diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index e4026dfe5..5146f4fcd 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -6,7 +6,7 @@ #include "z_en_hs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnHs*)thisx) @@ -87,7 +87,7 @@ void EnHs_Init(Actor* thisx, PlayState* play) { } this->stateFlags = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; func_80952C50(this, play); } diff --git a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c index 8273d8789..07a6748af 100644 --- a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c +++ b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c @@ -6,7 +6,7 @@ #include "z_en_hs2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnHs2*)thisx) diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index 16c19e3ec..bd90f48c1 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_dai/object_dai.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnIg*)thisx) @@ -573,7 +573,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3E0 = scheduleOutput->time1 - scheduleOutput->time0; this->unk_3E2 = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D0 |= 0x100; func_80BF1284(this, 3); this->actor.gravity = 0.0f; @@ -681,9 +681,9 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF2368(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_3D0 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; switch (scheduleOutput->result) { case 5: @@ -880,11 +880,11 @@ void func_80BF2AF8(EnIg* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BF3260, &sp20) || ((this->scheduleResult != sp20.result) && !func_80BF2368(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp20.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_2A8 = func_80BF146C(this, play); this->scheduleResult = sp20.result; diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index 80fe5a8e1..96ce3db8c 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnIk*)thisx) diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 2631d3a89..1c0fc091d 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -8,7 +8,7 @@ #include "z64horse.h" #include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnIn*)thisx) @@ -1374,7 +1374,7 @@ s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) { if (yawDiff >= 0x4300) { return 0; } - if (this->actor.xyzDistToPlayerSq > SQ(160.0f) && !this->actor.isTargeted) { + if (this->actor.xyzDistToPlayerSq > SQ(160.0f) && !this->actor.isLockedOn) { return 0; } if (this->actor.xyzDistToPlayerSq <= SQ(80.0f)) { diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 6a73eceec..014eea08e 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -50,7 +50,7 @@ static InitChainEntry D_80C1AA88[] = { ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index fe3ca06c8..8cf9ce0e9 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -7,7 +7,7 @@ #include "z_en_ja.h" #include "objects/object_boj/object_boj.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJa*)thisx) @@ -306,11 +306,11 @@ void func_80BC21A8(EnJa* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BC35F0, &sp18) || ((this->unk_1D8.unk_00 != sp18.result) && !func_80BC20D0(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1D8.unk_00 = sp18.result; func_80BC2150(this, play); @@ -354,7 +354,7 @@ void EnJa_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.uncullZoneForward = 800.0f; this->actor.gravity = 0.0f; SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index dae36a035..20be1b6c8 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -7,7 +7,7 @@ #include "z_en_jg.h" #include "overlays/actors/ovl_En_S_Goro/z_en_s_goro.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJg*)thisx) @@ -352,7 +352,7 @@ void EnJg_GoronShrineIdle(EnJg* this, PlayState* play) { this->flags |= FLAG_LOOKING_AT_PLAYER; Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnJg_GoronShrineTalk; - } else if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->textId = EnJg_GetStartingConversationTextId(this, play); } @@ -594,7 +594,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x236, &this->actor); // The old Goron is frozen solid! this->actionFunc = EnJg_EndFrozenInteraction; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -917,7 +917,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnJg_SetupTalk; } else { - if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isTargeted)) { + if ((this->actor.xzDistToPlayer < 100.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); if (this->action == EN_JG_ACTION_FIRST_THAW) { this->textId = EnJg_GetStartingConversationTextId(this, play); diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 2674c8dfb..013fb5050 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -7,7 +7,7 @@ #include "z_en_jgame_tsn.h" #include "overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnJgameTsn*)thisx) @@ -90,7 +90,7 @@ void EnJgameTsn_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.velocity.y = 0.0f; diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 6045da07b..c0f5bc3fd 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -6,7 +6,7 @@ #include "z_en_js.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJs*)thisx) diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.c b/src/overlays/actors/ovl_En_Jso/z_en_jso.c index f36629d27..43a27759f 100644 --- a/src/overlays/actors/ovl_En_Jso/z_en_jso.c +++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.c @@ -6,7 +6,7 @@ #include "z_en_jso.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnJso*)thisx) diff --git a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c index b7ad94d93..b9bdbe6b9 100644 --- a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c +++ b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c @@ -6,7 +6,9 @@ #include "z_en_jso2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | \ + ACTOR_FLAG_80000000) #define THIS ((EnJso2*)thisx) diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index e54b7ff26..cee6b38fa 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -7,7 +7,7 @@ #include "z_en_kaizoku.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_100000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000) #define THIS ((EnKaizoku*)thisx) @@ -253,7 +253,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { EffectBlureInit1 blureInit; this->picto.actor.hintId = TATL_HINT_ID_PIRATE; - this->picto.actor.targetMode = 3; + this->picto.actor.targetMode = TARGET_MODE_3; this->picto.actor.colChkInfo.mass = 80; ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawFeet, 0.0f); this->unk_2CA = this->picto.actor.world.rot.z; @@ -286,7 +286,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { Effect_Add(play, &this->blureIndex, EFFECT_BLURE1, 0, 0, &blureInit); Actor_SetScale(&this->picto.actor, 0.0125f); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->switchFlag == 127) { this->switchFlag = -1; } @@ -499,7 +499,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->picto.actor.world.pos.z = this->picto.actor.home.pos.z; Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor); this->unk_2C8++; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8); @@ -615,7 +615,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags &= ~ACTOR_FLAG_100000; this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; func_80B872A4(this); } break; @@ -677,7 +677,7 @@ void func_80B86804(EnKaizoku* this, PlayState* play) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_96); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); this->unk_2B2 = 30; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_598 = 0; this->unk_59C = 0; this->unk_2D8 = 0; @@ -1687,7 +1687,7 @@ void func_80B8960C(EnKaizoku* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->picto.actor); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->picto.actor.flags &= ~ACTOR_FLAG_400; this->unk_598 = 0; this->unk_59C = 0; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 9e3e56828..06409d524 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -8,7 +8,7 @@ #include "z_en_kakasi.h" #include "objects/object_ka/object_ka.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnKakasi*)thisx) @@ -156,7 +156,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { this->unkHeight = (this->picto.actor.world.rot.z * 20.0f) + 60.0f; this->picto.actor.world.rot.z = 0; - this->picto.actor.targetMode = 0; + this->picto.actor.targetMode = TARGET_MODE_0; if ((this->picto.actor.world.rot.x > 0) && (this->picto.actor.world.rot.x < 8)) { this->picto.actor.targetMode = KAKASI_GET_TARGETMODE(thisx); } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index 91c4ac9d4..51f44abec 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -7,7 +7,7 @@ #include "z_en_kame.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnKame*)thisx) @@ -555,7 +555,7 @@ void func_80AD8148(EnKame* this, PlayState* play) { } } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD); this->unk_29E = 0; diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index 4decf9ee6..8e5aa5802 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -8,7 +8,7 @@ #include "objects/object_kanban/object_kanban.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnKanban*)thisx) @@ -145,8 +145,8 @@ void EnKanban_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if (this->actor.params != ENKANBAN_PIECE) { - this->actor.targetMode = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.targetMode = TARGET_MODE_0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_19A = Rand_ZeroFloat(1.9f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -226,7 +226,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } if (this->zTargetTimer == 1) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (this->partFlags == 0xFFFF) { @@ -377,7 +377,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->direction = -1; } piece->airTimer = 100; - piece->actor.flags &= ~ACTOR_FLAG_1; + piece->actor.flags &= ~ACTOR_FLAG_TARGETABLE; piece->actor.flags |= ACTOR_FLAG_2000000; this->cutMarkTimer = 5; Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_STRIKE); @@ -393,7 +393,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); if (this->actor.xzDistToPlayer > 500.0f) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->partFlags = 0xFFFF; } @@ -877,7 +877,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { ((pDiff + yDiff + rDiff + this->spinRot.x + this->spinRot.z) == 0) && (this->floorRot.x == 0.0f) && (this->floorRot.z == 0.0f)) { signpost->partFlags |= this->partFlags; - signpost->actor.flags |= ACTOR_FLAG_1; + signpost->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c index 8c234e1ae..903b1232b 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -9,7 +9,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnKarebaba*)thisx) @@ -138,7 +138,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 2500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; void EnKarebaba_Init(Actor* thisx, PlayState* play) { @@ -420,7 +420,7 @@ void EnKarebaba_Dying(EnKarebaba* this, PlayState* play) { this->actor.scale.y = 0.0f; this->actor.scale.x = 0.0f; this->actor.speed = 0.0f; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); } @@ -452,7 +452,7 @@ void EnKarebaba_Dying(EnKarebaba* this, PlayState* play) { void EnKarebaba_SetupShrinkDie(EnKarebaba* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD); this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->timer = 3; } @@ -551,7 +551,7 @@ void EnKarebaba_Regrow(EnKarebaba* this, PlayState* play) { if (this->timer == 20) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->actor.params == ENKAREBABA_1) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); } diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c index da83290a9..76d88fa94 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -6,7 +6,7 @@ #include "z_en_kbt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKbt*)thisx) @@ -64,7 +64,7 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { this->unk_282 = 0; this->actionFunc = func_80B34598; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnKbt_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index 0b4fe5e68..ce3011e6d 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -8,7 +8,8 @@ #include "overlays/actors/ovl_En_Maruta/z_en_maruta.h" #include "objects/object_js/object_js.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnKendoJs*)thisx) @@ -133,7 +134,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { this->unk_274 = Lib_SegmentedToVirtual(path->points); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; this->actor.child = NULL; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index f015ddc5f..694b9271d 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -8,7 +8,7 @@ #include "objects/object_kgy/object_kgy.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKgy*)thisx) @@ -100,7 +100,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.z, 255, 64, 64, -1); this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); this->unk_300 = -1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnKgy_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c index c9d40c1e7..d1edd3880 100644 --- a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c +++ b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c @@ -6,7 +6,7 @@ #include "z_en_kitan.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnKitan*)thisx) diff --git a/src/overlays/actors/ovl_En_Knight/z_en_knight.c b/src/overlays/actors/ovl_En_Knight/z_en_knight.c index 0d80d6020..fd4bc7a5b 100644 --- a/src/overlays/actors/ovl_En_Knight/z_en_knight.c +++ b/src/overlays/actors/ovl_En_Knight/z_en_knight.c @@ -7,7 +7,7 @@ #include "z_en_knight.h" #include "z64shrink_window.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnKnight*)thisx) diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index 2700aa1f8..ca2dfac2b 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -9,7 +9,7 @@ #include "z_en_kujiya.h" #include "objects/object_kujiya/object_kujiya.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnKujiya*)thisx) @@ -59,8 +59,8 @@ void EnKujiya_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); - this->actor.flags &= ~ACTOR_FLAG_1; - this->actor.targetMode = 6; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index e61db843a..b9044ea38 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -7,7 +7,7 @@ #include "z_en_lift_nuts.h" #include "overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnLiftNuts*)thisx) @@ -286,7 +286,7 @@ void EnLiftNuts_Init(Actor* thisx, PlayState* play) { this->actor.home.pos = bgActor->actor.world.pos; } } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->timer = 0; this->autotalk = false; this->isFirstTimeHiding = false; @@ -1069,7 +1069,7 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) { EnLiftNuts_TryHide(this, play); if (EnLiftNuts_MinigameState(ENLIFTNUTS_MINIGAME_STATE_MODE_CHECK, ENLIFTNUTS_MINIGAME_STATE_RUNNING)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 2eafabd8f..880f48e82 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -109,7 +109,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.damageTable = &sDamageTable; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor); @@ -361,7 +361,7 @@ void EnLookNuts_Update(Actor* thisx, PlayState* play) { Audio_PlaySfx(NA_SE_SY_FOUND); func_800B7298(play, &this->actor, PLAYER_CSMODE_26); D_80A6862C = 1; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); this->actor.gravity = 0.0f; EnLookNuts_DetectedPlayer(this, play); } else { diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index be08288b2..241260524 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -6,7 +6,7 @@ #include "z_en_ma4.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) #define THIS ((EnMa4*)thisx) @@ -193,7 +193,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; this->unk_334 = 0; this->hasBow = true; diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index fe552a124..72fcc61d6 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -7,7 +7,7 @@ #include "z_en_ma_yto.h" #include "overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnMaYto*)thisx) @@ -147,7 +147,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { EnMaYto* this = THIS; s32 pad; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk200 = 0; this->unk310 = 0; this->unk320 = 0; @@ -268,7 +268,7 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_DINNER: - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; EnMaYto_SetupDinnerWait(this); break; diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index 8bded501d..651f8115f 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -6,7 +6,7 @@ #include "z_en_ma_yts.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnMaYts*)thisx) @@ -137,12 +137,12 @@ void func_80B8D12C(EnMaYts* this, PlayState* play) { void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { switch (this->type) { case MA_YTS_TYPE_BARN: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnMaYts_ChangeAnim(this, 0); break; case MA_YTS_TYPE_SITTING: - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; // Day 1 or "Winning" the alien invasion if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_ChangeAnim(this, 14); @@ -152,13 +152,13 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { break; case MA_YTS_TYPE_SLEEPING: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.draw = EnMaYts_DrawSleeping; EnMaYts_ChangeAnim(this, 0); break; case MA_YTS_TYPE_ENDCREDITS: - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnMaYts_ChangeAnim(this, 0); break; diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c index 659ef4cb3..f19dbae14 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h" #include "objects/object_maruta/object_maruta.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10) #define THIS ((EnMaruta*)thisx) @@ -214,7 +214,7 @@ void EnMaruta_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 50.0f; @@ -285,7 +285,7 @@ void func_80B372CC(EnMaruta* this, PlayState* play) { if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) { EnKendoJs* kendoJs = (EnKendoJs*)this->actor.parent; - kendoJs->unk_292 = this->actor.isTargeted; + kendoJs->unk_292 = this->actor.isLockedOn; } } @@ -322,7 +322,7 @@ void func_80B37428(EnMaruta* this, PlayState* play) { } void func_80B374B8(EnMaruta* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->actionFunc != func_80B37428) { this->unk_21E = 0; this->actor.gravity = -2.0f; @@ -422,7 +422,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) { this->unk_21A |= 0xFF; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B37950; } diff --git a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c index d47992114..f4e66b7b4 100644 --- a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c +++ b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c @@ -6,7 +6,7 @@ #include "z_en_minideath.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMinideath*)thisx) diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 3ea137783..8495411d5 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -7,7 +7,7 @@ #include "z_en_minifrog.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMinifrog*)thisx) @@ -132,7 +132,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->frog = NULL; } else { this->frog = EnMinifrog_GetFrog(play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; // Frog has been returned if (CHECK_WEEKEVENTREG(sIsFrogReturnedFlags[this->frogIndex])) { diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index ee0558064..0f44becad 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -7,7 +7,7 @@ #include "z_en_minislime.h" #include "overlays/actors/ovl_En_Bigslime/z_en_bigslime.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200) #define THIS ((EnMinislime*)thisx) @@ -121,7 +121,7 @@ static DamageTable sDamageTable = { void EnMinislime_Init(Actor* thisx, PlayState* play) { EnMinislime* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); this->id = this->actor.params; diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 23f28262c..ac816517c 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -6,7 +6,7 @@ #include "z_en_mk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMk*)thisx) @@ -95,7 +95,7 @@ void EnMk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80959E18; this->unk_27A = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; if (func_80959524(play) < 7) { this->unk_27A |= 2; diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c index 5387b94b6..a6d8eb8bb 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -7,7 +7,7 @@ #include "z_en_mkk.h" #include "objects/object_mkk/object_mkk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnMkk*)thisx) @@ -195,7 +195,7 @@ void EnMkk_Destroy(Actor* thisx, PlayState* play) { void func_80A4E0CC(EnMkk* this) { this->alpha = 0; this->unk_14B |= 3; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80A4E100; } @@ -211,7 +211,7 @@ void func_80A4E100(EnMkk* this, PlayState* play) { this->primColorSelect = 3; this->collider.base.acFlags |= AC_ON; this->alpha = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->unk_14B &= ~4; func_80A4E190(this); @@ -310,7 +310,7 @@ void func_80A4E60C(EnMkk* this, PlayState* play) { void func_80A4E67C(EnMkk* this) { this->unk_14B |= 1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags &= ~AC_ON; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD); @@ -442,7 +442,7 @@ void EnMkk_Update(Actor* thisx, PlayState* play) { void func_80A4EDF0(EnMkk* this) { this->alpha = 0; this->unk_14B |= 3; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->actor.update = func_80A4F16C; this->actor.gravity = -0.5f; diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index 7065985e8..f544dd2d2 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -7,7 +7,7 @@ #include "z_en_mm3.h" #include "objects/object_mm/object_mm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMm3*)thisx) @@ -94,7 +94,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit); Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.parent = NULL; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->unk_1DC = 1; this->unk_2B4 = 0; this->unk_2AE = 0; diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index fef78d7cd..04b5b73b8 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -6,7 +6,7 @@ #include "z_en_mnk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnMnk*)thisx) @@ -231,7 +231,7 @@ void EnMnk_Monkey_SetupWaitToRunAndWaitAtEachPoint(EnMnk* this, PlayState* play) void EnMnk_Monkey_StartInvisible(EnMnk* this, PlayState* play) { this->picto.actor.draw = NULL; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.dim.radius = 100; this->flags |= MONKEY_FLAGS_8; this->flags |= MONKEY_FLAGS_20; @@ -421,7 +421,7 @@ void EnMnk_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnMnk_Monkey_WaitToFollowPath; this->unk_3C8 = 0; this->flags |= MONKEY_FLAGS_2; - this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->picto.actor.velocity.y = 0.0f; this->picto.actor.terminalVelocity = 0.0f; this->picto.actor.gravity = 0.0f; @@ -1141,7 +1141,7 @@ void EnMnk_Monkey_SetupDrop(EnMnk* this) { this->actionFunc = EnMnk_Monkey_Drop; this->picto.actor.velocity.y = -10.0f; this->picto.actor.terminalVelocity = -10.0f; - this->picto.actor.flags |= ACTOR_FLAG_1; + this->picto.actor.flags |= ACTOR_FLAG_TARGETABLE; this->picto.actor.draw = EnMnk_Draw; Animation_Change(&this->skelAnime, &object_mnk_Anim_008814, 1.0f, 10.0f, Animation_GetLastFrame(&object_mnk_Anim_008814), ANIMMODE_ONCE, 0.0f); @@ -1726,7 +1726,7 @@ void EnMnk_MonkeyHanging_WaitAfterDunk(EnMnk* this, PlayState* play) { this->unk_3E0 = 5; } else if (this->unk_3C8 > 0) { this->unk_3C8--; - if (this->picto.actor.isTargeted && (this->picto.actor.csId != CS_ID_NONE)) { + if (this->picto.actor.isLockedOn && (this->picto.actor.csId != CS_ID_NONE)) { Actor_OfferTalk(&this->picto.actor, play, 1000.0f); } } else { @@ -1794,7 +1794,7 @@ void EnMnk_MonkeyHanging_StruggleBeforeDunk(EnMnk* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_83_08); } else if (this->unk_3C8 > 0) { this->unk_3C8--; - if (this->picto.actor.isTargeted) { + if (this->picto.actor.isLockedOn) { Actor_OfferTalk(&this->picto.actor, play, 1000.0f); } } else { @@ -1863,7 +1863,7 @@ void EnMnk_Monkey_WaitToGuideThroughWoods(EnMnk* this, PlayState* play) { func_80AB5F6C(this); if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { EnMnk_Monkey_SetupTalkBeforeGuideThroughWoods(this); - } else if (this->picto.actor.isTargeted || (this->picto.actor.xzDistToPlayer < 100.0f)) { + } else if (this->picto.actor.isLockedOn || (this->picto.actor.xzDistToPlayer < 100.0f)) { Actor_OfferTalk(&this->picto.actor, play, 120.0f); } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index 1e3a3d8bd..d17a8b98c 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -7,7 +7,7 @@ #include "z_en_ms.h" #include "objects/object_ms/object_ms.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnMs*)thisx) @@ -53,7 +53,7 @@ static ColliderCylinderInitType1 sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c index f86530ed9..5ed82cbc2 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -7,7 +7,7 @@ #include "z_en_muto.h" #include "objects/object_toryo/object_toryo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnMuto*)thisx) @@ -87,7 +87,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { } } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); EnMuto_SetupIdle(this); diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 2c5417c7d..1720954a2 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -7,7 +7,7 @@ #include "z_en_nb.h" #include "objects/object_nb/object_nb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnNb*)thisx) @@ -595,8 +595,8 @@ s32 func_80BC0C0C(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 EnNb_ProcessScheduleOutput(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 success; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->stateFlags = EN_NB_FLAG_NONE; this->unk_274 = 40.0f; @@ -640,16 +640,16 @@ void EnNb_FollowSchedule(EnNb* this, PlayState* play) { scheduleOutput.result = EN_NB_SCH_1; EnNb_ProcessScheduleOutput(this, play, &scheduleOutput); this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } else if (!Schedule_RunScript(play, sScheduleScript, &scheduleOutput) || ((this->scheduleResult != scheduleOutput.result) && !EnNb_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = EN_NB_SCH_NONE; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c index 2b05945d9..a6301a495 100644 --- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c +++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c @@ -7,7 +7,7 @@ #include "z_en_neo_reeba.h" #include "objects/object_rb/object_rb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnNeoReeba*)thisx) @@ -133,7 +133,7 @@ void EnNeoReeba_Init(Actor* thisx, PlayState* play) { } this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 2; + this->actor.targetMode = TARGET_MODE_2; this->actor.hintId = TATL_HINT_ID_LEEVER; this->actor.gravity = -0.5f; @@ -160,7 +160,7 @@ void EnNeoReeba_Destroy(Actor* thisx, PlayState* play) { } void EnNeoReeba_SetupWaitUnderground(EnNeoReeba* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->actionTimer = 10; this->actionFunc = EnNeoReeba_WaitUnderground; @@ -248,7 +248,7 @@ void EnNeoReeba_SetupRise(EnNeoReeba* this) { this->sinkRiseRate = 300.0f; this->skelAnime.playSpeed = 2.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNeoReeba_RiseOutOfGround; } @@ -446,7 +446,7 @@ void EnNeoReeba_SetupDeathEffects(EnNeoReeba* this) { this->rotationSpeed = 3640.0f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD); this->actionFunc = EnNeoReeba_PlayDeathEffects; diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index d3edbce76..fa93cfb26 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -88,7 +88,7 @@ static ColliderCylinderInit sCylinderInit = { void EnNiw_Init(Actor* thisx, PlayState* play) { static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP), }; @@ -104,7 +104,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { this->niwType = this->actor.params; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f); @@ -133,7 +133,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); this->sfxTimer1 = 30; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actionFunc = EnNiw_Held; this->actor.speed = 0.0f; @@ -349,7 +349,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow this->sfxTimer1 = 30; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actor.speed = 0.0f; this->actionFunc = EnNiw_Held; @@ -446,7 +446,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->actor.shape.rot.z = 0; rotZ = this->actor.shape.rot.z; this->niwState = NIW_STATE_FALLING; - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNiw_Thrown; this->actor.shape.rot.y = rotZ; this->actor.shape.rot.x = rotZ; @@ -464,7 +464,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->actor.shape.rot.x = rotZ; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Math_Vec3f_Copy(&this->unk2BC, &D_808934DC); - this->actor.flags |= ACTOR_FLAG_1; // targetable ON + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnNiw_Thrown; } @@ -502,7 +502,7 @@ void EnNiw_Thrown(EnNiw* this, PlayState* play) { this->sfxTimer1 = 30; this->unk2EC = 0; this->heldTimer = 30; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_HELD; this->actionFunc = EnNiw_Held; this->actor.speed = 0.0f; @@ -614,7 +614,7 @@ void EnNiw_SetupCuccoStorm(EnNiw* this, PlayState* play) { if (this->cuccoStormTimer == 0) { this->cuccoStormTimer = 10; this->yawTowardsPlayer = this->actor.yawTowardsPlayer; - this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->niwState = NIW_STATE_ANGRY3; this->actionFunc = EnNiw_CuccoStorm; } diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index e7ac95d3e..f5e35f478 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -7,7 +7,7 @@ #include "z_en_nnh.h" #include "objects/object_nnh/object_nnh.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnNnh*)thisx) @@ -59,7 +59,7 @@ void EnNnh_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; EnNnh_SetupWaitForDialogue(this); diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index 7344e07d0..c65ca03ba 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -37,7 +37,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { f32 zRot = 0.0f; s32 i = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk148 = ENOKARINATAG_GET_F800(thisx); this->unk14A = ENOKARINATAG_GET_780(thisx); this->switchFlags = ENOKARINATAG_GET_SWITCHFLAGS(thisx); @@ -56,7 +56,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { if (this->unk14A == 0xF) { this->unk14A = -1; } - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actionFunc = func_8093E518; } diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 8241c7e5c..3263d9b71 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -6,7 +6,7 @@ #include "z_en_okuta.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnOkuta*)thisx) diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c index dbc42f0d8..4bac34933 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -6,7 +6,7 @@ #include "z_en_onpuman.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnOnpuman*)thisx) @@ -56,7 +56,7 @@ void EnOnpuman_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_2A4 = 0; this->unk_2A0 = NULL; this->actionFunc = func_80B121D8; diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index 426a93e16..c9828e0ff 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_ikn_demo/object_ikn_demo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnOsk*)thisx) @@ -67,7 +67,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BF5F60; this->unk_254 = -1; this->cueId = -1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (ENOSK_GET_F(&this->actor)) { case ENOSK_1: diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index 72c71f878..9046f613a 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -7,7 +7,7 @@ #include "z_en_osn.h" #include "objects/object_osn/object_osn.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOsn*)thisx) @@ -176,7 +176,7 @@ static DamageTable sDamageTable = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; void EnOsn_UpdateCollider(EnOsn* this, PlayState* play) { @@ -724,7 +724,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnOsn_StartCutscene; - } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (yaw < 0x4000) && (yaw > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); this->actor.textId = 0xFFFF; @@ -733,7 +733,7 @@ void EnOsn_Idle(EnOsn* this, PlayState* play) { this->textId = EnOsn_GetInitialText(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnOsn_Talk; - } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && (yaw > -0x4000)) { + } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && (yaw < 0x4000) && (yaw > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -948,7 +948,7 @@ void EnOsn_Init(Actor* thisx, PlayState* play) { break; case OSN_TYPE_CUTSCENE: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnOsn_HandleCsAction; break; @@ -976,12 +976,12 @@ void EnOsn_Update(Actor* thisx, PlayState* play) { if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) { if (isFlagSet) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnOsn_UpdateCollider(this, play); this->actor.draw = EnOsn_Draw; } else { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 21d80e177..15648514e 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -7,7 +7,7 @@ #include "z_en_ossan.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOssan*)thisx) @@ -1576,7 +1576,7 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnOssan_WaitForBlink; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnOssan_SetupAction(this, EnOssan_Idle); } } diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index 48e3c3c03..4e9b7a162 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -8,7 +8,7 @@ #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOt*)thisx) @@ -141,7 +141,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { if (this->type == SEAHORSE_TYPE_0) { D_80B5E880 = this; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.update = func_80B5DB6C; this->actor.draw = NULL; return; @@ -265,7 +265,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { case SEAHORSE_TYPE_3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Actor_SetScale(&this->actor, 0.0064999997f); this->collider.dim.radius *= 0.5f; this->collider.dim.height *= 0.5f; @@ -416,9 +416,9 @@ void func_80B5C25C(EnOt* this, PlayState* play) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 2, &this->animIndex); SubS_ChangeAnimationBySpeedInfo(&this->unk_360->skelAnime, sAnimations, 2, &this->unk_360->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->unk_360->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->unk_360->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->unk_360->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80B5C9A8(this->unk_360, play); func_80B5C3B8(this, play); } @@ -898,7 +898,7 @@ void func_80B5D648(EnOt* this, PlayState* play) { this->actor.speed = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); Flags_SetSwitch(play, SEAHORSE_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80B5D750; } @@ -926,7 +926,7 @@ void func_80B5D750(EnOt* this, PlayState* play) { if ((this->unk_32C & 1) && (this->actor.xzDistToPlayer <= 180.0f)) { this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (D_80B5E884 != 0) { func_80B5C9A8(this, play); } else { diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index be751400f..011738668 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -7,7 +7,7 @@ #include "z_en_owl.h" #include "objects/object_owl/object_owl.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnOwl*)thisx) @@ -120,7 +120,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); this->actor.update = func_8095CCF4; this->actor.draw = func_8095D074; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D8 = 0; this->unk_3DA = 0x320; this->unk_3DC = 0x12C; @@ -741,7 +741,7 @@ void func_8095BE0C(EnOwl* this, PlayState* play) { this->csIdIndex = 1; this->actionFlags |= 0x40; } else if (this->actor.textId == 0xBF0) { - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { Actor_OfferTalkExchange(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } } else if (this->actor.xzDistToPlayer < 200.0f) { diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index 5b42b2bfd..be1c95685 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPamera*)thisx) @@ -140,7 +140,7 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit2); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->unk_312 = 0; this->unk_310 = 0; this->unk_314 = 0; @@ -233,7 +233,7 @@ void EnPamera_Destroy(Actor* thisx, PlayState* play) { void func_80BD8700(EnPamera* this) { this->hideInisdeTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); this->actionFunc = func_80BD8758; } @@ -275,7 +275,7 @@ void func_80BD8758(EnPamera* this, PlayState* play) { void func_80BD8908(EnPamera* this) { this->actor.draw = EnPamera_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); this->actionFunc = func_80BD8964; } @@ -585,7 +585,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) { } void func_80BD9904(EnPamera* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = &func_80BD9928; } @@ -709,7 +709,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { case 2: if (this->actor.draw == NULL) { this->actor.draw = EnPamera_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } func_80BD9EE0(this); break; 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 88e0aea16..37c234538 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -11,7 +11,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnPametfrog*)thisx) @@ -169,7 +169,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(targetArrowOffset, -13221, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -1000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 7, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 10, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_10, ICHAIN_STOP), }; static s32 sIsFrogReturnedFlags[] = { @@ -425,7 +425,7 @@ void EnPametfrog_SetupRearOnSnapper(EnPametfrog* this) { Animation_PlayOnce(&this->skelAnime, &gGekkoStandingIdleAnim); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.params = GEKKO_ON_SNAPPER; this->actionFunc = EnPametfrog_RearOnSnapper; } @@ -502,7 +502,7 @@ void EnPametfrog_SetupFallOffSnapper(EnPametfrog* this, PlayState* play) { this->actor.velocity.y = 15.0f; this->actor.world.rot.y = BINANG_ROT180(this->actor.child->world.rot.y); this->actor.shape.rot.y = this->actor.world.rot.y; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->timer = 30; this->collider.base.ocFlags1 |= OC1_ON; yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); @@ -1172,7 +1172,7 @@ void EnPametfrog_SetupCallSnapper(EnPametfrog* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 3.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_GREET); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.colChkInfo.health = 6; this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y; @@ -1312,7 +1312,7 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, PlayState* play) { this->collider.base.acFlags &= ~AC_ON; EnPametfrog_ApplyMagicArrowEffects(this, play); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Audio_RestorePrevBgm(); EnPametfrog_SetupCutscene(this); } else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ZORA_BARRIER) { diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 94936a7b1..77d33673b 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -10,7 +10,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_ph/object_ph.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPeehat*)thisx) @@ -298,7 +298,7 @@ void func_80897498(EnPeehat* this) { void func_80897520(EnPeehat* this, PlayState* play) { if (!gSaveContext.save.isNight) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->colliderSphere.base.acFlags |= AC_ON; if (this->actor.xzDistToPlayer < 740.0f) { func_80897648(this); @@ -306,7 +306,7 @@ void func_80897520(EnPeehat* this, PlayState* play) { Math_StepToF(&this->actor.shape.yOffset, -1000.0f, 10.0f); } } else { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->colliderSphere.base.acFlags &= ~AC_ON; Math_StepToF(&this->actor.shape.yOffset, -1000.0f, 50.0f); if (this->unk_2B0 != 0) { diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 715021ebe..ab80d3d57 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_mm/object_mm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnPm*)thisx) @@ -1265,7 +1265,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_36C = scheduleOutput->time1 - scheduleOutput->time0; this->unk_36E = sp56 - scheduleOutput->time0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; } @@ -1501,7 +1501,7 @@ s32 func_80AF992C(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3s_Copy(&this->actor.world.rot, &D_80AFB8F8); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); SubS_SetOfferMode(&this->unk_356, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -1.0f; this->unk_368 = 80.0f; if (scheduleOutput->result == 14) { @@ -1571,8 +1571,8 @@ s32 func_80AF9B54(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AF9BF8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret; - this->actor.flags |= ACTOR_FLAG_1; - this->actor.targetMode = 0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.targetMode = TARGET_MODE_0; this->unk_394 = PLAYER_IA_NONE; this->unk_356 = 0; this->unk_368 = 40.0f; @@ -2004,11 +2004,11 @@ void func_80AFA4D0(EnPm* this, PlayState* play) { if (!Schedule_RunScript(play, D_80AFB900[this->unk_38C], &sp2C) || ((this->unk_258 != sp2C.result) && !func_80AF9BF8(this, play, &sp2C))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp2C.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_258 = sp2C.result; diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c index 6d14ca25a..0772249ba 100644 --- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c +++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c @@ -6,7 +6,7 @@ #include "z_en_po_composer.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_2000000) #define THIS ((EnPoComposer*)thisx) 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 b1f43e9cc..d5174f66a 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 @@ -102,7 +102,7 @@ void EnPoFusen_Init(Actor* thisx, PlayState* play) { f32 flyingHeightMin; this->actor.scale.x = this->actor.scale.y = this->actor.scale.z = 0.007f; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.colChkInfo.damageTable = &sDamageTable; Collider_InitSphere(play, &this->collider); diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index 3ba0cad85..bc0a3610c 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -8,7 +8,8 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_4000) #define THIS ((EnPoSisters*)thisx) @@ -185,7 +186,7 @@ void EnPoSisters_Init(Actor* thisx, PlayState* play) { this->fireCount = 1; this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES; this->megDistToPlayer = 110.0f; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; if (POE_SISTERS_GET_OBSERVER_FLAG(&this->actor)) { // "Flagged observer": non-enemy floating prop spawned by EnGb2 (Poe Hut Proprieter) for display @@ -290,7 +291,7 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) { // check for z target void EnPoSisters_CheckZTarget(EnPoSisters* this, PlayState* play) { - if (this->actor.isTargeted && (this->color.a == 255)) { + if (this->actor.isLockedOn && (this->color.a == 255)) { DECR(this->zTargetTimer); } else { this->zTargetTimer = 20; @@ -661,7 +662,7 @@ void EnPoSisters_SetupDeathStage1(EnPoSisters* this) { this->actor.speed = 0.0f; this->actor.world.pos.y += 42.0f; this->actor.shape.yOffset = -6000.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->poSisterFlags = POE_SISTERS_FLAG_CLEAR; this->actionFunc = EnPoSisters_DeathStage1; } @@ -764,7 +765,7 @@ void EnPoSisters_MegCloneVanish(EnPoSisters* this, PlayState* play) { Vec3f pos; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->invisibleTimer = 100; // 5 seconds this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES; this->collider.base.colType = COLTYPE_HIT3; @@ -811,7 +812,7 @@ void EnPoSisters_SetupMegSurroundPlayer(EnPoSisters* this) { this->megSurroundTimer = 300; // 15 seconds this->megClonesRemaining = 3; this->poSisterFlags |= (POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_CHECK_AC); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnPoSisters_MegSurroundPlayer; } @@ -889,7 +890,7 @@ void EnPoSisters_SetupSpawnPo(EnPoSisters* this) { void EnPoSisters_PoeSpawn(EnPoSisters* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { this->color.a = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->poSisterFlags |= (POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO | POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT); if (this->type == POE_SISTERS_TYPE_MEG) { EnPoSisters_MegCloneVanish(this, play); diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index c79e6910e..1c301a8bf 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_po/object_po.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) #define THIS ((EnPoh*)thisx) @@ -365,7 +365,7 @@ void func_80B2D07C(EnPoh* this, PlayState* play) { void func_80B2D0E8(EnPoh* this) { this->unk_197 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Animation_PlayOnceSetSpeed(&this->skelAnime, &object_po_Anim_0011C4, 0.0f); this->actionFunc = func_80B2D140; } @@ -374,7 +374,7 @@ void func_80B2D140(EnPoh* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { this->unk_197 = 255; this->unk_190 = Rand_S16Offset(700, 300); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; func_80B2CB60(this); } else if (this->skelAnime.curFrame > 10.0f) { this->unk_197 = (this->skelAnime.curFrame - 10.0f) * 0.05f * 255.0f; @@ -391,7 +391,7 @@ void func_80B2D2C0(EnPoh* this) { this->actor.world.rot.y = this->actor.shape.rot.y; this->unk_18E = 0; this->actor.hintId = TATL_HINT_ID_NONE; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B2D300; } @@ -579,7 +579,7 @@ void func_80B2DC50(EnPoh* this, PlayState* play) { this->actor.world.pos.y -= 15.0f; this->actor.shape.rot.x = -0x8000; func_800BC154(play, &play->actorCtx, &this->actor, 8); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actionFunc = func_80B2DD2C; } @@ -648,7 +648,7 @@ void func_80B2E1D8(EnPoh* this) { Actor_SetFocus(&this->actor, -10.0f); this->unk_18E = 200; this->unk_18D = 32; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B2E230; } @@ -729,7 +729,7 @@ void func_80B2E55C(EnPoh* this) { } if (this->unk_197 == 255) { - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { this->unk_18C++; this->unk_18C = CLAMP_MAX(this->unk_18C, 20); } else { diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 48de2c4a8..7d0aae02f 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnPp*)thisx) @@ -235,7 +235,7 @@ void EnPp_Init(Actor* thisx, PlayState* play) { EnPp* this = THIS; EffectBlureInit1 blureInit; - this->actor.targetMode = 4; + this->actor.targetMode = TARGET_MODE_4; this->actor.colChkInfo.mass = 60; this->actor.colChkInfo.health = 3; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -998,7 +998,7 @@ void EnPp_SetupDead(EnPp* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_HIPLOOP_DEAD); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->action = EN_PP_ACTION_DEAD; this->actionFunc = EnPp_Dead; } @@ -1093,7 +1093,7 @@ void EnPp_Mask_SetupDetach(EnPp* this, PlayState* play) { this->actor.gravity = 0.0f; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionVar.maskDetachState = EN_PP_MASK_DETACH_STATE_START; EnPp_ChangeAnim(this, EN_PP_ANIM_IDLE); SkelAnime_Update(&this->skelAnime); diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c index 67ad65198..74efc10ca 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Prz/z_en_prz.h" #include "objects/object_pr/object_pr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPr*)thisx) @@ -134,7 +134,7 @@ void EnPr_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_2B8 = this->actor.world.pos.y; this->actor.shape.yOffset = 1500.0f; this->actor.colChkInfo.damageTable = &sDamageTable; diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index a4dd96d4b..73f1111a5 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -8,7 +8,7 @@ #include "objects/object_pr/object_pr.h" #include "overlays/actors/ovl_En_Encount1/z_en_encount1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPr2*)thisx) @@ -108,7 +108,7 @@ s16 D_80A75C3C[] = { void EnPr2_Init(Actor* thisx, PlayState* play) { EnPr2* this = THIS; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->actor.hintId = TATL_HINT_ID_SKULLFISH; this->unk_1EC = 255; this->actor.colChkInfo.health = 1; @@ -518,7 +518,7 @@ void func_80A74E90(EnPr2* this, PlayState* play) { void func_80A751B4(EnPr2* this) { this->unk_1EC = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_1E0 < 10) { func_80A74510(this, 2); } else { diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c index a6fbdba12..f314ebef0 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -8,7 +8,7 @@ #include "objects/object_pr/object_pr.h" #include "overlays/actors/ovl_En_Pr/z_en_pr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnPrz*)thisx) @@ -114,7 +114,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_1E8 = 255; this->actor.hintId = TATL_HINT_ID_SKULLFISH; this->actor.colChkInfo.damageTable = &sDamageTable; @@ -126,7 +126,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { this->unk_1E6 = ENPRZ_GET(&this->actor); this->actor.shape.yOffset = 500.0f; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Math_Vec3f_Copy(&this->unk_1D8, &this->actor.world.pos); @@ -367,7 +367,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) { void func_80A76A1C(EnPrz* this) { this->unk_1E8 = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEWALK_DEAD); diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index 92edec67a..c3a7d9a78 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -6,7 +6,7 @@ #include "z_en_pst.h" -#define FLAGS (ACTOR_FLAG_1) +#define FLAGS (ACTOR_FLAG_TARGETABLE) #define THIS ((EnPst*)thisx) @@ -342,11 +342,11 @@ void EnPst_FollowSchedule(EnPst* this, PlayState* play) { ((this->scheduleResult != scheduleOutput.result) && !EnPst_ProcessScheduleOutput(this, play, &scheduleOutput))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = POSTBOX_SCH_NONE; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->scheduleResult = scheduleOutput.result; EnPst_HandleSchedule(this, play); @@ -390,7 +390,7 @@ void EnPst_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.02f); this->actionFunc = EnPst_FollowSchedule; Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index ebede99a3..cb9449b32 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -210,7 +210,7 @@ void EnRaf_Init(Actor* thisx, PlayState* play) { CollisionHeader_GetVirtual(&gCarnivorousLilyPadCol, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; SkelAnime_InitFlex(play, &this->skelAnime, &gCarnivorousLilyPadSkel, &gCarnivorousLilyPadSpitAnim, this->jointTable, this->morphTable, CARNIVOROUS_LILY_PAD_LIMB_MAX); @@ -538,7 +538,7 @@ void EnRaf_Explode(EnRaf* this, PlayState* play) { this->timer = 5; if (this->grabTarget == EN_RAF_GRAB_TARGET_EXPLOSIVE) { func_800BC154(play, &play->actorCtx, &this->dyna.actor, 5); - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); } this->actionFunc = EnRaf_PostDetonation; @@ -552,7 +552,7 @@ void EnRaf_PostDetonation(EnRaf* this, PlayState* play) { this->collider.dim.radius = 50; this->collider.dim.height = 10; func_800BC154(play, &play->actorCtx, &this->dyna.actor, 6); - this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->dyna.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); EnRaf_SetupDormant(this); } else if (this->grabTarget == EN_RAF_GRAB_TARGET_EXPLOSIVE) { this->collider.dim.radius = 80; diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index a8e7d52d4..e6d37cfe4 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -8,7 +8,7 @@ #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) #define THIS ((EnRailSkb*)thisx) @@ -428,7 +428,7 @@ void func_80B713A4(EnRailSkb* this, PlayState* play) { void func_80B71488(EnRailSkb* this) { this->unk_402 |= 0x40; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->unk_2E0 != 0) { this->unk_2E4 = this->unk_2E0 - 1; } else { @@ -451,7 +451,7 @@ void func_80B7151C(EnRailSkb* this) { this->actor.shape.yOffset = -5000.0f; this->actor.colChkInfo.health = 2; this->unk_402 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); this->actor.draw = EnRailSkb_Draw; this->actor.shape.shadowAlpha = 0; @@ -666,7 +666,7 @@ void func_80B71DF0(EnRailSkb* this) { this->actor.shape.yOffset = -5000.0f; this->actor.colChkInfo.health = 2; this->unk_402 = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnRailSkb_Draw; this->actor.shape.shadowAlpha = 0; this->actor.shape.rot.y = this->actor.world.rot.y; @@ -822,8 +822,8 @@ void func_80B72190(EnRailSkb* this, PlayState* play) { } void func_80B723F8(EnRailSkb* this) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags |= ACTOR_FLAG_100000; this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; @@ -923,17 +923,17 @@ void func_80B72880(EnRailSkb* this, PlayState* play) { if ((this->actionFunc == func_80B70FF8) || (this->actionFunc == func_80B716A8)) { if (this->actionFunc != func_80B716A8) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags |= ACTOR_FLAG_100000; this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; func_80B71650(this); } } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.flags &= ~ACTOR_FLAG_100000; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.textId = 0; func_80B70FA0(this); diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 7eef8759b..d4a1eaa1c 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -8,7 +8,7 @@ #include "z64rumble.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnRailgibud*)thisx) @@ -246,7 +246,7 @@ void EnRailgibud_Init(Actor* thisx, PlayState* play) { s32 pad; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.hintId = TATL_HINT_ID_GIBDO; this->actor.textId = 0; if (ENRAILGIBUD_IS_CUTSCENE_TYPE(&this->actor)) { @@ -420,7 +420,7 @@ void EnRailgibud_WalkToPlayer(EnRailgibud* this, PlayState* play) { void EnRailgibud_SetupGrab(EnRailgibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_START); this->grabDamageTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_START; this->actionFunc = EnRailgibud_Grab; } @@ -438,7 +438,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_ATTACK); } else if (!(player->stateFlags2 & PLAYER_STATE2_80)) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -467,7 +467,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_RAILGIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -618,7 +618,7 @@ void EnRailgibud_Stunned(EnRailgibud* this, PlayState* play) { void EnRailgibud_SetupDead(EnRailgibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_DEATH); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->deathTimer = 0; this->actionFunc = EnRailgibud_Dead; @@ -635,7 +635,7 @@ void EnRailgibud_Dead(EnRailgibud* this, PlayState* play) { // stop drawing it, and make its Update function only check to see if // the Gibdos should move forward. this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.update = EnRailgibud_MainGibdo_DeadUpdate; } } else { @@ -931,10 +931,10 @@ void EnRailgibud_CheckForGibdoMask(EnRailgibud* this, PlayState* play) { if ((this->actionFunc != EnRailgibud_Grab) && (this->actionFunc != EnRailgibud_Damage) && (this->actionFunc != EnRailgibud_GrabFail) && (this->actionFunc != EnRailgibud_TurnAwayAndShakeHead) && (this->actionFunc != EnRailgibud_Dead)) { - if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_4))) { + if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY))) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_8 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if ((this->actionFunc != EnRailgibud_WalkInCircles) && (this->actionFunc != EnRailgibud_WalkToHome)) { @@ -942,8 +942,8 @@ void EnRailgibud_CheckForGibdoMask(EnRailgibud* this, PlayState* play) { } } } else if (Player_GetMask(play) != PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->type == EN_RAILGIBUD_TYPE_REDEAD) { this->actor.hintId = TATL_HINT_ID_REDEAD; } else { @@ -964,7 +964,7 @@ void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play) { this->textId = 0x13B2; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM); this->actor.speed = 0.0f; - } else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_8)) && + } else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)) && !(this->collider.base.acFlags & AC_HIT)) { Actor_OfferTalk(&this->actor, play, 100.0f); } diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 946483a89..1dea0c2ee 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnRat*)thisx) @@ -535,7 +535,7 @@ void EnRat_SetupRevive(EnRat* this) { this->actor.shape.rot.z = this->actor.home.rot.z; EnRat_InitializeAxes(this); EnRat_UpdateRotation(this); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Animation_PlayLoopSetSpeed(&this->skelAnime, &gRealBombchuSpotAnim, 0.0f); this->revivePosY = 2666.6667f; @@ -552,7 +552,7 @@ void EnRat_Revive(EnRat* this, PlayState* play) { if (this->timer > 0) { this->timer--; if (this->timer == 0) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnRat_Draw; this->skelAnime.playSpeed = 1.0f; } diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index 24bbc9e06..0cf7ec733 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -26,7 +26,7 @@ #include "z64rumble.h" #include "objects/object_rd/object_rd.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnRd*)thisx) @@ -188,7 +188,7 @@ void EnRd_Init(Actor* thisx, PlayState* play) { s32 pad; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.colChkInfo.damageTable = &sDamageTable; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); this->upperBodyYRotation = this->headYRotation = 0; @@ -688,7 +688,7 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) { EnRd_SetupWalkToHome(this, play); } } else if (play->grabPlayer(play, player)) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnRd_SetupGrab(this); } } else if (EN_RD_GET_TYPE(&this->actor) > EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING) { @@ -740,7 +740,7 @@ void EnRd_WalkToHome(EnRd* this, PlayState* play) { !(player->stateFlags2 & (0x4000 | 0x80)) && (player->transformation != PLAYER_FORM_GORON) && (player->transformation != PLAYER_FORM_DEKU) && (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) < 150.0f)) { - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; EnRd_SetupWalkToPlayer(this, play); } else if (EN_RD_GET_TYPE(&this->actor) > EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING) { if (this->actor.parent != NULL) { @@ -895,8 +895,8 @@ void EnRd_Grab(EnRd* this, PlayState* play) { if (player->transformation != PLAYER_FORM_FIERCE_DEITY) { Math_SmoothStepToF(&this->actor.shape.yOffset, 0.0f, 1.0f, 400.0f, 0.0f); } - this->actor.targetMode = 0; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.targetMode = TARGET_MODE_0; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->playerStunWaitTimer = 10; this->grabWaitTimer = 15; EnRd_SetupWalkToPlayer(this, play); @@ -1008,7 +1008,7 @@ void EnRd_SetupDamage(EnRd* this) { this->actor.speed = -2.0f; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE); this->action = EN_RD_ACTION_DAMAGE; this->actionFunc = EnRd_Damage; @@ -1042,7 +1042,7 @@ void EnRd_SetupDead(EnRd* this) { Animation_MorphToPlayOnce(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f); this->action = EN_RD_ACTION_DEAD; this->deathTimer = 300; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->actionFunc = EnRd_Dead; diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 6b2f86f53..6ac728a31 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -7,7 +7,7 @@ #include "z_en_recepgirl.h" #include "objects/object_bg/object_bg.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnRecepgirl*)thisx) @@ -37,7 +37,7 @@ static TexturePtr sEyeTextures[] = { object_bg_Tex_00F8F0, object_bg_Tex_00FCF0, object_bg_Tex_00FCF0 }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index cb22f557a..856070fba 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -747,7 +747,7 @@ void EnRg_Init(Actor* thisx, PlayState* play) { this->unk_33C = 1; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_310 = 8; this->actor.gravity = -1.0f; diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index d1493583a..43b60256b 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_rr/object_rr.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnRr*)thisx) @@ -120,7 +120,7 @@ static CollisionCheckInfoInit sColChkInfoInit = { 3, 45, 60, 250 }; static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_LIKE_LIKE, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -400, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), @@ -269,7 +269,7 @@ void func_808FA3F8(EnRr* this, Player* player) { this->unk_1EA = 100; this->unk_1FC = 20; this->collider1.base.ocFlags1 &= ~OC1_TYPE_PLAYER; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 8; this->unk_1E1 = 0; this->actor.speed = 0.0f; @@ -300,7 +300,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; player->unk_AE8 = 100; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 110; this->unk_1F6 = 2500; this->unk_210 = 0.0f; @@ -417,7 +417,7 @@ void func_808FA910(EnRr* this) { this->actionFunc = func_808FB42C; Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void func_808FA9CC(EnRr* this) { diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c index 0d9ada5e0..b1632ecc8 100644 --- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c +++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c @@ -7,7 +7,7 @@ #include "z_en_rsn.h" #include "objects/object_rs/object_rs.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnRsn*)thisx) @@ -45,7 +45,7 @@ void EnRsn_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gBombShopkeeperSkel, &gBombShopkeeperWalkAnim, NULL, NULL, 0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80C25D40(this); } diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c index 4ff7b52fe..66ee8f546 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -6,7 +6,7 @@ #include "z_en_ru.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnRu*)thisx) diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index e94bc851b..f22a78ec2 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -494,7 +494,7 @@ void EnRuppecrow_UpdateDamage(EnRuppecrow* this, PlayState* play) { if (this->actor.colChkInfo.damageEffect != 0x1) { this->actor.colChkInfo.health = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Enemy_StartFinishingBlow(play, &this->actor); EnRuppecrow_HandleDeath(this); } diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index 520a01f82..a7bfd13f0 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -7,7 +7,7 @@ #include "z_en_rz.h" #include "assets/objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnRz*)thisx) @@ -112,7 +112,7 @@ void EnRz_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BFC058; EnRz_SetupPath(this, play); this->animIndex = EN_RZ_ANIM_MAX; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.terminalVelocity = -9.0f; this->actor.gravity = -1.0f; diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index ecc9017c5..6b2e06f0b 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -36,7 +36,7 @@ Week Event Flags: #include "overlays/actors/ovl_En_Jg/z_en_jg.h" // Goron Elder #include "objects/object_taisou/object_taisou.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSGoro*)thisx) #define EN_S_GORO_ROLLEDUP_YOFFSET 14.0f @@ -1048,7 +1048,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { this->actor.gravity = -1.0f; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) { case EN_S_GORO_TYPE_SHRINE_WINTER_A: @@ -1113,7 +1113,7 @@ void EnSGoro_WinterShrineGoron_Idle(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_ShrineGoron_NextTextId(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_WinterShrineGoron_Talk; - } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1144,7 +1144,7 @@ void EnSGoro_SpringShrineGoron_Idle(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_ShrineGoron_NextTextId(this, play); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_SpringShrineGoron_Talk; - } else if ((this->actor.xzDistToPlayer < 250.0f) || (this->actor.isTargeted)) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || (this->actor.isLockedOn)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1185,7 +1185,7 @@ void EnSGoro_ShopGoron_Idle(EnSGoro* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnSGoro_ShopGoron_Talk; } - } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 250.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x1000, 0x100); @@ -1279,7 +1279,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x23A, &this->actor); this->actionFunc = EnSGoro_SleepTalk; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } EnSGoro_UpdateSleeping(this, play); diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index 38d82ed9a..08b1ad240 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -7,7 +7,7 @@ #include "z_en_sb.h" #include "objects/object_sb/object_sb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSb*)thisx) @@ -93,7 +93,7 @@ static DamageTable sDamageTable = { static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_SHELLBLADE, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index fdab2ca4f..c8bc7d660 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnScopenuts*)thisx) @@ -95,7 +95,7 @@ Gfx* D_80BCCCDC[] = { gKakeraLeafMiddle, gKakeraLeafTip }; Vec3f D_80BCCCE4 = { 0.0f, -0.5f, 0.0f }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -301,7 +301,7 @@ void func_80BCB52C(EnScopenuts* this, PlayState* play) { this->actionFunc = func_80BCB6D0; } else if (((this->actor.xzDistToPlayer < 100.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 100.0f); } else if (!(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) || !((this->actor.xzDistToPlayer < 200.0f) ? true : false)) { @@ -320,7 +320,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { this->unk_328 &= ~1; play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_328 &= ~4; this->unk_348 = 8; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 8); diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index 885ab2717..2e05f0f57 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -11,7 +11,7 @@ #include "objects/object_sekihiz/object_sekihiz.h" #include "objects/object_zog/object_zog.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSekihi*)thisx) diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index d03f411cf..fbd757bd5 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -7,7 +7,7 @@ #include "z_en_sellnuts.h" #include "objects/object_dnt/object_dnt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnSellnuts*)thisx) @@ -107,7 +107,7 @@ static AnimationInfoS sAnimationInfo[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -381,7 +381,7 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { } } else if (((this->actor.xzDistToPlayer < 80.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 80.0f, PLAYER_IA_MOONS_TEAR); if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { @@ -519,7 +519,7 @@ void func_80ADBD64(EnSellnuts* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_338 &= ~2; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_34C = 8; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 8); this->actionFunc = func_80ADBE80; @@ -876,7 +876,7 @@ void func_80ADCD3C(EnSellnuts* this, PlayState* play) { this->unk_338 |= 2; this->unk_338 |= 1; this->unk_340 = 0x626; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -1.0f; this->actor.draw = EnSellnuts_Draw; this->unk_34A = 50; @@ -1003,7 +1003,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { this->actor.gravity = 0.0f; this->actor.draw = NULL; this->unk_34C = 20; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_35C = 1.0f; this->unk_358 = 1.0f; this->unk_354 = 1.0f; @@ -1013,7 +1013,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { } else { this->unk_338 |= 2; this->unk_338 &= ~1; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.gravity = 0.0f; this->actor.draw = NULL; this->unk_34C = 4; diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 6c232e2f8..158c80087 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -8,7 +8,7 @@ #include "z_en_shn.h" #include "z64snap.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnShn*)thisx) @@ -354,7 +354,7 @@ void EnShn_Init(Actor* thisx, PlayState* play) { } else { func_80AE615C(this, 2); } - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; Actor_SetScale(&this->actor, 0.01f); this->unk_2E0 = 0; this->unk_2D8 = 0; diff --git a/src/overlays/actors/ovl_En_Si/z_en_si.c b/src/overlays/actors/ovl_En_Si/z_en_si.c index cf44d641b..b75de6359 100644 --- a/src/overlays/actors/ovl_En_Si/z_en_si.c +++ b/src/overlays/actors/ovl_En_Si/z_en_si.c @@ -6,7 +6,7 @@ #include "z_en_si.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_200) #define THIS ((EnSi*)thisx) diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 5057777d4..9d57b9638 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Encount4/z_en_encount4.h" #include "objects/object_skb/object_skb.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSkb*)thisx) @@ -288,7 +288,7 @@ void func_80994DA8(EnSkb* this, PlayState* play) { void func_80994E2C(EnSkb* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR); this->unk_3D0 = 0; this->unk_3DE = 0; @@ -300,7 +300,7 @@ void func_80994E94(EnSkb* this, PlayState* play) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } Math_ApproachZeroF(&this->actor.shape.yOffset, 1.0f, 800.0f); @@ -351,8 +351,8 @@ void func_80995068(EnSkb* this, PlayState* play) { this->actionFunc = func_80995190; this->actor.speed = 0.0f; } else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) { - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.colChkInfo.mass = MASS_HEAVY; func_80995A30(this); @@ -388,8 +388,8 @@ void func_80995190(EnSkb* this, PlayState* play) { } void func_80995244(EnSkb* this, PlayState* play) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->unk_3E2 = 0; switch (this->unk_3DE) { @@ -423,8 +423,8 @@ void func_809952D8(EnSkb* this) { void func_8099533C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f)) { this->actor.hintId = TATL_HINT_ID_STALCHILD; @@ -445,8 +445,8 @@ void func_809953E8(EnSkb* this) { void func_8099544C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f)) { this->actor.hintId = TATL_HINT_ID_STALCHILD; @@ -482,8 +482,8 @@ void func_8099556C(EnSkb* this, PlayState* play) { this->actor.shape.rot.x = Math_SinS(this->unk_3D4 * sp26) * 20000.0f; if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80994F7C(this, play); } else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && (this->actor.xzDistToPlayer < 200.0f) && (this->skelAnime.curFrame > 24.0f) && (this->skelAnime.curFrame < 28.0f)) { @@ -538,7 +538,7 @@ void func_809958F4(EnSkb* this) { Animation_Change(&this->skelAnime, &object_skb_Anim_003584, -1.0f, Animation_GetLastFrame(&object_skb_Anim_003584), 0.0f, ANIMMODE_ONCE, -4.0f); this->unk_3E4 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE); this->unk_3DE = 1; @@ -569,8 +569,8 @@ void func_80995A30(EnSkb* this) { void func_80995A8C(EnSkb* this, PlayState* play) { if (Player_GetMask(play) == PLAYER_MASK_CAPTAIN) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.colChkInfo.mass = MASS_HEAVY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); @@ -735,7 +735,7 @@ void func_809961E4(EnSkb* this, PlayState* play) { this->actor.speed = -6.0f; } this->unk_3E4 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD); this->unk_3DE = 7; this->actionFunc = func_80996284; @@ -795,7 +795,7 @@ void func_809963D8(EnSkb* this, PlayState* play) { void func_80996474(EnSkb* this) { this->unk_3D0 = 0; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_809964A0; } diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c index 98da2425d..79dfe2ced 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -7,7 +7,7 @@ #include "z_en_slime.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_200) #define THIS ((EnSlime*)thisx) @@ -816,7 +816,7 @@ f32 EnSlime_SnapIceBlockPosition(f32 currentPosition, f32 homePosition) { */ void EnSlime_SetupSpawnIceBlock(EnSlime* this) { this->collider.base.acFlags &= ~AC_ON; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->drawDmgEffAlpha = 0.0f; this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; @@ -853,7 +853,7 @@ void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play) { this->actor.colorFilterTimer = 0; this->collider.base.acFlags |= AC_ON; this->iceBlockTimer = ICE_BLOCK_UNUSED; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.gravity = -2.0f; EnSlime_SetupIdle(this); } @@ -941,7 +941,7 @@ void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play) { if (this->iceBlockTimer == ICE_BLOCK_UNUSED) { this->collider.base.acFlags |= AC_ON; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_10; EnSlime_SetupIdle(this); } @@ -1003,7 +1003,7 @@ void EnSlime_Revive(EnSlime* this, PlayState* play) { this->timer++; if (this->timer == 28) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags |= AC_ON; this->actor.shape.rot.y = this->actor.home.rot.y; EnSlime_SetupMoveInDirection(this); @@ -1065,7 +1065,7 @@ void EnSlime_UpdateDamage(EnSlime* this, PlayState* play) { if (Actor_ApplyDamage(&this->actor) == 0) { Actor_SetDropFlag(&this->actor, &this->collider.info); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_BLUNT) { diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index b935b46d4..f030885b1 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -7,7 +7,7 @@ #include "z_en_snowman.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSnowman*)thisx) @@ -241,7 +241,7 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) { } else { Player* player = GET_PLAYER(play); - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; Collider_InitAndSetCylinder(play, &this->collider, thisx, &sSnowballCylinderInit); thisx->world.rot.y = Actor_WorldYawTowardActor(thisx, &player->actor); thisx->velocity.y = (Actor_WorldDistXZToActor(thisx, &player->actor) * 0.035f) + -5.0f; @@ -603,7 +603,7 @@ void EnSnowman_SetupMelt(EnSnowman* this) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 50); this->collider.base.acFlags &= ~AC_ON; this->work.timer = 50; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; this->actor.scale.y = this->actor.scale.x; this->actor.speed = 0.0f; @@ -787,7 +787,7 @@ void EnSnowman_SetupSplitDoNothing(EnSnowman* this) { this->combineState = EN_SNOWMAN_COMBINE_STATE_NO_ABSORPTION; } - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); if ((this->actor.parent != NULL) && (((EnSnowman*)this->actor.parent)->actionFunc == EnSnowman_SplitDoNothing)) { if ((this->actor.child != NULL) && (((EnSnowman*)this->actor.child)->actionFunc == EnSnowman_SplitDoNothing)) { EnSnowman_SetupKill((EnSnowman*)this->actor.parent); @@ -822,7 +822,7 @@ void EnSnowman_Kill(EnSnowman* this, PlayState* play) { * Creates a small split Eeno with a certain Y-rotation and at a certain offset from basePos. */ void EnSnowman_CreateSplitEeno(EnSnowman* this, Vec3f* basePos, s32 yRot) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); this->actor.shape.rot.y = yRot; this->actor.world.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index ebe1589c3..9c197223c 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -9,7 +9,7 @@ #include "objects/object_masterzoora/object_masterzoora.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSob1*)thisx) @@ -1482,7 +1482,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnSob1_WaitForBlink; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 26f5b4e24..605761711 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -8,7 +8,7 @@ #include "objects/object_ssh/object_ssh.h" #include "objects/object_st/object_st.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnSsh*)thisx) diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index dd8d21f65..2491ec4ed 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -9,7 +9,9 @@ #include "objects/object_st/object_st.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000 | ACTOR_FLAG_1000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000 | \ + ACTOR_FLAG_1000000) #define THIS ((EnSt*)thisx) @@ -621,7 +623,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (this->actor.colChkInfo.damageEffect) { case 4: diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index c19dc5b36..97aa3ed7b 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -9,7 +9,7 @@ #include "z_en_sth.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnSth*)thisx) @@ -161,7 +161,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnSth_MoonLookingIdle; this->sthFlags |= STH_FLAG_DISABLE_HEAD_TRACK; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->actor.uncullZoneForward = 800.0f; break; @@ -453,7 +453,7 @@ void EnSth_MoonLookingIdle(EnSth* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnSth_HandleMoonLookingConversation; - } else if (EnSth_CanSpeakToPlayer(this, play) || this->actor.isTargeted) { + } else if (EnSth_CanSpeakToPlayer(this, play) || this->actor.isLockedOn) { if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) { this->actor.textId = 0x1130; // Huh? The Moon... } else { @@ -607,7 +607,7 @@ void EnSth_UpdateOceansideSpiderHouseWaitForTokens(Actor* thisx, PlayState* play if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) { this->actor.update = EnSth_Update; this->actor.draw = EnSth_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } @@ -665,7 +665,7 @@ void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play) { (Inventory_GetSkullTokenCount(play->sceneId) < SPIDER_HOUSE_TOKENS_REQUIRED)) { this->actor.update = EnSth_UpdateOceansideSpiderHouseWaitForTokens; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } } diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index 723f7634f..66b87c998 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -6,7 +6,7 @@ #include "z_en_sth2.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnSth2*)thisx) diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index 534f77cb4..c0d9e1197 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -6,7 +6,7 @@ #include "z_en_stone_heishi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) #define THIS ((EnStoneheishi*)thisx) @@ -111,7 +111,7 @@ void EnStoneheishi_Init(Actor* thisx, PlayState* play) { SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index fae0a1246..8be9f715a 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -7,7 +7,7 @@ #include "z_en_stop_heishi.h" #include "z64quake.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnStopheishi*)thisx) @@ -114,7 +114,7 @@ void EnStopheishi_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.gravity = -3.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->rotYTarget = this->actor.world.rot.y; diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index b88f7f6c6..29f53ae7c 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -10,7 +10,7 @@ #include "overlays/actors/ovl_En_Elf/z_en_elf.h" #include "overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnSuttari*)thisx) @@ -993,7 +993,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, &object_boj_Anim_00071C, this->jointTable, this->morphTable, 16); this->actor.draw = EnSuttari_Draw; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (play->sceneId == SCENE_IKANA) { this->flags1 |= 1; if ((gSaveContext.save.day == 1) || (gSaveContext.save.day == 2)) { @@ -1157,10 +1157,10 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1181,17 +1181,17 @@ void func_80BAD004(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A3A, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 200.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 200.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } Actor_MoveWithGravity(&this->actor); @@ -1308,10 +1308,10 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1324,7 +1324,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -1346,10 +1346,10 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; scheduleOutput.result = 0; } else { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); @@ -1361,7 +1361,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, 0x2A02, &this->actor); this->actionFunc = func_80BAD130; - } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { + } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } } @@ -1508,7 +1508,7 @@ void EnSuttari_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; EnSuttari_GetPaths(this, play); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = func_80BAC6E8; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index 3842afa88..8cab11988 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_st/object_st.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnSw*)thisx) @@ -674,7 +674,7 @@ s32 func_808DA08C(EnSw* this, PlayState* play) { } else if (!func_808D90C4(this)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!ENSW_GET_3(&this->actor)) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 3); } @@ -1165,7 +1165,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { break; case 1: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; if (this->actor.world.rot.z < 0) { @@ -1186,7 +1186,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { case 2: case 3: - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; if (this->actor.world.rot.z < 0) { diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index bfb3081de..d3b88bb2d 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -13,7 +13,7 @@ #include "overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h" #include "overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnSyatekiMan*)thisx) @@ -205,7 +205,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { Path* path = &play->setupPathList[SG_MAN_GET_PATH_INDEX(&this->actor)]; s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex]; - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; Actor_SetScale(&this->actor, 0.01f); if (play->sceneId == SCENE_SYATEKI_MORI) { SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHeadScratchLoopAnim, this->jointTable, diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index 0a324592b..364d8874b 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -8,7 +8,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_tab/object_tab.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTab*)thisx) @@ -372,7 +372,7 @@ s32 func_80BE0F04(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3f_Copy(&this->actor.world.pos, &D_80BE1AF0); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1AFC); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 30; @@ -389,7 +389,7 @@ s32 func_80BE0FC4(EnTab* this, PlayState* play, ScheduleOutput* scheduleOutput) Math_Vec3f_Copy(&this->actor.world.pos, &D_80BE1B04); Math_Vec3s_Copy(&this->actor.world.rot, &D_80BE1B10); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; SubS_SetOfferMode(&this->unk_2FC, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2FC |= (0x40 | 0x20); this->unk_30C = 0x50; @@ -476,11 +476,11 @@ void func_80BE127C(EnTab* this, PlayState* play) { if (!Schedule_RunScript(play, D_80BE18D0, &sp18) || ((this->unk_1D8 != sp18.result) && !func_80BE1060(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; sp18.result = 0; } else { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } this->unk_1D8 = sp18.result; func_80BE1224(this, play); diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c index 9bc0cd1b9..a2c39f16b 100644 --- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c +++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c @@ -6,7 +6,7 @@ #include "z_en_takaraya.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTakaraya*)thisx) @@ -30,7 +30,7 @@ ActorInit En_Takaraya_InitVars = { // static InitChainEntry sInitChain[] = { static InitChainEntry D_80ADFB20[] = { - ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Talk/z_en_talk.c b/src/overlays/actors/ovl_En_Talk/z_en_talk.c index 1dac7592b..832a1313e 100644 --- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c +++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c @@ -6,7 +6,7 @@ #include "z_en_talk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTalk*)thisx) @@ -32,7 +32,7 @@ void EnTalk_Init(Actor* thisx, PlayState* play) { EnTalk* this = THIS; s8 targetMode = this->actor.home.rot.x - 0x1; - if ((targetMode >= 0) && (targetMode < 7)) { + if ((targetMode >= TARGET_MODE_0) && (targetMode < TARGET_MODE_7)) { this->actor.targetMode = targetMode; } @@ -57,7 +57,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) { } if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) || - this->actor.isTargeted) { + this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 120.0f); } } diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index fcf0d8985..9faa6664a 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -7,7 +7,7 @@ #include "z_en_talk_gibud.h" #include "z64rumble.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnTalkGibud*)thisx) @@ -228,7 +228,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { s32 i; Actor_ProcessInitChain(&this->actor, sInitChain); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.hintId = TATL_HINT_ID_GIBDO; this->actor.textId = 0; @@ -383,7 +383,7 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupGrab(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_START); this->grabDamageTimer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->grabState = EN_TALK_GIBUD_GRAB_START; this->actionFunc = EnTalkGibud_Grab; } @@ -425,7 +425,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_END); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->grabState = EN_TALK_GIBUD_GRAB_RELEASE; this->grabDamageTimer = 0; } @@ -569,8 +569,8 @@ void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) { if ((this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) && (this->type == EN_TALK_GIBUD_TYPE_GIBDO)) { this->actor.hintId = TATL_HINT_ID_REDEAD; - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); SkelAnime_InitFlex(play, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable, GIBDO_LIMB_MAX); this->type = EN_TALK_GIBUD_TYPE_REDEAD; @@ -586,7 +586,7 @@ void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupDead(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_DEATH); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD); this->deathTimer = 0; this->actionFunc = EnTalkGibud_Dead; @@ -612,7 +612,7 @@ void EnTalkGibud_Dead(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupRevive(EnTalkGibud* this) { Animation_Change(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f, Animation_GetLastFrame(&gGibdoRedeadDeathAnim), 0.0f, ANIMMODE_ONCE, -8.0f); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_REVERSE); this->deathTimer = 0; this->actor.world.rot.y = this->actor.shape.rot.y; @@ -852,7 +852,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { void EnTalkGibud_SetupDisappear(EnTalkGibud* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_IDLE); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->disappearanceTimer = 40; this->actionFunc = EnTalkGibud_Disappear; } @@ -934,15 +934,15 @@ void EnTalkGibud_CheckForGibdoMask(EnTalkGibud* this, PlayState* play) { (this->actionFunc != EnTalkGibud_Damage) && (this->actionFunc != EnTalkGibud_Talk)) { if (this->actionFunc != EnTalkGibud_PassiveIdle) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_8 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= (ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; EnTalkGibud_SetupPassiveIdle(this); } } else if (Player_GetMask(play) != PLAYER_MASK_GIBDO) { - this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1); - this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1); + this->actor.flags &= ~(ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_TARGETABLE); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); if (this->type == EN_TALK_GIBUD_TYPE_REDEAD) { this->actor.hintId = TATL_HINT_ID_REDEAD; } else { diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 798844bb8..876b433d4 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -6,7 +6,7 @@ #include "z_en_tanron1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron1*)thisx) @@ -37,7 +37,7 @@ static s32 sPad = 0; void EnTanron1_Init(Actor* thisx, PlayState* play) { EnTanron1* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!ENTANRON1_GET_100(&this->actor)) { this->unk_144 = 0; } else { diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c index 785308dad..a539e82f5 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -9,7 +9,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_boss04/object_boss04.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron2*)thisx) @@ -124,7 +124,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { EnTanron2* this = THIS; D_80BB8450 = (Boss04*)this->actor.parent; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (this->actor.params == 100) { this->actor.update = func_80BB7B90; @@ -138,7 +138,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { this->actor.draw = NULL; this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 5; + this->actor.targetMode = TARGET_MODE_5; Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); @@ -207,7 +207,7 @@ void func_80BB6B80(EnTanron2* this) { this->actor.velocity.x = 0.0f; this->unk_158 = 0; this->unk_159 = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->collider1.dim.radius = 30; this->collider1.dim.height = 50; this->collider1.dim.yShift = -25; @@ -428,10 +428,10 @@ void func_80BB7578(EnTanron2* this, PlayState* play) { func_80BB6B80(this); this->unk_158 = 1; Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_DAMAGE); - if ((player->targetedActor != NULL) && (&this->actor != player->targetedActor)) { - player->targetedActor = &this->actor; - play->actorCtx.targetContext.arrowPointedActor = &this->actor; - play->actorCtx.targetContext.targetedActor = &this->actor; + if ((player->lockOnActor != NULL) && (&this->actor != player->lockOnActor)) { + player->lockOnActor = &this->actor; + play->actorCtx.targetCtx.fairyActor = &this->actor; + play->actorCtx.targetCtx.lockOnActor = &this->actor; } } else { this->unk_154 = 15; @@ -550,10 +550,10 @@ void EnTanron2_Update(Actor* thisx, PlayState* play) { if (ABS_ALT(BINANG_SUB(D_80BB8450->actor.yawTowardsPlayer, atan)) > 0x3000) { this->unk_159 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { this->unk_159 = 1; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; } } } diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index 81a4ac2af..2c7a9fd55 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_Boss_03/z_boss_03.h" #include "objects/object_boss03/object_boss03.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTanron3*)thisx) @@ -117,7 +117,7 @@ void EnTanron3_Init(Actor* thisx, PlayState* play) { this->morphTable, GYORG_SMALL_FISH_LIMB_MAX); Actor_SetScale(&this->actor, 0.02f); EnTanron3_SetupLive(this, play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->currentRotationAngle = Rand_ZeroFloat(500000.0f); this->waterSurfaceYPos = 430.0f; sGyorg = (Boss03*)this->actor.parent; diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index d8b061fd4..ab190b38c 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -50,7 +50,7 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) { SkelAnime_InitFlex(play, &this->skelAnime, &gSeagullSkel, &gSeagullFlapAnim, this->jointTable, this->morphTable, SEAGULL_LIMB_RIGHT_WING_MAX); - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; thisx->speed = 3.0f + KREG(48); thisx->uncullZoneForward = 10000.0f + KREG(70); this->randRollTimer = Rand_ZeroFloat(10.0f); diff --git a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c index 875f36a61..8ed4c36f3 100644 --- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c +++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c @@ -6,7 +6,7 @@ #include "z_en_tanron6.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnTanron6*)thisx) @@ -72,7 +72,7 @@ void EnTanron6_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 19.0f); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; EnTanron6_DoNothing(this); } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index b5742b7d6..e897ffefb 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -353,7 +353,7 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) { Actor* hideoutDoor = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_IKNV_OBJ); if (hideoutDoor != NULL) { - this->player.targetedActor = hideoutDoor; + this->player.lockOnActor = hideoutDoor; } } if (this->unk_D78->unk_1 != 0) { @@ -377,7 +377,7 @@ s32 func_80A3EAF8(EnTest3* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->csId = CS_ID_GLOBAL_TALK; CutsceneManager_Queue(this->csId); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; } return 1; } @@ -389,7 +389,7 @@ s32 func_80A3EB8C(EnTest3* this, PlayState* play) { Actor* hideoutObject = SubS_FindActor(play, NULL, ACTORCAT_ITEMACTION, ACTOR_OBJ_NOZOKI); if (hideoutObject != NULL) { - this->player.targetedActor = hideoutObject; + this->player.lockOnActor = hideoutObject; } play->msgCtx.msgMode = 0x44; return 1; @@ -654,7 +654,7 @@ s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul s32 func_80A3F73C(EnTest3* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { func_80A3E7E0(this, func_80A4084C); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; this->player.stateFlags2 &= ~PLAYER_STATE2_40000; D_80A41D5C = true; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { @@ -677,7 +677,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { func_80A3F5A4(this, play); } this->player.actor.textId = this->unk_D78->textId; - this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } return false; } @@ -1007,7 +1007,7 @@ void func_80A4084C(EnTest3* this, PlayState* play) { } else { func_80A3E7E0(this, func_80A40678); } - this->player.targetedActor = NULL; + this->player.lockOnActor = NULL; } } else if (func_80A3ED24(this, play)) { func_80A3E7E0(this, func_80A40908); @@ -1017,7 +1017,7 @@ void func_80A4084C(EnTest3* this, PlayState* play) { void func_80A40908(EnTest3* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { func_80A3E7E0(this, func_80A4084C); - this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.lockOnActor = &GET_PLAYER(play)->actor; SET_WEEKEVENTREG(WEEKEVENTREG_51_08); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); @@ -1025,7 +1025,7 @@ void func_80A40908(EnTest3* this, PlayState* play) { Actor_OfferTalkExchange(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); this->unk_D78 = &D_80A41854[6]; this->player.actor.textId = this->unk_D78->textId; - this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } } @@ -1055,7 +1055,7 @@ void EnTest3_Update(Actor* thisx, PlayState* play2) { play->actorCtx.flags &= ~ACTORCTX_FLAG_7; this->player.actor.draw = EnTest3_Draw; D_80A41D48 = false; - this->player.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->player.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_506) && !((this->player.actor.category == ACTORCAT_PLAYER) && ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)))) { @@ -1196,7 +1196,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL (this->player.bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + this->player.leftHandWorld.pos.z) / 2.0f; } } else if (limbIndex == OBJECT_TEST3_LIMB_0B) { - Actor* actor730 = this->player.targetedActor; + Actor* actor730 = this->player.lockOnActor; if ((*dList1 != NULL) && this->player.currentMask && !(this->player.stateFlags2 & PLAYER_STATE2_1000000)) { // this->player.currentMask != PLAYER_MASK_NONE diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c index 0672bd4bf..efdc48713 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -7,7 +7,7 @@ #include "z_en_tg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTg*)thisx) diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index c3cdc7e5e..3671693c7 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -8,7 +8,8 @@ #include "z_en_thiefbird.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000) #define THIS ((EnThiefbird*)thisx) @@ -641,7 +642,7 @@ void func_80C11D14(EnThiefbird* this, PlayState* play) { } void func_80C11DC0(EnThiefbird* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80C11DF0; this->actor.gravity = -0.5f; } @@ -834,7 +835,7 @@ void func_80C124B0(EnThiefbird* this, PlayState* play) { } void func_80C126A8(EnThiefbird* this) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->collider.base.acFlags &= ~AC_ON; this->actionFunc = func_80C126D8; } diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 5243b5c47..ded290262 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -163,7 +163,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) { } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) || CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_OfferTalk(&this->actor, play, 110.0f); } } diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c index dbf446aa5..bf861c2da 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "objects/object_tite/object_tite.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200) #define THIS ((EnTite*)thisx) @@ -163,7 +163,7 @@ void EnTite_Init(Actor* thisx, PlayState* play) { if (this->actor.params == ENTITE_MINUS_3) { this->actor.params = ENTITE_MINUS_2; this->unk_2BE = 240; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.shape.yOffset = -3000.0f; this->actor.shape.shadowDraw = NULL; func_80895A10(this); @@ -353,7 +353,7 @@ void func_8089408C(EnTite* this, PlayState* play) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.velocity.y = 10.0f; } else { this->actor.velocity.y = 8.0f; @@ -640,7 +640,7 @@ void func_80895020(EnTite* this, PlayState* play) { this->collider.base.acFlags &= ~AC_ON; this->actor.colorFilterTimer = 0; SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_TEKU_DEAD); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; this->unk_2BA = 1; Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, this->unk_2BE); @@ -929,7 +929,7 @@ void func_80895E28(EnTite* this, PlayState* play) { func_800B0DE0(play, &sp44, &sp38, &D_80896B44, &D_80896B3C, &D_80896B40, 500, 50); if (Math_StepToF(&this->actor.shape.yOffset, 0.0f, 200.0f)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.world.rot.y = this->actor.shape.rot.y; this->collider.base.acFlags |= AC_ON; func_808945EC(this); @@ -1022,7 +1022,7 @@ void func_80895FF8(EnTite* this, PlayState* play) { } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->collider.base.acFlags & AC_ON) && (this->actor.colChkInfo.health != 0) && (play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f))) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; if (this->actor.shape.yOffset < 0.0f) { this->actor.shape.yOffset = 0.0f; this->actor.shape.shadowDraw = ActorShadow_DrawCircle; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index ccc5e4489..61540eec0 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/object_tk/object_tk.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTk*)thisx) @@ -218,7 +218,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) { } if ((this->unk_2B0 == 1) || (this->unk_2B0 == 3)) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); this->actor.update = func_80AEF2C8; this->actor.draw = NULL; return; @@ -231,7 +231,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) { this->unk_318 = 0; this->unk_2D4 = -1; Actor_SetScale(&this->actor, 0.01f); - this->actor.targetMode = 1; + this->actor.targetMode = TARGET_MODE_1; this->actor.colChkInfo.mass = MASS_IMMOVABLE; if (this->unk_2B0 == 2) { @@ -358,9 +358,9 @@ void func_80AECB6C(EnTk* this, PlayState* play) { if (!temp4 && (this->unk_3CC != 0)) { this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (temp4 && (this->unk_3CC == 0)) { - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.draw = EnTk_Draw; } @@ -368,7 +368,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { func_80AECE0C(this, play); if (this->unk_3CE & 8) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; } } @@ -1074,7 +1074,7 @@ s32 func_80AEEA4C(EnTk* this, PlayState* play) { ret = 3; } else if (this->actor.xyzDistToPlayerSq < SQ(60.0f)) { ret = 0; - } else if (this->actor.isTargeted || (play->actorCtx.targetContext.unk_94 == &this->actor) || + } else if (this->actor.isLockedOn || (play->actorCtx.targetCtx.arrowPointedActor == &this->actor) || (this->actor.xyzDistToPlayerSq < SQ(80.0f))) { ret = 1; } else { diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 39ac19dba..c5fdf30af 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -7,7 +7,7 @@ #include "z_en_toto.h" #include "objects/object_zm/object_zm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnToto*)thisx) @@ -89,7 +89,7 @@ static EnTotoActionFunc D_80BA501C[] = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; static EnTotoText D_80BA502C[] = { diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index d61786e6f..bf5a0900a 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -8,7 +8,7 @@ #include "objects/object_trt/object_trt.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTrt*)thisx) @@ -1577,7 +1577,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->flags |= ENTRT_GIVEN_MUSHROOM; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnTrt_GetCutscenes(EnTrt* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index e56369ce4..40d1946fc 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -7,7 +7,7 @@ #include "z_en_trt2.h" #include "objects/object_trt/object_trt.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnTrt2*)thisx) @@ -240,7 +240,7 @@ void func_80AD381C(EnTrt2* this, PlayState* play) { this->actor.world.pos.y -= 50.0f; this->unk_3D9 = 0; this->unk_3B2 = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; } } else { @@ -701,7 +701,7 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) { s16 sp1E = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; Player* player = GET_PLAYER(play); - if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isTargeted && + if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isLockedOn && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_FIERCE_DEITY))) { this->actor.speed = 0.0f; @@ -710,7 +710,7 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) { return true; } - if (func_80AD4C4C(this) && this->actor.isTargeted && (sp1E < 0x4000) && (sp1E > -0x4000)) { + if (func_80AD4C4C(this) && this->actor.isLockedOn && (sp1E < 0x4000) && (sp1E > -0x4000)) { Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play); } @@ -801,7 +801,7 @@ void func_80AD4FE4(EnTrt2* this, PlayState* play) { } static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 3, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_3, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index ba1a8c983..a5938d4cf 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -7,7 +7,7 @@ #include "z_en_tru.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTru*)thisx) @@ -1046,7 +1046,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { } if (ret == true) { - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.draw = NULL; this->unk_378 = NULL; this->unk_34E = 0; @@ -1144,7 +1144,7 @@ void EnTru_Init(Actor* thisx, PlayState* play) { this->unk_384 = 1; } - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.008f); this->unk_34E = 0; diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index f877a26a8..0297339d9 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -7,7 +7,7 @@ #include "z_en_tru_mt.h" #include "overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnTruMt*)thisx) @@ -432,7 +432,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->collider.dim.worldSphere.radius = 22; this->actor.colChkInfo.damageTable = &sDamageTable; this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), ENTRUMT_PATH_INDEX_NONE); - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.008f); Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c index 6f27da823..f95b1a8e8 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -8,7 +8,7 @@ #include "z64snap.h" #include "objects/object_tsn/object_tsn.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnTsn*)thisx) @@ -83,7 +83,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { this->actor.update = func_80AE0F84; this->actor.destroy = NULL; this->actor.draw = NULL; - this->actor.targetMode = 7; + this->actor.targetMode = TARGET_MODE_7; switch (ENTSN_GET_F(&this->actor)) { case ENTSN_F_0: @@ -536,7 +536,7 @@ void func_80AE0C88(EnTsn* this, PlayState* play) { this->unk_220 |= 4; ENTSN_SET_Z(&this->unk_1D8->actor, true); } - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 1000.0f); } } @@ -553,7 +553,7 @@ void func_80AE0D78(EnTsn* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80AE0D10; this->unk_220 |= 4; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 1000.0f); } } diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c index 51dee7da0..cc1df3cdb 100644 --- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c +++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c @@ -236,7 +236,7 @@ void EnTuboTrap_Idle(EnTuboTrap* this, PlayState* play) { if ((startingRotation == 0) || (this->actor.playerHeightRel <= (startingRotation * 10.0f))) { func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); currentHeight = this->actor.world.pos.y; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); // always update and can target + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10); // always update and can target transformationHeight = sTransformationHeight[player->transformation]; diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c index 68f7411f3..1866a2381 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -9,7 +9,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_vm/object_vm.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_400) #define THIS ((EnVm*)thisx) diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index 2d9a12b54..29f5793d2 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Encount1/z_en_encount1.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnWallmas*)thisx) @@ -219,7 +219,7 @@ void EnWallmas_ThawIfFrozen(EnWallmas* this, PlayState* play) { void EnWallmas_TimerInit(EnWallmas* this, PlayState* play) { Player* player = GET_PLAYER(play); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_20; this->timer = 130; this->actor.velocity.y = 0.0f; @@ -270,7 +270,7 @@ void EnWallmas_SetupDrop(EnWallmas* this, PlayState* play) { this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; this->actor.world.rot.y = this->actor.shape.rot.y; this->actor.floorHeight = player->actor.floorHeight; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_20; this->actionFunc = EnWallmas_Drop; } @@ -504,7 +504,7 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { void EnWallmas_ProximityOrSwitchInit(EnWallmas* this) { this->timer = 0; this->actor.draw = NULL; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_PROXIMITY) { this->actionFunc = EnWallmas_WaitForProximity; } else { @@ -563,7 +563,7 @@ void EnWallmas_UpdateDamage(EnWallmas* this, PlayState* play) { if (Actor_ApplyDamage(&this->actor) == 0) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_REVERSE); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else if (this->actor.colChkInfo.damage != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE); } diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c index fd68a22ce..b5603e613 100644 --- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c +++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c @@ -7,7 +7,7 @@ #include "z_en_warp_uzu.h" #include "objects/object_warp_uzu/object_warp_uzu.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnWarpUzu*)thisx) @@ -65,7 +65,7 @@ void EnWarpUzu_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitAndSetCylinder(play, &this->collider, thisx, &sCylinderInit); - thisx->targetMode = 0; + thisx->targetMode = TARGET_MODE_0; func_80A66208(this, play); } diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index e4cb566ab..cbb095279 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -8,7 +8,7 @@ #include "z_en_warp_tag.h" #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnWarptag*)thisx) @@ -52,7 +52,7 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->dyna.actor, 0.0f); if (WARPTAG_GET_3C0_MAX(thisx) == WARPTAG_3C0_MAX) { - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (WARPTAG_GET_INVISIBLE(&this->dyna.actor)) { this->actionFunc = EnWarpTag_WaitForPlayer; diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index c8ec8f8c4..6901fbffd 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -16,7 +16,7 @@ #include "objects/object_water_effect/object_water_effect.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((EnWaterEffect*)thisx) @@ -90,7 +90,7 @@ void EnWaterEffect_Init(Actor* thisx, PlayState* play) { s32 pad; EnWaterEffect* this = THIS; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_DC4 = Rand_ZeroFloat(100.0f); if (this->actor.params == ENWATEREFFECT_TYPE_FALLING_ROCK_SPAWNER) { diff --git a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c index 83cf47291..221ff557c 100644 --- a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c +++ b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c @@ -6,7 +6,7 @@ #include "z_en_wdhand.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnWdhand*)thisx) diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index 84f621915..97c381beb 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -67,7 +67,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { s32 pathID; // flag: is targetable. Should do nothing as not set by default above - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; switch (WEATHER_TAG_TYPE(&this->actor)) { case WEATHERTAG_TYPE_UNK0: diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index 6e31192b2..b1332885e 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_400) #define THIS ((EnWf*)thisx) @@ -527,7 +527,7 @@ void func_80990F0C(EnWf* this) { this->collider2.base.acFlags &= ~AC_ON; this->actor.shape.shadowScale = 0.0f; this->actor.scale.y = 0.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2A0 = 60; this->actionFunc = func_80990F50; } @@ -553,7 +553,7 @@ void func_80990F50(EnWf* this, PlayState* play) { void func_80990FC8(EnWf* this) { Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f); this->unk_2A0 = 5; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80991040; } @@ -1164,7 +1164,7 @@ void func_80992D6C(EnWf* this) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -6.0f; } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_2A0 = 25; Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD); this->actionFunc = func_80992E0C; diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 9bd3a0bcc..2d7d12782 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -9,9 +9,9 @@ #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" #include "overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h" -#define FLAGS \ - (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_100000 | \ - ACTOR_FLAG_CANT_LOCK_ON | ACTOR_FLAG_80000000) +#define FLAGS \ + (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_IGNORE_QUAKE | \ + ACTOR_FLAG_100000 | ACTOR_FLAG_CANT_LOCK_ON | ACTOR_FLAG_80000000) #define THIS ((EnWiz*)thisx) @@ -330,7 +330,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { this->platformLightAlpha = 0; this->alpha = 255; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->unk_450 = 1.0f; this->actor.shape.yOffset = 700.0f; Collider_InitAndSetJntSph(play, &this->ghostColliders, &this->actor, &sJntSphInit, this->ghostColliderElements); @@ -1011,7 +1011,7 @@ void EnWiz_SetupDisappear(EnWiz* this) { Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR); Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); this->actor.world.rot.y += this->rotationalVelocity; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_Disappear; } @@ -1051,7 +1051,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) { this->ghostColliders.elements[0].info.bumper.dmgFlags = 0x1000202; } - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_SetupAppear; } } @@ -1066,7 +1066,7 @@ void EnWiz_SetupDamaged(EnWiz* this, PlayState* play) { Enemy_StartFinishingBlow(play, &this->actor); Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DEAD); this->timer = 0; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } else { Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DAMAGE); } diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index 12d06e487..02aa83ab8 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_En_Wiz/z_en_wiz.h" #include "objects/object_wiz/object_wiz.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON) #define THIS ((EnWizFire*)thisx) @@ -74,10 +74,10 @@ void EnWizFire_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->type = EN_WIZ_FIRE_GET_TYPE(&this->actor); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; this->wallCheckTimer = 10; this->alpha = 255.0f; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; if (!Player_HasMirrorShieldEquipped(play)) { this->collider.info.toucher.dmgFlags = 0x20000000; diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 037ca93d6..c9881a5e0 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -7,7 +7,7 @@ #include "z_en_yb.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) #define THIS ((EnYb*)thisx) @@ -120,7 +120,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) { } else { // else (night 6pm to midnight): wait to appear this->alpha = 0; this->actionFunc = EnYb_WaitForMidnight; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_04)) { @@ -396,7 +396,7 @@ void EnYb_WaitForMidnight(EnYb* this, PlayState* play) { this->alpha += 5; if (this->alpha > 250) { this->alpha = 255; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actionFunc = EnYb_Idle; } EnYb_EnableProximityMusic(this); @@ -407,11 +407,11 @@ void EnYb_Update(Actor* thisx, PlayState* play) { s32 pad; EnYb* this = THIS; - if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TARGETABLE)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } - if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TARGETABLE)) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c index e77aace23..1e813813e 100644 --- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c +++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c @@ -6,7 +6,7 @@ #include "z_en_zl1.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZl1*)thisx) diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index b89d6a5fb..95e8f2ceb 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -6,7 +6,7 @@ #include "z_en_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZo*)thisx) diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index c963df55b..b54986829 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -7,7 +7,7 @@ #include "z_en_zob.h" #include "objects/object_zob/object_zob.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZob*)thisx) diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index df67493d6..5d352e734 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -6,7 +6,7 @@ #include "z_en_zod.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZod*)thisx) diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 15c8a0017..2e99ccb7b 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -7,7 +7,7 @@ #include "z_en_zog.h" #include "objects/object_zog/object_zog.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZog*)thisx) diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index 632292857..662543774 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -144,8 +144,8 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { switch (ZORA_EGG_GET_TYPE(&this->actor)) { case ZORA_EGG_TYPE_00: this->actionFunc = func_80B320E0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.targetMode = 3; + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.targetMode = TARGET_MODE_3; break; case ZORA_EGG_TYPE_01: @@ -344,13 +344,13 @@ void func_80B320E0(EnZoraegg* this, PlayState* play) { Message_StartTextbox(play, 0x24B, &this->actor); } else { Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 60.0f); - if (this->actor.isTargeted) { + if (this->actor.isLockedOn) { Actor_OfferTalk(&this->actor, play, 110.0f); } } - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); - this->actor.targetMode = 3; + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + this->actor.targetMode = TARGET_MODE_3; func_80B31C40(this, play); } diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 19ecd207f..4be070d25 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -6,7 +6,7 @@ #include "z_en_zos.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_2000000) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) #define THIS ((EnZos*)thisx) diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index 8a02b3b8c..e9e86668a 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -8,7 +8,7 @@ #include "z64snap.h" #include "objects/object_zo/object_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZot*)thisx) @@ -96,7 +96,7 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { this->unk_2F4 = 0; this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.world.rot.z = this->actor.shape.rot.z = 0; - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.terminalVelocity = -4.0f; this->actor.gravity = -4.0f; diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c index cf8c30dc7..6342c38d3 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -8,7 +8,7 @@ #include "objects/object_zov/object_zov.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((EnZov*)thisx) diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c index c6f8f2560..dfcf7225e 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -7,7 +7,7 @@ #include "z_en_zow.h" #include "objects/object_zo/object_zo.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) #define THIS ((EnZow*)thisx) @@ -324,7 +324,7 @@ void EnZow_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.textId = 0; this->actor.world.rot.z = this->actor.shape.rot.z; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } void EnZow_Destroy(Actor* thisx, PlayState* play) { @@ -410,7 +410,7 @@ void func_80BDD350(EnZow* this, PlayState* play) { if (this->unk_2CA & 2) { Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_WATER); func_80BDCDA8(this, this->unk_2D0); - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->skelAnime.playSpeed = 0.0f; this->actor.velocity.y = -4.0f; } @@ -517,7 +517,7 @@ void func_80BDD6BC(EnZow* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER); func_80BDCDA8(this, this->unk_2D0); func_80BDD04C(this, 1, ANIMMODE_ONCE); - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.velocity.y = 0.0f; this->actionFunc = func_80BDD634; } else if (this->actor.depthInWater < 80.0f) { diff --git a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c index 0599e117d..0b554f665 100644 --- a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c +++ b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c @@ -6,7 +6,7 @@ #include "z_item_inbox.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ItemInbox*)thisx) diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index c7fbab2d6..12afce508 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -298,7 +298,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { Actor_SetScale(&this->dyna.actor, 0.01f); this->dyna.actor.scale.y = 0.02f; this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; break; case DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE: @@ -311,7 +311,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->oscillationTimer = 30; this->bounceOscillationScale = 0.0f; this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; - this->dyna.actor.targetMode = 3; + this->dyna.actor.targetMode = TARGET_MODE_3; break; default: diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index 09dbd8dab..5668021e3 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -7,7 +7,7 @@ #include "z_obj_ghaka.h" #include "objects/object_ghaka/object_ghaka.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_20) #define THIS ((ObjGhaka*)thisx) @@ -39,7 +39,7 @@ ActorInit Obj_Ghaka_InitVars = { static Vec3f D_80B3C960 = { 0.0f, 0.0f, 0.0f }; static InitChainEntry D_80B3C96C[] = { - ICHAIN_U8(targetMode, 0, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP), }; @@ -74,7 +74,7 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { func_80B3C29C(this); - } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) || this->dyna.actor.isTargeted) { + } else if ((this->dyna.actor.xzDistToPlayer < 100.0f) || this->dyna.actor.isLockedOn) { if ((yaw <= -0x5556) || (yaw >= 0x5556)) { Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play); if (player->transformation == PLAYER_FORM_GORON) { diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index 5201c1de8..6db03e1ca 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -7,7 +7,7 @@ #include "z_obj_hakaisi.h" #include "objects/object_hakaisi/object_hakaisi.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_20) #define THIS ((ObjHakaisi*)thisx) @@ -98,7 +98,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { } Actor_SetScale(&this->dyna.actor, 1.0f); - this->dyna.actor.targetMode = 0; + this->dyna.actor.targetMode = TARGET_MODE_0; this->dyna.actor.colChkInfo.health = 30; if (OBJHAKAISI_GET_FF(&this->dyna.actor) == 3) { this->dyna.actor.draw = NULL; @@ -208,7 +208,7 @@ void func_80B1456C(ObjHakaisi* this, PlayState* play) { void func_80B145F4(ObjHakaisi* this) { this->unk_19A = 0; this->dyna.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN); this->actionFunc = func_80B14648; } @@ -375,7 +375,7 @@ void func_80B151E0(ObjHakaisi* this, PlayState* play) { this->dyna.actor.destroy = func_80B15254; Actor_SetScale(&this->dyna.actor, 0.1f); this->dyna.actor.shape.yOffset = 100.0f; - this->dyna.actor.flags &= ~ACTOR_FLAG_1; + this->dyna.actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80B15264(this); } diff --git a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c index 5bf35d48d..c6529625c 100644 --- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c +++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c @@ -42,11 +42,11 @@ void ObjKinoko_Update(Actor* thisx, PlayState* play) { if (player->currentMask != PLAYER_MASK_SCENTS) { thisx->draw = NULL; thisx->hintId = TATL_HINT_ID_NONE; - thisx->flags &= ~ACTOR_FLAG_1; + thisx->flags &= ~ACTOR_FLAG_TARGETABLE; } else { thisx->draw = ObjKinoko_Draw; thisx->hintId = TATL_HINT_ID_MUSHROOM; - thisx->flags |= ACTOR_FLAG_1; + thisx->flags |= ACTOR_FLAG_TARGETABLE; if (Actor_HasParent(thisx, play)) { Flags_SetCollectible(play, OBJ_KINOKO_GET_FLAG(thisx)); Actor_Kill(thisx); diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index c40d03f6a..dddbaa256 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -42,19 +42,19 @@ void ObjMoonStone_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.3f); this->unk194 = (this->actor.params & 0xF000) >> 0xC; - this->actor.targetMode = 0; + this->actor.targetMode = TARGET_MODE_0; this->actor.shape.yOffset = 25.0f; this->actor.focus.pos.y += 10.0f; if (this->unk194 == 0) { this->actor.colChkInfo.health = 0; - this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); func_80C0662C(this); } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -1); } - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; func_80C0673C(this); } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c index 3e93f15bc..f0315a16e 100644 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c +++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c @@ -6,7 +6,7 @@ #include "z_obj_mu_pict.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ObjMuPict*)thisx) @@ -46,7 +46,7 @@ void ObjMuPict_Init(Actor* thisx, PlayState* play) { func_80C06D90(this, play); this->unk14A = OBJMUPICT_GET_F000(&this->actor); - this->actor.targetMode = 6; + this->actor.targetMode = TARGET_MODE_6; this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 30.0f; this->unk148 = 0; diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index fc4d2ecf5..d783c88e8 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -46,7 +46,7 @@ ActorInit Obj_Nozoki_InitVars = { static InitChainEntry sInitChain[] = { ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, 0, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; s16 D_80BA34B8[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ }; @@ -413,10 +413,10 @@ void func_80BA3230(ObjNozoki* this, PlayState* play) { if ((test3 != NULL) && (test3->draw != NULL)) { if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10000); this->dyna.actor.textId = 0x297A; } else { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { this->dyna.actor.textId = 0; } else { diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c index 2a2d3a611..17a277e82 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -44,8 +44,8 @@ ActorInit Obj_Ocarinalift_InitVars = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_2, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; @@ -197,7 +197,7 @@ void func_80AC9A7C(ObjOcarinalift* this, PlayState* play) { } void func_80AC9AB8(ObjOcarinalift* this) { - this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); + this->dyna.actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); this->actionFunc = func_80AC9AE0; } @@ -234,7 +234,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { } void func_80AC9C20(ObjOcarinalift* this) { - this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); + this->dyna.actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON); this->actionFunc = func_80AC9C48; } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index 281c813e2..edc780007 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -478,10 +478,10 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) { if (sp34) { this->actor.textId = 0x238; - this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->actor.targetArrowOffset = 1400.0f / 3.0f; Actor_SetFocus(&this->actor, 24.0f); - this->actor.targetMode = 3; + this->actor.targetMode = TARGET_MODE_3; } Collider_InitJntSph(play, &this->collider); @@ -537,7 +537,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { (0x80000000 | 0x4000 | 0x800 | 0x400 | 0x100 | 0x8))) { this->actor.flags |= ACTOR_FLAG_10; if (this->actor.home.rot.y == 1) { - this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); } if (this->collider.elements->info.acHitInfo->toucher.dmgFlags & 0x4000) { @@ -763,7 +763,7 @@ void ObjSnowball_Update(Actor* thisx, PlayState* play) { } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags |= ACTOR_FLAG_10; this->unk_211 = 1; - } else if (this->actor.isTargeted) { + } else if (this->actor.isLockedOn) { sp24 = true; } } diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 1cab193db..295181b8d 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -381,7 +381,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) { ObjSwitch_InitJntSphCollider(this, play, &sJntSphInit); } if (type == OBJSWITCH_TYPE_CRYSTAL_TARGETABLE) { - this->dyna.actor.targetMode = 4; + this->dyna.actor.targetMode = TARGET_MODE_4; this->dyna.actor.flags |= 1; } this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index e860d381a..09b95d3a0 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -9,7 +9,7 @@ #include "overlays/actors/ovl_En_In/z_en_in.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((ObjUm*)thisx) @@ -708,7 +708,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { return; } - this->dyna.actor.targetMode = 6; + this->dyna.actor.targetMode = TARGET_MODE_6; this->unk_2B4 = 0; ObjUm_SetupAction(this, ObjUm_RanchWait); } @@ -965,7 +965,7 @@ s32 func_80B7984C(PlayState* play, ObjUm* this, s32 arg2, s32* arg3) { return 0; } - if ((this->dyna.actor.xyzDistToPlayerSq > SQ(100.0f)) && !this->dyna.actor.isTargeted) { + if ((this->dyna.actor.xyzDistToPlayerSq > SQ(100.0f)) && !this->dyna.actor.isLockedOn) { return 0; } @@ -995,7 +995,7 @@ s32 func_80B79A24(s32 arg0) { void ObjUm_RanchWait(ObjUm* this, PlayState* play) { Player* player = GET_PLAYER(play); - this->dyna.actor.flags |= ACTOR_FLAG_1; + this->dyna.actor.flags |= ACTOR_FLAG_TARGETABLE; SkelAnime_Update(&this->skelAnime); ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE); this->flags |= OBJ_UM_FLAG_WAITING; diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index 4ae133dd3..e3d11f2fc 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -8,7 +8,7 @@ #include "objects/object_sek/object_sek.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ObjWarpstone*)thisx) @@ -55,7 +55,7 @@ static ColliderCylinderInit sCylinderInit = { }; static InitChainEntry sInitChain[] = { - ICHAIN_U8(targetMode, 1, ICHAIN_STOP), + ICHAIN_U8(targetMode, TARGET_MODE_1, ICHAIN_STOP), }; static Gfx* sOwlStatueDLs[] = { gOwlStatueClosedDL, gOwlStatueOpenedDL }; diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index e128e7263..4130dcb74 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -8,7 +8,7 @@ #include "overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" -#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) +#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define THIS ((ShotSun*)thisx) @@ -66,7 +66,7 @@ void ShotSun_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actionFunc = ShotSun_UpdateHyliaSun; - this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 89ba05a86..435406885 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3494,7 +3494,8 @@ void func_8082FA5C(PlayState* play, Player* this, PlayerMeleeWeaponState meleeWe } s32 func_8082FB68(Player* this) { - if ((this->targetedActor != NULL) && CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + if ((this->lockOnActor != NULL) && + CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags3 |= PLAYER_STATE3_80000000; return true; } @@ -4019,7 +4020,7 @@ s32 func_80830FD4(PlayState* play) { s32 func_80831010(Player* this, PlayState* play) { if ((this->unk_AA5 == PLAYER_UNKAA5_0) || (this->unk_AA5 == PLAYER_UNKAA5_3)) { - if (func_8082FBE8(this) || (this->targetedActor != NULL) || + if (func_8082FBE8(this) || (this->lockOnActor != NULL) || (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_BOWARROW) == 0)) { return true; } @@ -4534,12 +4535,12 @@ void func_80832578(Player* this, PlayState* play) { s16 previousYaw = this->actor.shape.rot.y; if (!(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; - if ((targetedActor != NULL) && ((play->actorCtx.targetContext.unk4B != 0) || (this != GET_PLAYER(play))) && - (targetedActor->id != ACTOR_OBJ_NOZOKI)) { + if ((lockOnActor != NULL) && ((play->actorCtx.targetCtx.rotZTick != 0) || (this != GET_PLAYER(play))) && + (lockOnActor->id != ACTOR_OBJ_NOZOKI)) { Math_ScaledStepToS(&this->actor.shape.rot.y, - Math_Vec3f_Yaw(&this->actor.world.pos, &targetedActor->focus.pos), 0xFA0); + Math_Vec3f_Yaw(&this->actor.world.pos, &lockOnActor->focus.pos), 0xFA0); } else if ((this->stateFlags1 & PLAYER_STATE1_20000) && !(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetYaw, 0xFA0); @@ -4597,7 +4598,7 @@ s16 func_80832754(Player* this, s32 arg1) { } void func_80832888(Player* this, PlayState* play) { - s32 var_v1 = 0; + s32 ignoreLeash = false; Actor* var_v1_2; s32 heldZ = CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_Z); s32 temp_v0_3; @@ -4623,7 +4624,7 @@ void func_80832888(Player* this, PlayState* play) { } if (this->unk_738 > 5) { - var_v1 = 1; + ignoreLeash = true; } temp_v0_3 = func_8082DAFC(play); @@ -4632,28 +4633,27 @@ void func_80832888(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_2000000) && ((this->heldItemAction != PLAYER_IA_FISHING_ROD) || (this->unk_B28 == 0)) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_Z)) { - var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetContext.arrowPointedActor - : &GET_PLAYER(play)->actor; + var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetCtx.fairyActor : &GET_PLAYER(play)->actor; var_a1 = (gSaveContext.options.zTargetSetting != 0) || (this != GET_PLAYER(play)); this->stateFlags1 |= PLAYER_STATE1_8000; if ((this->currentMask != PLAYER_MASK_GIANT) && (var_v1_2 != NULL) && !(var_v1_2->flags & ACTOR_FLAG_CANT_LOCK_ON) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { - if ((var_v1_2 == this->targetedActor) && (this == GET_PLAYER(play))) { - var_v1_2 = play->actorCtx.targetContext.unk_94; + if ((var_v1_2 == this->lockOnActor) && (this == GET_PLAYER(play))) { + var_v1_2 = play->actorCtx.targetCtx.arrowPointedActor; } if ((var_v1_2 != NULL) && - (((var_v1_2 != this->targetedActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) { + (((var_v1_2 != this->lockOnActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) { var_v1_2->flags &= ~ACTOR_FLAG_80000; if (!var_a1) { this->stateFlags2 |= PLAYER_STATE2_2000; } - this->targetedActor = var_v1_2; + this->lockOnActor = var_v1_2; this->unk_738 = 0xF; this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); } else if (!var_a1) { - func_80123DA4(this); + Player_Untarget(this); } this->stateFlags1 &= ~PLAYER_STATE1_40000000; } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) && @@ -4662,23 +4662,23 @@ void func_80832888(Player* this, PlayState* play) { } } - if (this->targetedActor != NULL) { - if ((this == GET_PLAYER(play)) && (this->targetedActor != this->unk_A78) && - func_800B83F8(this->targetedActor, this, var_v1)) { - func_80123DA4(this); + if (this->lockOnActor != NULL) { + if ((this == GET_PLAYER(play)) && (this->lockOnActor != this->unk_A78) && + Target_OutsideLeashRange(this->lockOnActor, this, ignoreLeash)) { + Player_Untarget(this); this->stateFlags1 |= PLAYER_STATE1_40000000; - } else if (this->targetedActor != NULL) { - this->targetedActor->targetPriority = 0x28; + } else if (this->lockOnActor != NULL) { + this->lockOnActor->targetPriority = 0x28; } } else if (this->unk_A78 != NULL) { - this->targetedActor = this->unk_A78; + this->lockOnActor = this->unk_A78; } } - if ((this->targetedActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { + if ((this->lockOnActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { this->stateFlags1 &= ~(PLAYER_STATE1_10000 | PLAYER_STATE1_20000); if ((this->stateFlags1 & PLAYER_STATE1_800) || - !CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + !CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags1 |= PLAYER_STATE1_10000; } } else if (this->stateFlags1 & PLAYER_STATE1_20000) { @@ -4722,7 +4722,7 @@ s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg f32 var_fa1; if (this->unk_AB8 != 0.0f) { - var_fa1 = (this->targetedActor != NULL) ? 0.002f : 0.008f; + var_fa1 = (this->lockOnActor != NULL) ? 0.002f : 0.008f; var_fa0 -= this->unk_AB8 * var_fa1; var_fa0 = CLAMP_MIN(var_fa0, 2.0f); @@ -4745,9 +4745,9 @@ s32 func_80832F78(Player* this, f32* arg1, s16* outYaw, f32 arg3, PlayState* pla if (!func_80832CAC(play, this, arg1, outYaw, arg3)) { *outYaw = this->actor.shape.rot.y; - if (this->targetedActor != NULL) { - if ((play->actorCtx.targetContext.unk4B != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) { - *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->targetedActor->focus.pos); + if (this->lockOnActor != NULL) { + if ((play->actorCtx.targetCtx.rotZTick != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) { + *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->lockOnActor->focus.pos); } } else if (func_80123434(this)) { *outYaw = this->targetYaw; @@ -4850,8 +4850,8 @@ void func_808332A0(PlayState* play, Player* this, s32 magicCost, s32 isSwordBeam Actor* thunder; if (isSwordBeam) { - if (this->targetedActor != NULL) { - pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->targetedActor->focus.pos); + if (this->lockOnActor != NULL) { + pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->lockOnActor->focus.pos); } if (gSaveContext.save.saveInfo.playerData.magic == 0) { return; @@ -6676,7 +6676,7 @@ void func_80837B60(PlayState* play, Player* this) { if (this->actor.textId != 0) { Message_StartTextbox(play, this->actor.textId, this->talkActor); } - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } void func_80837BD0(PlayState* play, Player* this) { @@ -7225,14 +7225,14 @@ s32 func_80838A90(Player* this, PlayState* play) { this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_AE8 = 80; this->unk_AE7 = -1; - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } else { this->csId = CS_ID_GLOBAL_TALK; } talkActor->flags |= ACTOR_FLAG_TALK_REQUESTED; this->actor.textId = 0; - this->targetedActor = this->talkActor; + this->lockOnActor = this->talkActor; } else { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]; @@ -7324,15 +7324,15 @@ s32 func_80838A90(Player* this, PlayState* play) { s32 func_808391D8(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* talkActor = this->talkActor; - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; Actor* var_a1 = NULL; s32 var_t1 = false; s32 var_t2 = false; if (this->tatlActor != NULL) { - var_t2 = - (targetedActor != NULL) && (CHECK_FLAG_ALL(targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || - (targetedActor->hintId != TATL_HINT_ID_NONE)); + var_t2 = (lockOnActor != NULL) && + (CHECK_FLAG_ALL(lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || + (lockOnActor->hintId != TATL_HINT_ID_NONE)); if (var_t2 || (this->tatlTextId != 0)) { //! @bug The comparison `((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000)` always evaluates to `true` @@ -7341,17 +7341,17 @@ s32 func_808391D8(Player* this, PlayState* play) { if (var_t1 || !var_t2) { var_a1 = this->tatlActor; if (var_t1) { - targetedActor = NULL; + lockOnActor = NULL; talkActor = NULL; } } else { - var_a1 = targetedActor; + var_a1 = lockOnActor; } } } if ((talkActor != NULL) || (var_a1 != NULL)) { - if ((targetedActor == NULL) || (targetedActor == talkActor) || (targetedActor == var_a1)) { + if ((lockOnActor == NULL) || (lockOnActor == talkActor) || (lockOnActor == var_a1)) { if (!(this->stateFlags1 & PLAYER_STATE1_800) || ((this->heldActor != NULL) && (var_t1 || (talkActor == this->heldActor) || (var_a1 == this->heldActor) || @@ -7359,7 +7359,7 @@ s32 func_808391D8(Player* this, PlayState* play) { if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & PLAYER_STATE1_800000) || func_801242B4(this))) { if (talkActor != NULL) { - if ((targetedActor == NULL) || (targetedActor == talkActor)) { + if ((lockOnActor == NULL) || (lockOnActor == talkActor)) { this->stateFlags2 |= PLAYER_STATE2_2; } @@ -7411,9 +7411,9 @@ s32 func_80839518(Player* this, PlayState* play) { if (this->unk_AA5 != PLAYER_UNKAA5_0) { func_80838A90(this, play); return true; - } else if ((this->targetedActor != NULL) && - (CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || - (this->targetedActor->hintId != TATL_HINT_ID_NONE))) { + } else if ((this->lockOnActor != NULL) && + (CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || + (this->lockOnActor->hintId != TATL_HINT_ID_NONE))) { this->stateFlags2 |= PLAYER_STATE2_200000; } else if ((this->tatlTextId == 0) && !func_80123420(this) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) && @@ -7696,7 +7696,7 @@ s32 func_8083A274(Player* this, PlayState* play) { if (Player_IsGoronOrDeku(this) || ((((this->transformation == PLAYER_FORM_ZORA) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) || ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) && - !func_80123434(this) && (this->targetedActor == NULL))) { + !func_80123434(this) && (this->lockOnActor == NULL))) { func_8082DC38(this); func_8082DCA0(play, this); if (Player_SetAction(play, this, Player_Action_18, 0)) { @@ -8454,7 +8454,7 @@ void func_8083BF54(PlayState* play, Player* this) { } s32 func_8083C62C(Player* this, s32 arg1) { - Actor* targetedActor = this->targetedActor; + Actor* lockOnActor = this->lockOnActor; Vec3f headPos; s16 pitchTarget; s16 yawTarget; @@ -8463,8 +8463,8 @@ s32 func_8083C62C(Player* this, s32 arg1) { headPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; headPos.z = this->actor.world.pos.z; - pitchTarget = Math_Vec3f_Pitch(&headPos, &targetedActor->focus.pos); - yawTarget = Math_Vec3f_Yaw(&headPos, &targetedActor->focus.pos); + pitchTarget = Math_Vec3f_Pitch(&headPos, &lockOnActor->focus.pos); + yawTarget = Math_Vec3f_Yaw(&headPos, &lockOnActor->focus.pos); Math_SmoothStepToS(&this->actor.focus.rot.y, yawTarget, 4, 0x2710, 0); Math_SmoothStepToS(&this->actor.focus.rot.x, pitchTarget, 4, 0x2710, 0); @@ -8477,7 +8477,7 @@ s32 func_8083C62C(Player* this, s32 arg1) { Vec3f D_8085D218 = { 0.0f, 100.0f, 40.0f }; void func_8083C6E8(Player* this, PlayState* play) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { if (func_800B7128(this) || func_8082EF20(this)) { func_8083C62C(this, true); } else { @@ -9154,7 +9154,7 @@ s32 func_8083E404(Player* this, f32 arg1, s16 arg2) { f32 sp1C = BINANG_SUB(arg2, this->actor.shape.rot.y); f32 temp_fv1; - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_8083C62C(this, func_800B7128(this) || func_8082EF20(this)); } @@ -9173,7 +9173,7 @@ s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) { s16 temp_v1 = *arg3 - this->targetYaw; u16 var_a2 = ABS_ALT(temp_v1); - if ((func_800B7128(this) || func_8082EF20(this)) && (this->targetedActor == NULL)) { + if ((func_800B7128(this) || func_8082EF20(this)) && (this->lockOnActor == NULL)) { *arg2 *= Math_SinS(var_a2); if (*arg2 != 0.0f) { @@ -9182,14 +9182,14 @@ s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) { *arg3 = this->actor.shape.rot.y; } - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_8083C62C(this, true); } else { Math_SmoothStepToS(&this->actor.focus.rot.x, (sPlayerControlInput->rel.stick_y * 240.0f), 0xE, 0xFA0, 0x1E); func_80832754(this, true); } } else { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { return func_8083E404(this, *arg2, *arg3); } @@ -9314,7 +9314,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || ((this->actor.id == ACTOR_PLAYER) && - (((this->targetedActor != NULL) || + (((this->lockOnActor != NULL) || ((this->transformation != PLAYER_FORM_FIERCE_DEITY) && (this->transformation != PLAYER_FORM_HUMAN)) || (this->currentMask == PLAYER_MASK_SCENTS)) || (!(healthIsCritical = LifeMeter_IsCritical()) && (this->unk_AA4 = ((this->unk_AA4 + 1) & 1)))))) { @@ -10788,7 +10788,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { (this->transformation == PLAYER_FORM_ZORA)) && ((this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) || ((this->stateFlags2 & PLAYER_STATE2_100000) && - (play->actorCtx.targetContext.arrowPointedActor == NULL)))) { + (play->actorCtx.targetCtx.fairyActor == NULL)))) { doActionA = DO_ACTION_PUTAWAY; if (play->msgCtx.currentTextId == 0) {} //! FAKE @@ -10808,7 +10808,7 @@ void Player_SetDoAction(PlayState* play, Player* this) { // Set Tatl state if (!Play_InCsMode(play) && (this->stateFlags2 & PLAYER_STATE2_200000) && !(this->stateFlags3 & PLAYER_STATE3_100)) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { func_80115764(play, 0x2B); } else { func_80115764(play, 0x2A); @@ -11183,7 +11183,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { } } else if (this->stateFlags2 & PLAYER_STATE2_100) { camMode = CAM_MODE_PUSHPULL; - } else if (this->targetedActor != NULL) { + } else if (this->lockOnActor != NULL) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED)) { camMode = CAM_MODE_TALK; } else if (this->stateFlags1 & PLAYER_STATE1_10000) { @@ -11195,7 +11195,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { } else { camMode = CAM_MODE_BATTLE; } - Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->targetedActor); + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->lockOnActor); } else if (this->stateFlags1 & PLAYER_STATE1_1000) { camMode = CAM_MODE_CHARGE; } else if (this->stateFlags3 & PLAYER_STATE3_100) { @@ -11249,9 +11249,9 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { Camera_ChangeMode(camera, camMode); } - if (play->actorCtx.targetContext.bgmEnemy != NULL) { + if (play->actorCtx.targetCtx.bgmEnemy != NULL) { seqMode = SEQ_MODE_ENEMY; - Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetContext.bgmEnemy->xyzDistToPlayerSq)); + Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetCtx.bgmEnemy->xyzDistToPlayerSq)); } Audio_SetSequenceMode(seqMode); @@ -11863,8 +11863,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Lights_PointSetPosition(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z); - if (((this->targetedActor == NULL) || (this->targetedActor == this->talkActor) || - (this->targetedActor->hintId == TATL_HINT_ID_NONE)) && + if (((this->lockOnActor == NULL) || (this->lockOnActor == this->talkActor) || + (this->lockOnActor->hintId == TATL_HINT_ID_NONE)) && (this->tatlTextId == 0)) { this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); } @@ -13252,13 +13252,13 @@ s32 Player_UpperAction_14(Player* this, PlayState* play) { untargetedRotY = this->actor.shape.rot.y - 0x190; this->boomerangActor = Actor_Spawn( &play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, - (this->targetedActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT); + (this->lockOnActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT); if (this->boomerangActor != NULL) { EnBoom* leftBoomerang = (EnBoom*)this->boomerangActor; EnBoom* rightBoomerang; - leftBoomerang->moveTo = this->targetedActor; + leftBoomerang->moveTo = this->lockOnActor; if (leftBoomerang->moveTo != NULL) { leftBoomerang->unk_1CF = 0x10; } @@ -13269,11 +13269,11 @@ s32 Player_UpperAction_14(Player* this, PlayState* play) { untargetedRotY = (this->actor.shape.rot.y + 0x190); rightBoomerang = (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, - (this->targetedActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY, - 0, ZORA_BOOMERANG_RIGHT); + (this->lockOnActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY, 0, + ZORA_BOOMERANG_RIGHT); if (rightBoomerang != NULL) { - rightBoomerang->moveTo = this->targetedActor; + rightBoomerang->moveTo = this->lockOnActor; if (rightBoomerang->moveTo != NULL) { rightBoomerang->unk_1CF = 0x10; } @@ -13816,7 +13816,7 @@ void Player_Action_10(Player* this, PlayState* play) { } func_80832F78(this, &sp34, &sp32, 0.018f, play); - if ((this != GET_PLAYER(play)) && (this->targetedActor == NULL)) { + if ((this != GET_PLAYER(play)) && (this->lockOnActor == NULL)) { sp32 = this->actor.home.rot.y; } @@ -14928,7 +14928,7 @@ void Player_Action_35(Player* this, PlayState* play) { if (play->unk_1887C != 0) { play->func_18780(this, play); Player_SetAction(play, this, Player_Action_80, 0); - if (play->sceneId == 0x45) { + if (play->sceneId == SCENE_20SICHITAI) { play->unk_1887C = 0; } } else if (!func_808391D8(this, play)) { @@ -15121,7 +15121,7 @@ void Player_Action_43(Player* this, PlayState* play) { if (((this->unk_AA5 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || ((this->unk_AA5 != PLAYER_UNKAA5_2) && ((((this->csMode != PLAYER_CSMODE_NONE) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) || - (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->targetedActor != NULL) || + (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->lockOnActor != NULL) || (func_8083868C(play, this) == CAM_MODE_NORMAL) || ((this->unk_AA5 == PLAYER_UNKAA5_3) && (((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && @@ -15152,7 +15152,7 @@ void Player_Action_44(Player* this, PlayState* play) { func_8083216C(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; - if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { this->stateFlags2 &= ~PLAYER_STATE2_2000; } @@ -15197,7 +15197,7 @@ void Player_Action_44(Player* this, PlayState* play) { } } - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { this->currentYaw = func_8083C62C(this, false); this->actor.shape.rot.y = this->currentYaw; if (this->unk_AE7 != 0) { @@ -15629,7 +15629,7 @@ void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { } s32 func_8084FE48(Player* this) { - return (this->targetedActor == NULL) && !func_8082FC24(this); + return (this->lockOnActor == NULL) && !func_8082FC24(this); } PlayerAnimationHeader* D_8085D688[] = { @@ -15820,7 +15820,7 @@ void Player_Action_52(Player* this, PlayState* play) { } else if ((this->csMode != PLAYER_CSMODE_NONE) || (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && !func_80847BF0(this, play) && !func_80838A90(this, play))) { - if (this->targetedActor != NULL) { + if (this->lockOnActor != NULL) { if (func_800B7128(this)) { this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA); @@ -17085,7 +17085,7 @@ void Player_Action_71(Player* this, PlayState* play) { Player_PlayAnimSfx(this, D_8085D840); } - if ((this->unk_AE7 == 0) && (this->targetedActor != NULL)) { + if ((this->unk_AE7 == 0) && (this->lockOnActor != NULL)) { this->currentYaw = func_8083C62C(this, 0); this->actor.shape.rot.y = this->currentYaw; } @@ -19091,7 +19091,7 @@ void func_80859248(Player* this) { if ((this->csActor == NULL) || (this->csActor->update == NULL)) { this->csActor = NULL; } - this->targetedActor = this->csActor; + this->lockOnActor = this->csActor; if (this->csActor != NULL) { this->actor.shape.rot.y = func_8083C62C(this, 0); } @@ -20167,13 +20167,13 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) { func_808323C0(player, CS_ID_GLOBAL_TALK); if ((player->talkActor != NULL) || (actor == player->tatlActor) || - CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000)) { + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000)) { actor->flags |= ACTOR_FLAG_TALK_REQUESTED; } player->talkActor = actor; player->exchangeItemAction = PLAYER_IA_NONE; - player->targetedActor = actor; + player->lockOnActor = actor; if (actor->textId == 0xFFFF) { func_800B7298(play, actor, PLAYER_CSMODE_1); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 686ce3002..1b33b3a5f 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -669,12 +669,12 @@ 0x800B4AEC:("func_800B4AEC",), 0x800B4B50:("func_800B4B50",), 0x800B4EDC:("Actor_GetProjectedPos",), - 0x800B4F40:("Target_SetPos",), - 0x800B4F78:("func_800B4F78",), - 0x800B5040:("Target_SetColors",), - 0x800B51A4:("Actor_TargetContextInit",), - 0x800B5208:("Actor_DrawZTarget",), - 0x800B5814:("func_800B5814",), + 0x800B4F40:("Target_SetLockOnPos",), + 0x800B4F78:("Target_InitLockOn",), + 0x800B5040:("Target_SetFairyState",), + 0x800B51A4:("Target_Init",), + 0x800B5208:("Target_Draw",), + 0x800B5814:("Target_Update",), 0x800B5BB0:("Flags_GetSwitch",), 0x800B5BF4:("Flags_SetSwitch",), 0x800B5C34:("Flags_UnsetSwitch",), @@ -766,9 +766,9 @@ 0x800B81E0:("Actor_GetFocus",), 0x800B8214:("Actor_GetWorld",), 0x800B8248:("Actor_GetWorldPosShapeRot",), - 0x800B82EC:("func_800B82EC",), - 0x800B83BC:("func_800B83BC",), - 0x800B83F8:("func_800B83F8",), + 0x800B82EC:("Target_GetAdjustedDistSq",), + 0x800B83BC:("Target_IsActorInRange",), + 0x800B83F8:("Target_OutsideLeashRange",), 0x800B84D0:("Actor_ProcessTalkRequest",), 0x800B8500:("Actor_OfferTalkExchange",), 0x800B85E0:("Actor_OfferTalkExchangeEquiCylinder",), @@ -840,9 +840,9 @@ 0x800BB140:("Actor_SpawnTransitionActors",), 0x800BB2D0:("Actor_SpawnEntry",), 0x800BB498:("Actor_Delete",), - 0x800BB59C:("func_800BB59C",), - 0x800BB604:("func_800BB604",), - 0x800BB8EC:("func_800BB8EC",), + 0x800BB59C:("Target_InTargetableScreenRegion",), + 0x800BB604:("Target_FindTargetableActorForCategory",), + 0x800BB8EC:("Target_GetTargetActor",), 0x800BBA88:("Enemy_StartFinishingBlow",), 0x800BBAC0:("func_800BBAC0",), 0x800BBB74:("func_800BBB74",), @@ -2208,7 +2208,7 @@ 0x80123C58:("func_80123C58",), 0x80123C90:("Player_SetEquipmentData",), 0x80123D50:("Player_UpdateBottleHeld",), - 0x80123DA4:("func_80123DA4",), + 0x80123DA4:("Player_Untarget",), 0x80123DC0:("func_80123DC0",), 0x80123E90:("func_80123E90",), 0x80123F14:("func_80123F14",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 8a0c74f95..5047e9804 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -433,7 +433,7 @@ 0x801AED48:("D_801AED48","s16","[8]",0x10), 0x801AED58:("sCategoryFreezeMasks","UNK_TYPE4","",0x4), 0x801AED88:("actorDefaultHitColor","Color_RGBA8","",0x4), - 0x801AED8C:("D_801AED8C","UNK_TYPE1","",0x1), + 0x801AED8C:("sTargetableActorCategories","UNK_TYPE1","",0x1), 0x801AED98:("D_801AED98","Vec3f","",0xC), 0x801AEDA4:("D_801AEDA4","UNK_TYPE4","",0x4), 0x801AEDB0:("sArrowDmgFlags","UNK_TYPE1","",0x1), @@ -3804,17 +3804,17 @@ 0x801ED8A0:("sActorFaultClient","UNK_TYPE1","",0x1), 0x801ED8B0:("D_801ED8B0","UNK_TYPE1","",0x1), 0x801ED8B4:("D_801ED8B4","UNK_TYPE1","",0x1), - 0x801ED8B8:("D_801ED8B8","UNK_TYPE1","",0x1), - 0x801ED8BC:("D_801ED8BC","UNK_TYPE1","",0x1), + 0x801ED8B8:("sTargetableNearestActor","UNK_TYPE1","",0x1), + 0x801ED8BC:("sTargetablePrioritizedActor","UNK_TYPE1","",0x1), 0x801ED8C0:("D_801ED8C0","UNK_TYPE1","",0x1), 0x801ED8C4:("D_801ED8C4","UNK_TYPE1","",0x1), - 0x801ED8C8:("D_801ED8C8","f32","",0x4), + 0x801ED8C8:("sTargetableNearestActorDistSq","f32","",0x4), 0x801ED8CC:("sBgmEnemyDistSq","f32","",0x4), 0x801ED8D0:("D_801ED8D0","f32","",0x4), - 0x801ED8D4:("D_801ED8D4","UNK_TYPE1","",0x1), + 0x801ED8D4:("sTargetablePrioritizedPriority","UNK_TYPE1","",0x1), 0x801ED8D8:("D_801ED8D8","UNK_TYPE1","",0x1), - 0x801ED8DC:("D_801ED8DC","UNK_TYPE1","",0x1), - 0x801ED8E0:("D_801ED8E0","Mtx","",0x40), + 0x801ED8DC:("sTargetPlayerRotY","UNK_TYPE1","",0x1), + 0x801ED8E0:("sActorHiliteMtx","Mtx","",0x40), 0x801ED920:("D_801ED920","Actor*","",0x1), 0x801ED930:("D_801ED930","FaultClient","",0x10), 0x801ED940:("sActorOverlayTableFaultAddrConvClient","FaultAddrConvClient","",0xC), diff --git a/tools/namefixer.py b/tools/namefixer.py index e4343cf31..fa4efc6d3 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -104,6 +104,7 @@ wordReplace = { "func_800B78B8": "Actor_UpdateBgCheckInfo", "func_80123D50": "Player_UpdateBottleHeld", + "func_80123DA4": "Player_Untarget", "func_8012403C": "Player_GetMask", "func_8012404c": "Player_RemoveMask", "func_80123AA4": "Player_SetModels", @@ -929,6 +930,8 @@ wordReplace = { "actor.yDistToPlayer": "actor.playerHeightRel", "actor.cutscene": "actor.csId", "actor.speedXZ": "actor.speed", + "actor.isTargeted": "actor.isLockedOn", + "actor->isTargeted": "actor->isLockedOn", "thisx->speedXZ": "thisx->speed", "gSaveContext.unk_3F1E": "gSaveContext.hudVisibilityForceButtonAlphasByStatus", @@ -1049,7 +1052,8 @@ wordReplace = { "player->unk_B84": "player->pushedYaw", "player->targetActor": "player->talkActor", "player->targetActorDistance": "player->talkActorDistance", - "player->unk_730": "player->targetedActor", + "player->unk_730": "player->lockOnActor", + "player->targetedActor": "player->lockOnActor", "ageProperties->unk_04": "ageProperties->shadowScale", "ageProperties->unk_92": "ageProperties->voiceSfxOffset", @@ -1096,6 +1100,15 @@ wordReplace = { "play->msgCtx.unk11F04": "play->msgCtx.currentTextId", "play->actorCtx.unk3": "play->actorCtx.lensActive", "play->actorCtx.unk4": "play->actorCtx.lensMaskSize", + "play->actorCtx.targetContext": "play->actorCtx.targetCtx", + "play->actorCtx.targetCtx.unk0": "play->actorCtx.targetCtx.fairyPos", + "play->actorCtx.targetCtx.unk40": "play->actorCtx.targetCtx.fairyMoveProgressFactor", + "play->actorCtx.targetCtx.unk44": "play->actorCtx.targetCtx.lockOnRadius", + "play->actorCtx.targetCtx.unk48": "play->actorCtx.targetCtx.lockOnAlpha", + "play->actorCtx.targetCtx.unk4B": "play->actorCtx.targetCtx.rotation", + "play->actorCtx.targetCtx.unk4C": "play->actorCtx.targetCtx.lockOnIndex", + "play->actorCtx.targetCtx.unk50": "play->actorCtx.targetCtx.lockOnTriangleSets", + "play->actorCtx.targetCtx.unk8C": "play->actorCtx.targetCtx.nextTarget", "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", @@ -1157,6 +1170,9 @@ wordReplace = { "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_ON", + "ACTOR_FLAG_1": "ACTOR_FLAG_TARGETABLE", + "ACTOR_FLAG_4": "ACTOR_FLAG_UNFRIENDLY", + "ACTOR_FLAG_8": "ACTOR_FLAG_FRIENDLY", "ACTOR_FLAG_100": "ACTOR_FLAG_TALK_REQUESTED", "ACTOR_FLAG_8000000": "ACTOR_FLAG_CANT_LOCK_ON", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index b7da3ff1c..ba509ef78 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -183,12 +183,12 @@ asm/non_matchings/code/z_actor/Actor_SetFeetPos.s,Actor_SetFeetPos,0x800B4A98,0x asm/non_matchings/code/z_actor/func_800B4AEC.s,func_800B4AEC,0x800B4AEC,0x19 asm/non_matchings/code/z_actor/func_800B4B50.s,func_800B4B50,0x800B4B50,0xE3 asm/non_matchings/code/z_actor/Actor_GetProjectedPos.s,Actor_GetProjectedPos,0x800B4EDC,0x19 -asm/non_matchings/code/z_actor/Target_SetPos.s,Target_SetPos,0x800B4F40,0xE -asm/non_matchings/code/z_actor/func_800B4F78.s,func_800B4F78,0x800B4F78,0x32 -asm/non_matchings/code/z_actor/Target_SetColors.s,Target_SetColors,0x800B5040,0x59 -asm/non_matchings/code/z_actor/Actor_TargetContextInit.s,Actor_TargetContextInit,0x800B51A4,0x19 -asm/non_matchings/code/z_actor/Actor_DrawZTarget.s,Actor_DrawZTarget,0x800B5208,0x183 -asm/non_matchings/code/z_actor/func_800B5814.s,func_800B5814,0x800B5814,0xE7 +asm/non_matchings/code/z_actor/Target_SetLockOnPos.s,Target_SetLockOnPos,0x800B4F40,0xE +asm/non_matchings/code/z_actor/Target_InitLockOn.s,Target_InitLockOn,0x800B4F78,0x32 +asm/non_matchings/code/z_actor/Target_SetFairyState.s,Target_SetFairyState,0x800B5040,0x59 +asm/non_matchings/code/z_actor/Target_Init.s,Target_Init,0x800B51A4,0x19 +asm/non_matchings/code/z_actor/Target_Draw.s,Target_Draw,0x800B5208,0x183 +asm/non_matchings/code/z_actor/Target_Update.s,Target_Update,0x800B5814,0xE7 asm/non_matchings/code/z_actor/Flags_GetSwitch.s,Flags_GetSwitch,0x800B5BB0,0x11 asm/non_matchings/code/z_actor/Flags_SetSwitch.s,Flags_SetSwitch,0x800B5BF4,0x10 asm/non_matchings/code/z_actor/Flags_UnsetSwitch.s,Flags_UnsetSwitch,0x800B5C34,0x11 @@ -280,9 +280,9 @@ asm/non_matchings/code/z_actor/func_800B8118.s,func_800B8118,0x800B8118,0x32 asm/non_matchings/code/z_actor/Actor_GetFocus.s,Actor_GetFocus,0x800B81E0,0xD asm/non_matchings/code/z_actor/Actor_GetWorld.s,Actor_GetWorld,0x800B8214,0xD asm/non_matchings/code/z_actor/Actor_GetWorldPosShapeRot.s,Actor_GetWorldPosShapeRot,0x800B8248,0x29 -asm/non_matchings/code/z_actor/func_800B82EC.s,func_800B82EC,0x800B82EC,0x34 -asm/non_matchings/code/z_actor/func_800B83BC.s,func_800B83BC,0x800B83BC,0xF -asm/non_matchings/code/z_actor/func_800B83F8.s,func_800B83F8,0x800B83F8,0x36 +asm/non_matchings/code/z_actor/Target_GetAdjustedDistSq.s,Target_GetAdjustedDistSq,0x800B82EC,0x34 +asm/non_matchings/code/z_actor/Target_IsActorInRange.s,Target_IsActorInRange,0x800B83BC,0xF +asm/non_matchings/code/z_actor/Target_OutsideLeashRange.s,Target_OutsideLeashRange,0x800B83F8,0x36 asm/non_matchings/code/z_actor/Actor_ProcessTalkRequest.s,Actor_ProcessTalkRequest,0x800B84D0,0xC asm/non_matchings/code/z_actor/Actor_OfferTalkExchange.s,Actor_OfferTalkExchange,0x800B8500,0x38 asm/non_matchings/code/z_actor/Actor_OfferTalkExchangeEquiCylinder.s,Actor_OfferTalkExchangeEquiCylinder,0x800B85E0,0xD @@ -354,9 +354,9 @@ asm/non_matchings/code/z_actor/Actor_SpawnAsChild.s,Actor_SpawnAsChild,0x800BB0C asm/non_matchings/code/z_actor/Actor_SpawnTransitionActors.s,Actor_SpawnTransitionActors,0x800BB140,0x64 asm/non_matchings/code/z_actor/Actor_SpawnEntry.s,Actor_SpawnEntry,0x800BB2D0,0x72 asm/non_matchings/code/z_actor/Actor_Delete.s,Actor_Delete,0x800BB498,0x41 -asm/non_matchings/code/z_actor/func_800BB59C.s,func_800BB59C,0x800BB59C,0x1A -asm/non_matchings/code/z_actor/func_800BB604.s,func_800BB604,0x800BB604,0xBA -asm/non_matchings/code/z_actor/func_800BB8EC.s,func_800BB8EC,0x800BB8EC,0x67 +asm/non_matchings/code/z_actor/Target_InTargetableScreenRegion.s,Target_InTargetableScreenRegion,0x800BB59C,0x1A +asm/non_matchings/code/z_actor/Target_FindTargetableActorForCategory.s,Target_FindTargetableActorForCategory,0x800BB604,0xBA +asm/non_matchings/code/z_actor/Target_GetTargetActor.s,Target_GetTargetActor,0x800BB8EC,0x67 asm/non_matchings/code/z_actor/Enemy_StartFinishingBlow.s,Enemy_StartFinishingBlow,0x800BBA88,0xE asm/non_matchings/code/z_actor/func_800BBAC0.s,func_800BBAC0,0x800BBAC0,0x2D asm/non_matchings/code/z_actor/func_800BBB74.s,func_800BBB74,0x800BBB74,0x2B @@ -1722,7 +1722,7 @@ asm/non_matchings/code/z_player_lib/Player_SetModelGroup.s,Player_SetModelGroup, asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30 asm/non_matchings/code/z_player_lib/Player_UpdateBottleHeld.s,Player_UpdateBottleHeld,0x80123D50,0x15 -asm/non_matchings/code/z_player_lib/func_80123DA4.s,func_80123DA4,0x80123DA4,0x7 +asm/non_matchings/code/z_player_lib/Player_Untarget.s,Player_Untarget,0x80123DA4,0x7 asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x34 asm/non_matchings/code/z_player_lib/func_80123E90.s,func_80123E90,0x80123E90,0x21 asm/non_matchings/code/z_player_lib/func_80123F14.s,func_80123F14,0x80123F14,0x6 From 4fa13e4132cf8adb2f07bb34927e62e525c8cc79 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sat, 2 Sep 2023 15:34:29 -0400 Subject: [PATCH 03/74] Move libultra function declarations to libultra headers (#1196) * Delete unused headers * Move PR and io to ultra64 * move headers to ultra64 * more cleanups * more reorganizing * i think that should be all * format * ifdef guards cleanup * Add IO_READ and IO_WRITE macros for future use * warnings * review Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * warnings again * warn * ifdef guards * fix merge * fix merge * fix merge * bss * padutils.h * bss * bss * bss * fix merge * bss * bss * bss * fix merge * fixes * fixes * bss * bss * fix merge * fix * fix * fix includepaths * fix paths * bss * fix * ultra64/ -> PR/ * header guards * fix ehader guards * fix * fix++ * format * bss is borken * prevent 2 * :despair: * bss * rename assert to dbg_hungup * fix * a * fix * bss * fix * bss * bss --------- Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> --- include/PR/abi.h | 4 +- include/{io => PR}/controller.h | 69 ++--- include/{ultra64 => PR}/controller_voice.h | 10 +- include/PR/gbi.h | 16 +- include/{ultra64 => PR}/gs2dex.h | 6 +- include/PR/gu.h | 79 ++++-- include/{ultra64 => PR}/hardware.h | 2 + include/PR/mbi.h | 4 +- include/PR/os.h | 27 ++ include/PR/os_ai.h | 12 + include/PR/os_cache.h | 12 + include/PR/os_cont.h | 79 ++++++ .../{ultra64/convert.h => PR/os_convert.h} | 5 +- include/PR/os_exception.h | 21 ++ include/PR/os_flash.h | 23 ++ include/PR/os_host.h | 9 + include/{ => PR}/os_internal.h | 9 +- include/PR/os_internal_error.h | 9 + include/PR/os_internal_reg.h | 24 ++ include/PR/os_internal_si.h | 13 + include/PR/os_libc.h | 15 ++ .../{ultra64/message.h => PR/os_message.h} | 42 +-- include/{ultra64/motor.h => PR/os_motor.h} | 10 +- include/PR/{pfs.h => os_pfs.h} | 16 +- include/{os.h => PR/os_pi.h} | 193 ++++++-------- include/PR/os_reg.h | 9 + include/PR/os_system.h | 10 + include/{ultra64/thread.h => PR/os_thread.h} | 68 +++-- include/PR/os_time.h | 25 ++ include/PR/os_tlb.h | 9 + include/{ultra64/vi.h => PR/os_vi.h} | 37 ++- include/{ultra64 => PR}/os_voice.h | 13 +- include/PR/osint.h | 38 +++ include/PR/piint.h | 20 ++ include/{ultra64 => PR}/r4300.h | 6 +- include/{ultra64 => PR}/rcp.h | 8 +- include/{ultra64 => PR}/rdp.h | 9 +- include/{ultra64 => PR}/rsp.h | 15 +- include/PR/sched.h | 15 +- include/PR/siint.h | 12 + include/{ultra64 => PR}/sptask.h | 10 +- include/{ultra64 => PR}/ucode.h | 4 +- include/PR/ultratypes.h | 26 +- include/PR/viint.h | 73 ++++++ include/{ => PR}/xstdio.h | 9 +- include/audio/load.h | 4 +- include/bstring.h | 4 - include/debug.h | 7 + include/fault.h | 2 +- include/functions.h | 240 ------------------ include/gfx.h | 1 + include/gfxprint.h | 3 +- include/irqmgr.h | 8 +- include/libc/alloca.h | 4 +- include/libc/assert.h | 4 - include/libc/math.h | 10 +- include/libc/stdarg.h | 6 +- include/libc/stdbool.h | 4 +- include/libc/stddef.h | 4 +- include/libc/stdint.h | 4 +- include/libc/stdlib.h | 7 +- include/libc/string.h | 12 + include/macros.h | 2 +- include/os_malloc.h | 6 +- include/osint.h | 26 -- include/padmgr.h | 10 +- include/padutils.h | 14 + include/ramrom.h | 13 - include/rdb.h | 10 - include/regs.h | 2 + include/rmon.h | 4 - include/scheduler.h | 4 +- include/ultra64.h | 32 +-- include/ultra64/viint.h | 37 --- include/ultraerror.h | 6 - include/ultralog.h | 28 -- include/variables.h | 6 +- include/viint.h | 28 -- include/z64.h | 7 +- include/z64actor.h | 1 + include/z64audio.h | 3 +- include/z64bombers_notebook.h | 3 +- include/z64frameadvance.h | 8 +- include/z64game.h | 3 +- include/z64jpeg.h | 2 +- include/z64math.h | 11 + include/z64player.h | 2 +- include/z64rumble.h | 2 +- include/z64save.h | 2 +- spec | 2 +- src/boot_O2/{assert.c => debug.c} | 4 +- src/boot_O2/loadfragment.c | 1 + src/boot_O2/mtxuty-cvt.c | 2 +- src/boot_O2/padutils.c | 2 +- src/boot_O2_g3/fault.c | 1 + src/boot_O2_g3/yaz0.c | 1 - src/code/game.c | 5 +- src/code/padmgr.c | 4 +- src/code/z_actor_dlftbls.c | 1 + src/code/z_bgcheck.c | 1 - src/code/z_camera.c | 1 + src/code/z_demo.c | 3 +- src/code/z_eventmgr.c | 2 + src/code/z_pause.c | 2 + src/code/z_play.c | 5 +- src/code/z_player_lib.c | 1 + src/code/z_room.c | 7 +- src/code/z_vimode.c | 5 +- src/libultra/gu/guS2DInitBg.c | 1 + src/libultra/gu/lookathil.c | 2 - src/libultra/io/contreaddata.c | 4 +- src/libultra/io/motor.c | 4 +- src/libultra/io/osViModeMpalLan1.c | 2 +- src/libultra/io/osViModeNtscHpf1.c | 2 +- src/libultra/io/osViModeNtscLan1.c | 2 +- src/libultra/io/osViModePalLan1.c | 2 +- src/libultra/io/pfschecker.c | 2 +- src/libultra/io/pfsdeletefile.c | 2 +- src/libultra/io/pfsfilestate.c | 2 +- src/libultra/io/pfsfreeblocks.c | 2 +- src/libultra/io/pfsinitpak.c | 2 +- src/libultra/io/pfsisplug.c | 4 +- src/libultra/io/pfsselectbank.c | 2 +- src/libultra/io/vigetcurrframebuf.c | 4 +- src/libultra/io/vimgr.c | 3 +- src/libultra/os/gethwinterrupt.c | 5 +- src/libultra/os/initialize.c | 12 +- src/libultra/os/resetglobalintmask.c | 2 +- src/libultra/os/seteventmesg.c | 3 +- src/libultra/os/setglobalintmask.c | 2 +- src/libultra/os/sethwinterrupt.c | 3 +- src/libultra/os/virtualtophysical.c | 2 +- src/libultra/rmon/sprintf.c | 3 +- src/libultra/rmon/xldtob.c | 1 + src/libultra/rmon/xlitob.c | 1 + src/libultra/rmon/xprintf.c | 3 + src/libultra/voice/voicecheckresult.c | 7 +- src/libultra/voice/voicecheckword.c | 2 +- src/libultra/voice/voicecleardictionary.c | 6 +- src/libultra/voice/voicecontread2.c | 4 +- src/libultra/voice/voicecontread36.c | 4 +- src/libultra/voice/voicecontrolgain.c | 6 +- src/libultra/voice/voicecontwrite20.c | 4 +- src/libultra/voice/voicecontwrite4.c | 4 +- src/libultra/voice/voicegetreaddata.c | 6 +- src/libultra/voice/voicegetstatus.c | 4 +- src/libultra/voice/voiceinit.c | 8 +- src/libultra/voice/voicemaskdictionary.c | 8 +- src/libultra/voice/voicesetadconverter.c | 4 +- src/libultra/voice/voicesetword.c | 6 +- src/libultra/voice/voicestartreaddata.c | 6 +- src/libultra/voice/voicestopread.c | 6 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 1 - src/overlays/actors/ovl_Boss_02/z_boss_02.c | 1 - src/overlays/actors/ovl_En_Az/z_en_az.c | 1 + .../z_en_horse_game_check.c | 5 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 1 - .../actors/ovl_player_actor/z_player.c | 1 - .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 3 +- tools/disasm/files.txt | 4 +- tools/disasm/functions.txt | 6 +- tools/sizes/boot_functions.csv | 6 +- 162 files changed, 1058 insertions(+), 906 deletions(-) rename include/{io => PR}/controller.h (79%) rename include/{ultra64 => PR}/controller_voice.h (92%) rename include/{ultra64 => PR}/gs2dex.h (99%) rename include/{ultra64 => PR}/hardware.h (98%) create mode 100644 include/PR/os.h create mode 100644 include/PR/os_ai.h create mode 100644 include/PR/os_cache.h create mode 100644 include/PR/os_cont.h rename include/{ultra64/convert.h => PR/os_convert.h} (90%) create mode 100644 include/PR/os_exception.h create mode 100644 include/PR/os_flash.h create mode 100644 include/PR/os_host.h rename include/{ => PR}/os_internal.h (80%) create mode 100644 include/PR/os_internal_error.h create mode 100644 include/PR/os_internal_reg.h create mode 100644 include/PR/os_internal_si.h create mode 100644 include/PR/os_libc.h rename include/{ultra64/message.h => PR/os_message.h} (79%) rename include/{ultra64/motor.h => PR/os_motor.h} (68%) rename include/PR/{pfs.h => os_pfs.h} (86%) rename include/{os.h => PR/os_pi.h} (69%) create mode 100644 include/PR/os_reg.h create mode 100644 include/PR/os_system.h rename include/{ultra64/thread.h => PR/os_thread.h} (81%) create mode 100644 include/PR/os_time.h create mode 100644 include/PR/os_tlb.h rename include/{ultra64/vi.h => PR/os_vi.h} (86%) rename include/{ultra64 => PR}/os_voice.h (84%) create mode 100644 include/PR/osint.h create mode 100644 include/PR/piint.h rename include/{ultra64 => PR}/r4300.h (99%) rename include/{ultra64 => PR}/rcp.h (83%) rename include/{ultra64 => PR}/rdp.h (94%) rename include/{ultra64 => PR}/rsp.h (86%) create mode 100644 include/PR/siint.h rename include/{ultra64 => PR}/sptask.h (94%) rename include/{ultra64 => PR}/ucode.h (93%) create mode 100644 include/PR/viint.h rename include/{ => PR}/xstdio.h (74%) delete mode 100644 include/bstring.h create mode 100644 include/debug.h delete mode 100644 include/libc/assert.h create mode 100644 include/libc/string.h delete mode 100644 include/osint.h create mode 100644 include/padutils.h delete mode 100644 include/ramrom.h delete mode 100644 include/rdb.h delete mode 100644 include/rmon.h delete mode 100644 include/ultra64/viint.h delete mode 100644 include/ultraerror.h delete mode 100644 include/ultralog.h delete mode 100644 include/viint.h rename src/boot_O2/{assert.c => debug.c} (67%) diff --git a/include/PR/abi.h b/include/PR/abi.h index 15ae5d911..7d3113022 100644 --- a/include/PR/abi.h +++ b/include/PR/abi.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_ABI_H -#define ULTRA64_ABI_H +#ifndef PR_ABI_H +#define PR_ABI_H /* Audio commands: */ /* diff --git a/include/io/controller.h b/include/PR/controller.h similarity index 79% rename from include/io/controller.h rename to include/PR/controller.h index d29c11f1f..40dc48b8d 100644 --- a/include/io/controller.h +++ b/include/PR/controller.h @@ -1,14 +1,14 @@ -#ifndef _CONTROLLER_H_ -#define _CONTROLLER_H_ +#ifndef PR_CONTROLLER_H +#define PR_CONTROLLER_H -#include "PR/ultratypes.h" -#include "PR/pfs.h" +#include "ultratypes.h" +#include "os_cont.h" +#include "os_pfs.h" #define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) #define SIAccessQueueSize 2 #define BLOCKSIZE 32 -#define MAXCONTROLLERS 4 #define PFS_ONE_PAGE 8 #define PFS_PAGE_SIZE (BLOCKSIZE*PFS_ONE_PAGE) @@ -104,27 +104,6 @@ #define PFS_ERR_NOPACK 1 -/* controller errors */ -#define CONT_NO_RESPONSE_ERROR 0x8 -#define CONT_OVERRUN_ERROR 0x4 - -/* Controller type */ -#define CONT_ABSOLUTE 0x0001 -#define CONT_RELATIVE 0x0002 -#define CONT_JOYPORT 0x0004 -#define CONT_EEPROM 0x8000 -#define CONT_EEP16K 0x4000 -#define CONT_TYPE_MASK 0x1F07 -#define CONT_TYPE_NORMAL 0x0005 -#define CONT_TYPE_MOUSE 0x0002 -#define CONT_TYPE_VOICE 0x0100 - -/* Controller status */ -#define CONT_CARD_ON 0x01 -#define CONT_CARD_PULL 0x02 -#define CONT_ADDR_CRC_ER 0x04 -#define CONT_EEPROM_BUSY 0x80 - // Accessory detection #define CONT_ADDR_DETECT 0x8000 // Rumble @@ -145,22 +124,6 @@ #define CONT_BLOCK_GB_BANK CONT_BLOCKS(CONT_ADDR_GB_BANK) #define CONT_BLOCK_GB_STATUS CONT_BLOCKS(CONT_ADDR_GB_STATUS) -/* Buttons */ -#define BTN_CRIGHT 0x0001 -#define BTN_CLEFT 0x0002 -#define BTN_CDOWN 0x0004 -#define BTN_CUP 0x0008 -#define BTN_R 0x0010 -#define BTN_L 0x0020 -#define BTN_RESET 0x0080 -#define BTN_DRIGHT 0x0100 -#define BTN_DLEFT 0x0200 -#define BTN_DDOWN 0x0400 -#define BTN_DUP 0x0800 -#define BTN_START 0x1000 -#define BTN_Z 0x2000 -#define BTN_B 0x4000 -#define BTN_A 0x8000 typedef struct { /* 0x00 */ u32 ramarray[15]; @@ -213,6 +176,28 @@ typedef struct { #define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr)) +s32 __osCheckPackId(OSPfs* pfs, __OSPackId* check); +s32 __osGetId(OSPfs* pfs); +u16 __osSumcalc(u8* ptr, s32 length); +s32 __osIdCheckSum(u16* ptr, u16* checkSum, u16* idSum); +s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid); +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *check); +s32 __osCheckId(OSPfs* pfs); +s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank); +s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); +s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared, s32* finalPage); +s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 initialPage, u8 bank, __OSInodeUnit *finalPage); +s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer); +s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force); +void __osContGetInitData(u8* pattern, OSContStatus* data); +void __osPackRequestData(u8 poll); +void __osPfsRequestData(u8 poll); +void __osPfsGetInitData(u8* pattern, OSContStatus* contData); +u8 __osContAddressCrc(u16 addr); +u8 __osContDataCrc(u8* data); +s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); +s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); + extern OSPifRam __osContPifRam; // extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; diff --git a/include/ultra64/controller_voice.h b/include/PR/controller_voice.h similarity index 92% rename from include/ultra64/controller_voice.h rename to include/PR/controller_voice.h index a5480d877..022e69c03 100644 --- a/include/ultra64/controller_voice.h +++ b/include/PR/controller_voice.h @@ -1,9 +1,9 @@ -#ifndef CONTROLLER_VOICE_H -#define CONTROLLER_VOICE_H +#ifndef PR_CONTROLLER_VOICE_H +#define PR_CONTROLLER_VOICE_H -#include "PR/ultratypes.h" -#include "ultra64/os_voice.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_voice.h" +#include "os_message.h" #include "libc/stddef.h" typedef struct { diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 1b57c6a34..c6fcdc1e2 100644 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -1,7 +1,9 @@ #include "mbi.h" -#ifndef _ULTRA64_GBI_H_ -#define _ULTRA64_GBI_H_ +#ifndef PR_GBI_H +#define PR_GBI_H + +#include "ultratypes.h" /* To enable Fast3DEX grucode support, define F3DEX_GBI. */ @@ -1054,6 +1056,16 @@ typedef struct { unsigned char v[3]; } Tri; +typedef long int Mtx_t[4][4]; +typedef union { + Mtx_t m; + struct { + u16 intPart[4][4]; + u16 fracPart[4][4]; + }; + long long int force_structure_alignment; +} Mtx; // size = 0x40 + /* * Viewport */ diff --git a/include/ultra64/gs2dex.h b/include/PR/gs2dex.h similarity index 99% rename from include/ultra64/gs2dex.h rename to include/PR/gs2dex.h index 1e77f1cd3..55ef95238 100644 --- a/include/ultra64/gs2dex.h +++ b/include/PR/gs2dex.h @@ -1,5 +1,7 @@ -#ifndef GS2DEX_H -#define GS2DEX_H +#ifndef PR_GS2DEX_H +#define PR_GS2DEX_H + +#include "ultratypes.h" #ifdef _LANGUAGE_C_PLUS_PLUS extern "C" { diff --git a/include/PR/gu.h b/include/PR/gu.h index 8bafcf7d3..51beaf97b 100644 --- a/include/PR/gu.h +++ b/include/PR/gu.h @@ -1,26 +1,63 @@ -#ifndef _GU_H_ -#define _GU_H_ +#ifndef PR_GU_H +#define PR_GU_H -typedef struct { - /* 0x0 */ unsigned char* base; - /* 0x4 */ int fmt; - /* 0x8 */ int siz; - /* 0xC */ int xsize; - /* 0x10 */ int ysize; - /* 0x14 */ int lsize; - /* 0x18 */ int addr; - /* 0x1C */ int w; - /* 0x20 */ int h; - /* 0x24 */ int s; - /* 0x28 */ int t; -} Image; +#include "ultratypes.h" +#include "gbi.h" -typedef struct { - /* 0x0 */ float col[3]; - /* 0xC */ float pos[3]; - /* 0x18 */ float a1; - /* 0x1C */ float a2; -} PositionalLight; +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif + +#define M_DTOR (3.14159265358979323846/180.0) + +#define FTOFIX32(x) (long)((x) * (float)0x00010000) +#define FIX32TOF(x) ((float)(x) * (1.0f / (float)0x00010000)) +#define FTOFRAC8(x) ((int) MIN(((x) * (128.0f)), 127.0f) & 0xff) + + +void guMtxIdent(Mtx* mtx); +void guMtxIdentF(float mf[4][4]); + +void guOrtho(Mtx* m, f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); +void guOrthoF(float m[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); + +void guPerspective(Mtx* m, u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); +void guPerspectiveF(float mf[4][4], u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); + +void guLookAt(Mtx* m, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); +void guLookAtF(float mf[4][4], f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); + +void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); +void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); + +void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); +void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); + +void guScale(Mtx* mtx, f32 x, f32 y, f32 z); +void guTranslate(Mtx* mtx, f32 x, f32 y, f32 z); + +void guPosition(Mtx* m, f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); +void guPositionF(float mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); + +void guMtxF2L(float mf[4][4], Mtx* m); +void guMtxL2F(float m1[4][4], Mtx* m2); + +void guNormalize(float* x, float* y, float* z); + + +f32 sinf(f32 __x); +f32 cosf(f32 __x); + +s16 sins(u16 x); +s16 coss(u16 x); + +f32 sqrtf(f32 f); +#ifdef __sgi +#pragma intrinsic(sqrtf); +#endif #endif diff --git a/include/ultra64/hardware.h b/include/PR/hardware.h similarity index 98% rename from include/ultra64/hardware.h rename to include/PR/hardware.h index 57d560ab0..3bcf1b7fc 100644 --- a/include/ultra64/hardware.h +++ b/include/PR/hardware.h @@ -1,6 +1,8 @@ #ifndef _ULTRA64_HARDWARE_H_ #define _ULTRA64_HARDWARE_H_ +// TODO: not real libultra header. Refactor to R4300.h + // Segment Wrapper // Uncached RDRAM #define KSEG1 0xA0000000 // 0xA0000000 - 0xBFFFFFFF Physical memory, uncached, unmapped diff --git a/include/PR/mbi.h b/include/PR/mbi.h index 0577165e7..f72ad9acd 100644 --- a/include/PR/mbi.h +++ b/include/PR/mbi.h @@ -1,5 +1,5 @@ -#ifndef _MBI_H_ -#define _MBI_H_ +#ifndef PR_MBI_H +#define PR_MBI_H /************************************************************************** * * diff --git a/include/PR/os.h b/include/PR/os.h new file mode 100644 index 000000000..1b39d79a1 --- /dev/null +++ b/include/PR/os.h @@ -0,0 +1,27 @@ +#ifndef PR_OS_H +#define PR_OS_H + +#include "os_ai.h" +#include "os_cache.h" +#include "os_cont.h" +#include "os_convert.h" +#include "os_exception.h" +#include "os_flash.h" +#include "os_host.h" +#include "os_internal_error.h" +#include "os_internal_reg.h" +#include "os_internal_si.h" +#include "os_internal.h" +#include "os_libc.h" +#include "os_message.h" +#include "os_pfs.h" +#include "os_pi.h" +#include "os_reg.h" +#include "os_system.h" +#include "os_thread.h" +#include "os_time.h" +#include "os_tlb.h" +#include "os_vi.h" +#include "os_voice.h" + +#endif diff --git a/include/PR/os_ai.h b/include/PR/os_ai.h new file mode 100644 index 000000000..22f50d41e --- /dev/null +++ b/include/PR/os_ai.h @@ -0,0 +1,12 @@ +#ifndef PR_OS_AI_H +#define PR_OS_AI_H + +#include "ultratypes.h" + + +u32 osAiGetLength(void); +s32 osAiSetFrequency(u32 frequency); +s32 osAiSetNextBuffer(void* buf, u32 size); + + +#endif diff --git a/include/PR/os_cache.h b/include/PR/os_cache.h new file mode 100644 index 000000000..8a920c728 --- /dev/null +++ b/include/PR/os_cache.h @@ -0,0 +1,12 @@ +#ifndef PR_OS_CACHE_H +#define PR_OS_CACHE_H + +#include "ultratypes.h" +#include "libc/stddef.h" + +void osInvalDCache(void* vaddr, size_t nbytes); +void osInvalICache(void* vaddr, size_t nbytes); +void osWritebackDCache(void* vaddr, s32 nbytes); +void osWritebackDCacheAll(void); + +#endif diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h new file mode 100644 index 000000000..6a63b8901 --- /dev/null +++ b/include/PR/os_cont.h @@ -0,0 +1,79 @@ +#ifndef PR_OS_CONT_H +#define PR_OS_CONT_H + +#include "ultratypes.h" +#include "os_message.h" + + +typedef struct { + /* 0x0 */ u16 type; + /* 0x2 */ u8 status; + /* 0x3 */ u8 errno; +} OSContStatus; // size = 0x4 + +typedef struct { + /* 0x0 */ u16 button; + /* 0x2 */ s8 stick_x; + /* 0x3 */ s8 stick_y; + /* 0x4 */ u8 errno; +} OSContPad; // size = 0x6 + +#define MAXCONTROLLERS 4 + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 + +/* Controller type */ +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1F07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 +#define CONT_TYPE_VOICE 0x0100 + +/* Controller status */ +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +// TODO: use real libultra button defines instead of this +/* Buttons */ +#define BTN_CRIGHT 0x0001 +#define BTN_CLEFT 0x0002 +#define BTN_CDOWN 0x0004 +#define BTN_CUP 0x0008 +#define BTN_R 0x0010 +#define BTN_L 0x0020 +#define BTN_RESET 0x0080 +#define BTN_DRIGHT 0x0100 +#define BTN_DLEFT 0x0200 +#define BTN_DDOWN 0x0400 +#define BTN_DUP 0x0800 +#define BTN_START 0x1000 +#define BTN_Z 0x2000 +#define BTN_B 0x4000 +#define BTN_A 0x8000 + +#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */ +#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */ +#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */ +#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */ +#define CONT_ERR_NOT_READY 12 +#define CONT_ERR_VOICE_MEMORY 13 +#define CONT_ERR_VOICE_WORD 14 +#define CONT_ERR_VOICE_NO_RESPONSE 15 + + +s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); +s32 osContStartQuery(OSMesgQueue* mq); +s32 osContStartReadData(OSMesgQueue* mq); +s32 osContSetCh(u8 ch); +void osContGetQuery(OSContStatus* data); +void osContGetReadData(OSContPad* data); + +#endif diff --git a/include/ultra64/convert.h b/include/PR/os_convert.h similarity index 90% rename from include/ultra64/convert.h rename to include/PR/os_convert.h index 68e91a85a..468d77f9a 100644 --- a/include/ultra64/convert.h +++ b/include/PR/os_convert.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_CONVERT_H -#define ULTRA64_CONVERT_H +#ifndef PR_CONVERT_H +#define PR_CONVERT_H #include "libc/stdint.h" @@ -24,6 +24,5 @@ /* Functions */ extern uintptr_t osVirtualToPhysical(void*); -extern void* osPhysicalToVirtual(uintptr_t); #endif diff --git a/include/PR/os_exception.h b/include/PR/os_exception.h new file mode 100644 index 000000000..b5c2e7ba8 --- /dev/null +++ b/include/PR/os_exception.h @@ -0,0 +1,21 @@ +#ifndef PR_OS_EXCEPTION_H +#define PR_OS_EXCEPTION_H + +#include "ultratypes.h" + + +typedef u32 OSIntMask; +typedef u32 OSHWIntr; + +OSIntMask osGetIntMask(void); +OSIntMask osSetIntMask(OSIntMask im); + + +// Internal +void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg); +void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg); +void __osSetGlobalIntMask(OSHWIntr mask); +void __osResetGlobalIntMask(OSHWIntr mask); + + +#endif diff --git a/include/PR/os_flash.h b/include/PR/os_flash.h new file mode 100644 index 000000000..36e728c5a --- /dev/null +++ b/include/PR/os_flash.h @@ -0,0 +1,23 @@ +#ifndef PR_OS_FLASH_H +#define PR_OS_FLASH_H + +#include "ultratypes.h" +#include "os_pi.h" + + +OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); +OSPiHandle* osFlashInit(void); +void osFlashReadStatus(u8* flashStatus); +void osFlashReadId(u32* flashType, u32* flashVendor); +void osFlashClearStatus(void); +s32 osFlashAllErase(void); +s32 osFlashSectorErase(u32 pageNum); +s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq); +s32 osFlashWriteArray(u32 pageNum); +s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq); +void osFlashChange(u32 flashNum); +void osFlashAllEraseThrough(void); +void osFlashSectorEraseThrough(u32 pageNum); +s32 osFlashCheckEraseEnd(void); + +#endif diff --git a/include/PR/os_host.h b/include/PR/os_host.h new file mode 100644 index 000000000..5d0ad482f --- /dev/null +++ b/include/PR/os_host.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_HOST_H +#define PR_OS_HOST_H + +void __osInitialize_common(void); +void __osInitialize_autodetect(void); + +#define osInitialize() __osInitialize_common() + +#endif diff --git a/include/os_internal.h b/include/PR/os_internal.h similarity index 80% rename from include/os_internal.h rename to include/PR/os_internal.h index 2d82b41a9..eadd0182b 100644 --- a/include/os_internal.h +++ b/include/PR/os_internal.h @@ -1,5 +1,10 @@ -#ifndef _OS_INTERNAL_H_ -#define _OS_INTERNAL_H_ +#ifndef PR_OS_INTERNAL_H +#define PR_OS_INTERNAL_H + +#include "ultratypes.h" +#include "os_message.h" +#include "os_pi.h" + typedef struct { /* 0x00 */ OSMesgQueue* queue; diff --git a/include/PR/os_internal_error.h b/include/PR/os_internal_error.h new file mode 100644 index 000000000..db2c8b981 --- /dev/null +++ b/include/PR/os_internal_error.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_INTERNAL_ERROR_H +#define PR_OS_INTERNAL_ERROR_H + +#include "os_thread.h" + + +OSThread* __osGetCurrFaultedThread(void); + +#endif diff --git a/include/PR/os_internal_reg.h b/include/PR/os_internal_reg.h new file mode 100644 index 000000000..753692017 --- /dev/null +++ b/include/PR/os_internal_reg.h @@ -0,0 +1,24 @@ +#ifndef PR_OS_INTERNAL_REG +#define PR_OS_INTERNAL_REG + +#include "ultratypes.h" +#include "os_exception.h" + + +u32 __osGetCause(void); +void __osSetCause(u32); +u32 __osGetCompare(void); +void __osSetCompare(u32 value); +u32 __osGetConfig(void); +void __osSetConfig(u32); +u32 __osGetSR(void); +void __osSetSR(u32 value); +OSIntMask __osDisableInt(void); +void __osRestoreInt(OSIntMask im); +u32 __osGetWatchLo(void); +void __osSetWatchLo(u32 value); + +u32 __osSetFpcCsr(u32 value); +u32 __osGetFpcCsr(void); + +#endif diff --git a/include/PR/os_internal_si.h b/include/PR/os_internal_si.h new file mode 100644 index 000000000..e1d88acca --- /dev/null +++ b/include/PR/os_internal_si.h @@ -0,0 +1,13 @@ +#ifndef PR_OS_INTERNAL_SI_H +#define PR_OS_INTERNAL_SI_H + +#include "ultratypes.h" +#include "libc/stdint.h" + + +s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data); +s32 __osSiRawReadIo(uintptr_t devAddr, u32* data); +s32 __osSiRawStartDma(s32 direction, void* dramAddr); + + +#endif diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h new file mode 100644 index 000000000..755f24692 --- /dev/null +++ b/include/PR/os_libc.h @@ -0,0 +1,15 @@ +#ifndef PR_OS_LIBC_H +#define PR_OS_LIBC_H + +#include "libc/stdarg.h" + + +void bcopy(void* __src, void* __dest, int __n); +int bcmp(void* __s1, void* __s2, int __n); +void bzero(void* begin, int length); + +s32 vsprintf(char* dst, char* fmt, va_list args); +int sprintf(char* dst, const char* fmt, ...); +void osSyncPrintf(const char* fmt, ...); + +#endif diff --git a/include/ultra64/message.h b/include/PR/os_message.h similarity index 79% rename from include/ultra64/message.h rename to include/PR/os_message.h index de0c39b83..bb577f57b 100644 --- a/include/ultra64/message.h +++ b/include/PR/os_message.h @@ -1,7 +1,19 @@ -#ifndef ULTRA64_MESSAGE_H -#define ULTRA64_MESSAGE_H +#ifndef PR_OS_MESSAGE_H +#define PR_OS_MESSAGE_H -#include "ultra64/thread.h" +#include "os_thread.h" + +typedef void* OSMesg; +typedef u32 OSEvent; + +typedef struct OSMesgQueue { + /* 0x00 */ OSThread* mtQueue; + /* 0x04 */ OSThread* fullQueue; + /* 0x08 */ s32 validCount; + /* 0x0C */ s32 first; + /* 0x10 */ s32 msgCount; + /* 0x14 */ OSMesg* msg; +} OSMesgQueue; // size = 0x18 #define OS_NUM_EVENTS 15 @@ -30,24 +42,20 @@ #define OS_EVENT_RDB_FLUSH_PROF 21 #define OS_EVENT_RDB_ACK_PROF 22 -typedef void* OSMesg; -typedef u32 OSEvent; - #define OS_MESG_NOBLOCK 0 #define OS_MESG_BLOCK 1 -typedef struct OSMesgQueue { - /* 0x00 */ OSThread* mtQueue; - /* 0x04 */ OSThread* fullQueue; - /* 0x08 */ s32 validCount; - /* 0x0C */ s32 first; - /* 0x10 */ s32 msgCount; - /* 0x14 */ OSMesg* msg; -} OSMesgQueue; // size = 0x18 +#define MQ_GET_COUNT(mq) ((mq)->validCount) -#define MQ_COUNT(mq) ((mq)->validCount) +#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) +#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) + +void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count); +s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags); +s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); +s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); + +void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); -#define MQ_IS_EMPTY(mq) (MQ_COUNT(mq) == 0) -#define MQ_IS_FULL(mq) (MQ_COUNT(mq) >= (mq)->msgCount) #endif diff --git a/include/ultra64/motor.h b/include/PR/os_motor.h similarity index 68% rename from include/ultra64/motor.h rename to include/PR/os_motor.h index ed969b3de..378768588 100644 --- a/include/ultra64/motor.h +++ b/include/PR/os_motor.h @@ -1,9 +1,9 @@ -#ifndef ULTRA64_MOTOR_H -#define ULTRA64_MOTOR_H +#ifndef PR_OS_MOTOR_H +#define PR_OS_MOTOR_H -#include "PR/ultratypes.h" -#include "PR/pfs.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_pfs.h" +#include "os_message.h" #define MOTOR_START 1 #define MOTOR_STOP 0 diff --git a/include/PR/pfs.h b/include/PR/os_pfs.h similarity index 86% rename from include/PR/pfs.h rename to include/PR/os_pfs.h index 596fafbfe..4ce1acd52 100644 --- a/include/PR/pfs.h +++ b/include/PR/os_pfs.h @@ -1,5 +1,5 @@ -#ifndef _ULTRA64_PFS_H_ -#define _ULTRA64_PFS_H_ +#ifndef PR_OS_PFS_H +#define PR_OS_PFS_H #include "os.h" @@ -134,8 +134,16 @@ typedef struct { /* 0x101 */ u8 map[PFS_INODE_DIST_MAP]; } __OSInodeCache; // size = 0x202 -s32 __osCheckPackId(OSPfs* pfs, __OSPackId* check); -s32 __osGetId(OSPfs* pfs); + +s32 osPfsInitPak(OSMesgQueue* queue, OSPfs* pfs, s32 channel); s32 osPfsChecker(OSPfs* pfs); +s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32 fileSize, s32* fileNo); +s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo); +s32 osPfsDeleteFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName); +s32 osPfsReadWriteFile(OSPfs* pfs, s32 fileNo, u8 flag, s32 offset, s32 size, u8* data); +s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state); +s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); +s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes); + #endif diff --git a/include/os.h b/include/PR/os_pi.h similarity index 69% rename from include/os.h rename to include/PR/os_pi.h index 47fed80a0..2e67ca840 100644 --- a/include/os.h +++ b/include/PR/os_pi.h @@ -1,10 +1,76 @@ -#ifndef _OS_H_ -#define _OS_H_ +#ifndef PR_OS_PI_H +#define PR_OS_PI_H +#include "ultratypes.h" +#include "os_message.h" +#include "libc/stddef.h" #include "libc/stdint.h" -#include "libc/stdlib.h" -#include "ultra64/thread.h" -#include "ultra64/message.h" + + +typedef struct { + /* 0x00 */ u32 errStatus; + /* 0x04 */ void* dramAddr; + /* 0x08 */ void* C2Addr; + /* 0x0C */ u32 sectorSize; + /* 0x10 */ u32 C1ErrNum; + /* 0x14 */ u32 C1ErrSector[4]; +} __OSBlockInfo; // size = 0x24 + +typedef struct { + /* 0x00 */ u32 cmdType; + /* 0x04 */ u16 transferMode; + /* 0x06 */ u16 blockNum; + /* 0x08 */ s32 sectorNum; + /* 0x0C */ uintptr_t devAddr; + /* 0x10 */ u32 bmCtlShadow; + /* 0x14 */ u32 seqCtlShadow; + /* 0x18 */ __OSBlockInfo block[2]; +} __OSTranxInfo; // size = 0x60 + +typedef struct OSPiHandle { + /* 0x00 */ struct OSPiHandle* next; + /* 0x04 */ u8 type; + /* 0x05 */ u8 latency; + /* 0x06 */ u8 pageSize; + /* 0x07 */ u8 relDuration; + /* 0x08 */ u8 pulse; + /* 0x09 */ u8 domain; + /* 0x0C */ uintptr_t baseAddress; + /* 0x10 */ u32 speed; + /* 0x14 */ __OSTranxInfo transferInfo; +} OSPiHandle; // size = 0x74 + +typedef struct { + /* 0x0 */ u8 type; + /* 0x4 */ uintptr_t address; +} OSPiInfo; // size = 0x8 + +typedef struct { + /* 0x0 */ u16 type; + /* 0x2 */ u8 pri; + /* 0x3 */ u8 status; + /* 0x4 */ OSMesgQueue* retQueue; +} OSIoMesgHdr; // size = 0x8 + +typedef struct { + /* 0x00 */ OSIoMesgHdr hdr; + /* 0x08 */ void* dramAddr; + /* 0x0C */ uintptr_t devAddr; + /* 0x10 */ size_t size; + /* 0x14 */ OSPiHandle* piHandle; +} OSIoMesg; // size = 0x88 + +typedef struct { + /* 0x00 */ s32 active; // u32 maybe? need to check + /* 0x04 */ OSThread* thread; + /* 0x08 */ OSMesgQueue* cmdQueue; + /* 0x0C */ OSMesgQueue* evtQueue; + /* 0x10 */ OSMesgQueue* acsQueue; + /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t); + /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t); +} OSDevMgr; // size = 0x1C + + #define OS_READ 0 #define OS_WRITE 1 @@ -28,118 +94,13 @@ #define OS_MESG_PRI_HIGH 1 -typedef u32 OSIntMask; +void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); -typedef u32 OSPageMask; +OSPiHandle* osCartRomInit(void); -typedef struct { - /* 0x00 */ u32 errStatus; - /* 0x04 */ void* dramAddr; - /* 0x08 */ void* C2Addr; - /* 0x0C */ u32 sectorSize; - /* 0x10 */ u32 C1ErrNum; - /* 0x14 */ u32 C1ErrSector[4]; -} __OSBlockInfo; // size = 0x24 - - -typedef struct { - /* 0x00 */ u32 cmdType; - /* 0x04 */ u16 transferMode; - /* 0x06 */ u16 blockNum; - /* 0x08 */ s32 sectorNum; - /* 0x0C */ uintptr_t devAddr; - /* 0x10 */ u32 bmCtlShadow; - /* 0x14 */ u32 seqCtlShadow; - /* 0x18 */ __OSBlockInfo block[2]; -} __OSTranxInfo; // size = 0x60 - - -typedef struct OSPiHandle { - /* 0x00 */ struct OSPiHandle* next; - /* 0x04 */ u8 type; - /* 0x05 */ u8 latency; - /* 0x06 */ u8 pageSize; - /* 0x07 */ u8 relDuration; - /* 0x08 */ u8 pulse; - /* 0x09 */ u8 domain; - /* 0x0C */ uintptr_t baseAddress; - /* 0x10 */ u32 speed; - /* 0x14 */ __OSTranxInfo transferInfo; -} OSPiHandle; // size = 0x74 - - -typedef struct { - /* 0x0 */ u8 type; - /* 0x4 */ uintptr_t address; -} OSPiInfo; // size = 0x8 - - -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u8 pri; - /* 0x3 */ u8 status; - /* 0x4 */ OSMesgQueue* retQueue; -} OSIoMesgHdr; // size = 0x8 - - -typedef struct { - /* 0x00 */ OSIoMesgHdr hdr; - /* 0x08 */ void* dramAddr; - /* 0x0C */ uintptr_t devAddr; - /* 0x10 */ size_t size; - /* 0x14 */ OSPiHandle* piHandle; -} OSIoMesg; // size = 0x88 - - -typedef struct { - /* 0x00 */ s32 active; // u32 maybe? need to check - /* 0x04 */ OSThread* thread; - /* 0x08 */ OSMesgQueue* cmdQueue; - /* 0x0C */ OSMesgQueue* evtQueue; - /* 0x10 */ OSMesgQueue* acsQueue; - /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t); - /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t); -} OSDevMgr; // size = 0x1C - -typedef u64 OSTime; - -typedef struct OSTimer_s { - /* 0x00 */ struct OSTimer_s* next; - /* 0x04 */ struct OSTimer_s* prev; - /* 0x08 */ OSTime interval; - /* 0x10 */ OSTime value; - /* 0x18 */ OSMesgQueue* mq; - /* 0x1C */ OSMesg msg; -} OSTimer; // size = 0x20 - -typedef struct { - /* 0x0 */ u16 type; - /* 0x2 */ u8 status; - /* 0x3 */ u8 errno; -} OSContStatus; // size = 0x4 - - -typedef struct { - /* 0x0 */ u16 button; - /* 0x2 */ s8 stick_x; - /* 0x3 */ s8 stick_y; - /* 0x4 */ u8 errno; -} OSContPad; // size = 0x6 - - -typedef struct { - /* 0x00 */ void* address; - /* 0x04 */ u8 databuffer[32]; - /* 0x24 */ u8 addressCrc; - /* 0x25 */ u8 dataCrc; - /* 0x26 */ u8 errno; -} OSContRamIo; // size = 0x28 - -typedef struct { - /* 0x0 */ u16* histo_base; - /* 0x4 */ u32 histo_size; - /* 0x8 */ u32* text_start; - /* 0xC */ u32* text_end; -} OSProf; // size = 0x10 +s32 osEPiWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); +s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); +s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); +s32 osEPiLinkHandle(OSPiHandle* handle); #endif diff --git a/include/PR/os_reg.h b/include/PR/os_reg.h new file mode 100644 index 000000000..043c7ce9f --- /dev/null +++ b/include/PR/os_reg.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_REG_H +#define PR_OS_REG_H + +#include "ultratypes.h" + + +u32 osGetCount(void); + +#endif diff --git a/include/PR/os_system.h b/include/PR/os_system.h new file mode 100644 index 000000000..21f06f164 --- /dev/null +++ b/include/PR/os_system.h @@ -0,0 +1,10 @@ +#ifndef PR_OS_SYSTEM_H +#define PR_OS_SYSTEM_H + +#include "ultratypes.h" + + +u32 osGetMemSize(void); +s32 osAfterPreNMI(void); + +#endif diff --git a/include/ultra64/thread.h b/include/PR/os_thread.h similarity index 81% rename from include/ultra64/thread.h rename to include/PR/os_thread.h index 4adf025e1..b88520087 100644 --- a/include/ultra64/thread.h +++ b/include/PR/os_thread.h @@ -1,31 +1,7 @@ -#ifndef _ULTRA64_THREAD_H_ -#define _ULTRA64_THREAD_H_ +#ifndef PR_OS_THREAD_H +#define PR_OS_THREAD_H -#include "PR/ultratypes.h" - -#define OS_PRIORITY_IDLE 0 -#define OS_PRIORITY_MAIN 10 -#define OS_PRIORITY_GRAPH 11 -#define OS_PRIORITY_AUDIOMGR 12 -#define OS_PRIORITY_PADMGR 14 -#define OS_PRIORITY_SCHED 15 -#define OS_PRIORITY_DMAMGR 16 -#define OS_PRIORITY_IRQMGR 17 -#define OS_PRIORITY_PIMGR 150 -#define OS_PRIORITY_FAULTCLIENT 126 -#define OS_PRIORITY_FAULT 127 -#define OS_PRIORITY_APPMAX 127 -#define OS_PRIORITY_RMONSPIN 200 -#define OS_PRIORITY_RMON 250 -#define OS_PRIORITY_VIMGR 254 -#define OS_PRIORITY_MAX 255 - -#define OS_PRIORITY_THREADTAIL -1 - -#define OS_STATE_STOPPED (1 << 0) -#define OS_STATE_RUNNABLE (1 << 1) -#define OS_STATE_RUNNING (1 << 2) -#define OS_STATE_WAITING (1 << 3) +#include "ultratypes.h" #define OS_FLAG_CPU_BREAK 1 #define OS_FLAG_FAULT 2 @@ -71,4 +47,42 @@ typedef struct OSThread { /* 0x20 */ __OSThreadContext context; } OSThread; // size = 0x1B0 +#define OS_STATE_STOPPED (1 << 0) +#define OS_STATE_RUNNABLE (1 << 1) +#define OS_STATE_RUNNING (1 << 2) +#define OS_STATE_WAITING (1 << 3) + + +#define OS_PRIORITY_IDLE 0 +#define OS_PRIORITY_MAIN 10 +#define OS_PRIORITY_GRAPH 11 +#define OS_PRIORITY_AUDIOMGR 12 +#define OS_PRIORITY_PADMGR 14 +#define OS_PRIORITY_SCHED 15 +#define OS_PRIORITY_DMAMGR 16 +#define OS_PRIORITY_IRQMGR 17 +#define OS_PRIORITY_PIMGR 150 +#define OS_PRIORITY_FAULTCLIENT 126 +#define OS_PRIORITY_FAULT 127 +#define OS_PRIORITY_APPMAX 127 +#define OS_PRIORITY_RMONSPIN 200 +#define OS_PRIORITY_RMON 250 +#define OS_PRIORITY_VIMGR 254 +#define OS_PRIORITY_MAX 255 + +#define OS_PRIORITY_THREADTAIL -1 + + +void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p); +void osDestroyThread(OSThread* t); +void osYieldThread(void); +void osStartThread(OSThread* t); +void osStopThread(OSThread* t); +OSId osGetThreadId(OSThread* t); +void osSetThreadPri(OSThread* thread, OSPri p); +OSPri osGetThreadPri(OSThread* t); + +// internal +OSThread* __osGetActiveQueue(void); + #endif diff --git a/include/PR/os_time.h b/include/PR/os_time.h new file mode 100644 index 000000000..31702c0bb --- /dev/null +++ b/include/PR/os_time.h @@ -0,0 +1,25 @@ +#ifndef PR_OS_TIME_H +#define PR_OS_TIME_H + +#include "ultratypes.h" +#include "os_message.h" + + +typedef u64 OSTime; + +typedef struct OSTimer_s { + /* 0x00 */ struct OSTimer_s* next; + /* 0x04 */ struct OSTimer_s* prev; + /* 0x08 */ OSTime interval; + /* 0x10 */ OSTime value; + /* 0x18 */ OSMesgQueue* mq; + /* 0x1C */ OSMesg msg; +} OSTimer; // size = 0x20 + +OSTime osGetTime(void); +void osSetTime(OSTime ticks); +s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); +s32 osStopTimer(OSTimer* t); + + +#endif diff --git a/include/PR/os_tlb.h b/include/PR/os_tlb.h new file mode 100644 index 000000000..7d0b5a341 --- /dev/null +++ b/include/PR/os_tlb.h @@ -0,0 +1,9 @@ +#ifndef PR_OS_TLB_H +#define PR_OS_TLB_H + +#include "ultratypes.h" + +void osMapTLBRdb(void); +void osUnmapTLBAll(void); + +#endif diff --git a/include/ultra64/vi.h b/include/PR/os_vi.h similarity index 86% rename from include/ultra64/vi.h rename to include/PR/os_vi.h index 7737b58b4..e4098e97e 100644 --- a/include/ultra64/vi.h +++ b/include/PR/os_vi.h @@ -1,8 +1,8 @@ -#ifndef _ULTRA64_VI_H_ -#define _ULTRA64_VI_H_ +#ifndef PR_OS_VI_H +#define PR_OS_VI_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" /* Special Features */ #define OS_VI_GAMMA_ON (1 << 0) @@ -52,23 +52,6 @@ typedef struct { /* 0x24 */ OSViFieldRegs fldRegs[2]; } OSViMode; // size = 0x4C -typedef struct { - /* 0x0 */ f32 factor; - /* 0x4 */ u16 offset; - /* 0x8 */ u32 scale; -} __OSViScale; // size = 0x0C - -typedef struct { - /* 0x00 */ u16 state; - /* 0x02 */ u16 retraceCount; - /* 0x04 */ void* buffer; - /* 0x08 */ OSViMode* modep; - /* 0x0C */ u32 features; - /* 0x10 */ OSMesgQueue* mq; - /* 0x14 */ OSMesg* msg; - /* 0x18 */ __OSViScale x; - /* 0x24 */ __OSViScale y; -} __OSViContext; // size = 0x30 #define OS_VI_NTSC_LPN1 0 /* NTSC */ #define OS_VI_NTSC_LPF1 1 @@ -135,4 +118,18 @@ typedef struct { #define OS_TV_MPAL 2 #define OS_VI_UNK28 28 + +void* osViGetCurrentFramebuffer(void); +void* osViGetNextFramebuffer(void); +void osViSetXScale(f32 value); +void osViSetYScale(f32 value); +void osViExtendVStart(u32 a0); +void osViSetSpecialFeatures(u32 func); +void osViSetMode(OSViMode* modep); +void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); +void osViSwapBuffer(void* frameBufPtr); +void osViBlack(u8 active); +void osCreateViManager(OSPri pri); + + #endif diff --git a/include/ultra64/os_voice.h b/include/PR/os_voice.h similarity index 84% rename from include/ultra64/os_voice.h rename to include/PR/os_voice.h index 8452ed45c..c6317a28c 100644 --- a/include/ultra64/os_voice.h +++ b/include/PR/os_voice.h @@ -1,8 +1,8 @@ -#ifndef OS_VOICE_H -#define OS_VOICE_H +#ifndef PR_OS_VOICE_H +#define PR_OS_VOICE_H -#include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "ultratypes.h" +#include "os_message.h" typedef enum OsVoiceHandleMode { /* 0 */ VOICE_HANDLE_MODE_0, @@ -29,14 +29,15 @@ typedef struct { /* 0x14 */ u16 distance[5]; // Distance value } OSVoiceData; // size = 0x20 -s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel); + +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, int channel); s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word); s32 osVoiceCheckWord(u8* word); s32 osVoiceStartReadData(OSVoiceHandle* hd); s32 osVoiceStopReadData(OSVoiceHandle* hd); s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result); s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords); -s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size); +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, int size); s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital); #endif diff --git a/include/PR/osint.h b/include/PR/osint.h new file mode 100644 index 000000000..c2e1a2b90 --- /dev/null +++ b/include/PR/osint.h @@ -0,0 +1,38 @@ +#ifndef PR_OSINT_H +#define PR_OSINT_H + +#include "ultratypes.h" +#include "os_message.h" +#include "os.h" +#include "os_internal.h" + +typedef struct __OSEventState { + /* 0x0 */ OSMesgQueue* messageQueue; + /* 0x4 */ OSMesg message; +} __OSEventState; // size = 0x8 + +typedef struct __OSThreadTail { + /* 0x0 */ OSThread* next; + /* 0x4 */ OSPri priority; +} __OSThreadTail; // size = 0x8 + +void __osEnqueueAndYield(OSThread** param_1); +void __osDequeueThread(OSThread** queue, OSThread* t); +void __osEnqueueThread(OSThread** param_1, OSThread* param_2); +OSThread* __osPopThread(OSThread** param_1); +void __osDispatchThread(void); +void __osCleanupThread(void); + +void __osSetTimerIntr(OSTime tim); +OSTime __osInsertTimer(OSTimer* t); +void __osTimerInterrupt(void); +u32 __osProbeTLB(void* param_1); +s32 __osSpDeviceBusy(void); + +void __osTimerServicesInit(void); + +extern __osHwInt __osHwIntTable[]; +extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; + + +#endif diff --git a/include/PR/piint.h b/include/PR/piint.h new file mode 100644 index 000000000..0ca1f0d2e --- /dev/null +++ b/include/PR/piint.h @@ -0,0 +1,20 @@ +#ifndef PR_PIINT_H +#define PR_PIINT_H + +#include "ultratypes.h" +#include "os_pi.h" +#include "libc/stdint.h" + + +void __osDevMgrMain(void* arg); +void __osPiCreateAccessQueue(void); +void __osPiRelAccess(void); +void __osPiGetAccess(void); +s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size); +s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); +s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); +s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); +OSMesgQueue* osPiGetCmdQueue(void); + + +#endif diff --git a/include/ultra64/r4300.h b/include/PR/r4300.h similarity index 99% rename from include/ultra64/r4300.h rename to include/PR/r4300.h index 30e8a9ea8..37d7e8946 100644 --- a/include/ultra64/r4300.h +++ b/include/PR/r4300.h @@ -1,8 +1,8 @@ -#ifndef ULTRA64_R4300_H -#define ULTRA64_R4300_H +#ifndef PR_R4300_H +#define PR_R4300_H #ifdef _LANGUAGE_C -#include "PR/ultratypes.h" +#include "ultratypes.h" #define U32(x) ((u32)x) #define C_REG(x) (x) #else diff --git a/include/ultra64/rcp.h b/include/PR/rcp.h similarity index 83% rename from include/ultra64/rcp.h rename to include/PR/rcp.h index 7a336be28..1c97c64e3 100644 --- a/include/ultra64/rcp.h +++ b/include/PR/rcp.h @@ -1,5 +1,5 @@ -#ifndef _ULTRA64_RCP_H_ -#define _ULTRA64_RCP_H_ +#ifndef PR_RCP_H +#define PR_RCP_H #define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ #define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ @@ -11,7 +11,6 @@ #define DEVICE_TYPE_SRAM 3 /* SRAM */ #define DEVICE_TYPE_INIT 7 /* initial value */ - #define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ #define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ #define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */ @@ -19,4 +18,7 @@ #define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ +#define IO_READ(addr) (*(vu32*)PHYS_TO_K1(addr)) +#define IO_WRITE(addr,data) (*(vu32*)PHYS_TO_K1(addr)=(u32)(data)) + #endif diff --git a/include/ultra64/rdp.h b/include/PR/rdp.h similarity index 94% rename from include/ultra64/rdp.h rename to include/PR/rdp.h index b4b3bb532..4bd6bc99d 100644 --- a/include/ultra64/rdp.h +++ b/include/PR/rdp.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_RDP_H -#define ULTRA64_RDP_H +#ifndef PR_RDP_H +#define PR_RDP_H /* DP Command Registers */ #define DPC_START_REG 0x04100000 @@ -42,4 +42,9 @@ #define DPC_CLR_CMD_CTR (1 << 8) #define DPC_CLR_CLOCK_CTR (1 << 9) + +u32 osDpGetStatus(void); +void osDpSetStatus(u32 data); + + #endif diff --git a/include/ultra64/rsp.h b/include/PR/rsp.h similarity index 86% rename from include/ultra64/rsp.h rename to include/PR/rsp.h index f8ec4ef51..467db831c 100644 --- a/include/ultra64/rsp.h +++ b/include/PR/rsp.h @@ -1,5 +1,9 @@ -#ifndef _ULTRA64_RSP_H_ -#define _ULTRA64_RSP_H_ +#ifndef PR_RSP_H +#define PR_RSP_H + +#include "ultratypes.h" +#include "libc/stddef.h" + /* SP Status Flags */ #define SP_STATUS_HALT (1 << 0) @@ -44,4 +48,11 @@ #define SP_CLR_SIG7 (1 << 23) #define SP_SET_SIG7 (1 << 24) + +u32 __osSpGetStatus(void); +void __osSpSetStatus(u32 data); +s32 __osSpSetPc(void* pc); +s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); + + #endif diff --git a/include/PR/sched.h b/include/PR/sched.h index d0aac1d0e..7db228a5d 100644 --- a/include/PR/sched.h +++ b/include/PR/sched.h @@ -1,9 +1,16 @@ -#ifndef SCHED_H -#define SCHED_H +#ifndef PR_SCHED_H +#define PR_SCHED_H #include "PR/ultratypes.h" -#include "ultra64/vi.h" -#include "ultra64/sptask.h" +#include "PR/os_vi.h" +#include "PR/sptask.h" + +#define OS_SC_STACKSIZE 0x2000 + +#define OS_SC_RETRACE_MSG 1 +#define OS_SC_DONE_MSG 2 +#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c +#define OS_SC_PRE_NMI_MSG 4 #define OS_SC_NEEDS_RDP 0x0001 #define OS_SC_NEEDS_RSP 0x0002 diff --git a/include/PR/siint.h b/include/PR/siint.h new file mode 100644 index 000000000..a6d16323e --- /dev/null +++ b/include/PR/siint.h @@ -0,0 +1,12 @@ +#ifndef PR_SIINT_H +#define PR_SIINT_H + +#include "ultratypes.h" + + +void __osSiGetAccess(void); +void __osSiRelAccess(void); +s32 __osSiDeviceBusy(void); +void __osSiCreateAccessQueue(void); + +#endif diff --git a/include/ultra64/sptask.h b/include/PR/sptask.h similarity index 94% rename from include/ultra64/sptask.h rename to include/PR/sptask.h index ef4aa4d04..3ec4bf1bf 100644 --- a/include/ultra64/sptask.h +++ b/include/PR/sptask.h @@ -1,5 +1,5 @@ -#ifndef _SPTASK_H_ -#define _SPTASK_H_ +#ifndef PR_SPTASK_H +#define PR_SPTASK_H #include "PR/ultratypes.h" #include "libc/stddef.h" @@ -109,4 +109,10 @@ typedef union { typedef u32 OSYieldResult; +void osSpTaskLoad(OSTask* intp); +void osSpTaskStartGo(OSTask* tp); + +void osSpTaskYield(void); +OSYieldResult osSpTaskYielded(OSTask* task); + #endif diff --git a/include/ultra64/ucode.h b/include/PR/ucode.h similarity index 93% rename from include/ultra64/ucode.h rename to include/PR/ucode.h index 8a1d89037..2314222ba 100644 --- a/include/ultra64/ucode.h +++ b/include/PR/ucode.h @@ -1,5 +1,5 @@ -#ifndef ULTRA64_UCODE_H -#define ULTRA64_UCODE_H +#ifndef PR_UCODE_H +#define PR_UCODE_H #include "PR/ultratypes.h" diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h index 8b4e1a82c..530f30755 100644 --- a/include/PR/ultratypes.h +++ b/include/PR/ultratypes.h @@ -1,5 +1,5 @@ -#ifndef _ULTRATYPES_H_ -#define _ULTRATYPES_H_ +#ifndef PR_ULTRATYPES_H +#define PR_ULTRATYPES_H typedef signed char s8; typedef unsigned char u8; @@ -22,27 +22,7 @@ typedef volatile s64 vs64; typedef float f32; typedef double f64; +// TODO: move this somewhere else typedef void* TexturePtr; -typedef long int Mtx_t[4][4]; -typedef union { - Mtx_t m; - struct { - u16 intPart[4][4]; - u16 fracPart[4][4]; - }; - long long int forc_structure_alignment; -} Mtx; // size = 0x40 - -typedef float MtxF_t[4][4]; -typedef union { - MtxF_t mf; - struct { - float xx, yx, zx, wx, - xy, yy, zy, wy, - xz, yz, zz, wz, - xw, yw, zw, ww; - }; -} MtxF; // size = 0x40 - #endif diff --git a/include/PR/viint.h b/include/PR/viint.h new file mode 100644 index 000000000..29d4fffc6 --- /dev/null +++ b/include/PR/viint.h @@ -0,0 +1,73 @@ +#ifndef PR_VIINT_H +#define PR_VIINT_H + +#include "ultratypes.h" + +#define OS_TV_TYPE_PAL 0 +#define OS_TV_TYPE_NTSC 1 +#define OS_TV_TYPE_MPAL 2 + +#define VI_STATE_MODE_UPDATED (1 << 0) +#define VI_STATE_XSCALE_UPDATED (1 << 1) +#define VI_STATE_YSCALE_UPDATED (1 << 2) +#define VI_STATE_CTRL_UPDATED (1 << 3) // related to control regs changing +#define VI_STATE_BUFFER_UPDATED (1 << 4) // swap buffer +#define VI_STATE_BLACK (1 << 5) // probably related to a black screen +#define VI_STATE_REPEATLINE (1 << 6) // repeat line? +#define VI_STATE_FADE (1 << 7) // fade + +#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */ + +#define VI_SCALE_MASK 0xFFF +#define VI_2_10_FPART_MASK 0x3FF +#define VI_SUBPIXEL_SH 0x10 + +// For use in initializing OSViMode structures + +#define BURST(hsync_width, color_width, vsync_width, color_start) \ + (((u32)(hsync_width) & 0xFF) | (((u32)(color_width) & 0xFF) << 8) | (((u32)(vsync_width) & 0xF) << 16) | (((u32)(color_start) & 0xFFFF) << 20)) +#define WIDTH(v) (v) +#define VSYNC(v) (v) +#define HSYNC(duration, leap) (((u32)(leap) << 16) | ((u32)(duration) & 0xFFFF)) +#define LEAP(upper, lower) (((u32)(upper) << 16) | ((u32)(lower) & 0xFFFF)) +#define START(start, end) (((u32)(start) << 16) | ((u32)(end) & 0xFFFF)) + +#define FTOFIX(val, i, f) ((u32)((val) * (f32)(1 << (f))) & ((1 << ((i) + (f))) - 1)) + +#define F210(val) FTOFIX(val, 2, 10) +#define SCALE(scaleup, off) (F210((1.0f / (f32)(scaleup))) | (F210((f32)(off)) << 16)) + +#define VCURRENT(v) v +#define ORIGIN(v) v +#define VINTR(v) v +#define HSTART START + + +typedef struct { + /* 0x0 */ f32 factor; + /* 0x4 */ u16 offset; + /* 0x8 */ u32 scale; +} __OSViScale; // size = 0x0C + +typedef struct { + /* 0x00 */ u16 state; + /* 0x02 */ u16 retraceCount; + /* 0x04 */ void* buffer; + /* 0x08 */ OSViMode* modep; + /* 0x0C */ u32 features; + /* 0x10 */ OSMesgQueue* mq; + /* 0x14 */ OSMesg* msg; + /* 0x18 */ __OSViScale x; + /* 0x24 */ __OSViScale y; +} __OSViContext; // size = 0x30 + +void __osViSwapContext(void); +extern __OSViContext* __osViCurr; +extern __OSViContext* __osViNext; +extern u32 __additional_scanline; +__OSViContext* __osViGetCurrentContext(void); +void __osViInit(void); + +#endif diff --git a/include/xstdio.h b/include/PR/xstdio.h similarity index 74% rename from include/xstdio.h rename to include/PR/xstdio.h index 102a25ee4..9850d88f8 100644 --- a/include/xstdio.h +++ b/include/PR/xstdio.h @@ -1,6 +1,7 @@ -#ifndef _XSTDIO_H_ -#define _XSTDIO_H_ +#ifndef PR_XSTDIO_H +#define PR_XSTDIO_H +#include "ultratypes.h" #include "libc/stdarg.h" typedef struct { @@ -30,4 +31,8 @@ typedef void* (*PrintCallback)(void*, const char*, size_t); #define FLAGS_HASH 8 #define FLAGS_ZERO 16 +s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap); +void _Litob(_Pft* args, u8 type); +void _Ldtob(_Pft* args, u8 type); + #endif diff --git a/include/audio/load.h b/include/audio/load.h index b5bc01594..1e896d744 100644 --- a/include/audio/load.h +++ b/include/audio/load.h @@ -5,9 +5,9 @@ #include "PR/ultratypes.h" #include "libc/stddef.h" #include "libc/stdint.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "unk.h" -#include "os.h" +#include "PR/os.h" struct Sample; diff --git a/include/bstring.h b/include/bstring.h deleted file mode 100644 index e8d6a66cf..000000000 --- a/include/bstring.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _BSTRING_H_ -#define _BSTRING_H_ - -#endif diff --git a/include/debug.h b/include/debug.h new file mode 100644 index 000000000..96d3d11c7 --- /dev/null +++ b/include/debug.h @@ -0,0 +1,7 @@ +#ifndef DEBUG_H +#define DEBUG_H + +void _dbg_hungup(const char* file, int lineNum); +void Reset(void); + +#endif diff --git a/include/fault.h b/include/fault.h index c93feee25..8affde4ae 100644 --- a/include/fault.h +++ b/include/fault.h @@ -5,7 +5,7 @@ #include "unk.h" #include "libc/stdarg.h" #include "libc/stdint.h" -#include "io/controller.h" +#include "PR/controller.h" #include "padmgr.h" #include "stack.h" diff --git a/include/functions.h b/include/functions.h index 6c7bc067a..7eb67e3ba 100644 --- a/include/functions.h +++ b/include/functions.h @@ -41,7 +41,6 @@ void CIC6105_AddRomInfoFaultPage(void); void CIC6105_RemoveRomInfoFaultPage(void); void func_800818F4(void); void __osSyncVPrintf(const char* fmt, ...); -void osSyncPrintf(const char* fmt, ...); void rmonPrintf(const char* fmt, ...); void func_80084940(void); @@ -68,8 +67,6 @@ void PadUtils_UpdateRelXY(Input* input); void MtxConv_F2L(Mtx* mtx, MtxF* mf); void MtxConv_L2F(MtxF* mtx, Mtx* mf); -void __assert(const char* file, u32 lineNum); -// void func_800862B4(void); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); u32 Rand_Next(void); @@ -81,9 +78,6 @@ u32 Rand_Next_Variable(u32* rndNum); f32 Rand_ZeroOne_Variable(u32* rndNum); f32 Rand_Centered_Variable(u32* rndNum); -void* proutSprintf(void* dst, const char* fmt, size_t size); -s32 vsprintf(char* dst, char* fmt, va_list args); -s32 sprintf(char* dst, char* fmt, ...); s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args); s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...); void Sleep_Cycles(OSTime time); @@ -91,223 +85,7 @@ void Sleep_Nsec(u32 nsec); void Sleep_Usec(u32 usec); void Sleep_Msec(u32 ms); void Sleep_Sec(u32 sec); -// void __osSetCause(void); -s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags); -s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes); -void osViExtendVStart(u32 a0); -void osStopThread(OSThread* t); -s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); -OSIntMask osSetIntMask(OSIntMask im); -// OSIntMask osGetIntMask(void); -void guScale(Mtx* mtx, f32 x, f32 y, f32 z); -f32 sinf(f32 __x); -s16 sins(u16 x); -OSTask* _VirtualToPhysicalTask(OSTask* intp); -void osSpTaskLoad(OSTask* intp); -void osSpTaskStartGo(OSTask* tp); -long long __ull_rshift(unsigned long long left, unsigned long long right); -unsigned long long __ull_rem(unsigned long long left, unsigned long long right); -unsigned long long __ull_div(unsigned long long left, unsigned long long right); -long long __ll_lshift(long long left, long long right); -long long __ll_rem(long long left, unsigned long long right); -long long __ll_div(long long left, long long right); -long long __ll_mul(long long left, long long right); -void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder, unsigned long long dividend, unsigned short divisor); -long long __ll_mod(long long left, long long right); -long long __ll_rshift(long long left, long long right); -void __osExceptionPreamble(void); -void __osException(void); -// void send_mesg(void); -// void handle_CpU(void); -void __osEnqueueAndYield(OSThread** param_1); -void __osEnqueueThread(OSThread** param_1, OSThread* param_2); -OSThread* __osPopThread(OSThread** param_1); -// void __osNop(void); -void __osDispatchThread(void); -void __osCleanupThread(void); -void __osDequeueThread(OSThread** queue, OSThread* t); -void osDestroyThread(OSThread* t); -void bzero(void* begin, s32 length); -void __osSiCreateAccessQueue(void); -void __osSiGetAccess(void); -void __osSiRelAccess(void); -s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); -void __osContGetInitData(u8* pattern, OSContStatus* data); -void __osPackRequestData(u8 poll); -void osCreateThread(OSThread* thread, OSId id, void* entry, void* arg, void* sp, OSPri p); -s32 osContStartReadData(OSMesgQueue* mq); -void osContGetReadData(OSContPad* data); -void __osPackReadData(void); -uintptr_t osVirtualToPhysical(void* virtualAddress); -u32 __osGetSR(void); -void __osSetSR(u32 value); -void osWritebackDCache(void* vaddr, s32 nbytes); -void __createSpeedParam(void); -void osInitialize(void); -void __osInitialize_autodetect(void); -void* osViGetNextFramebuffer(void); -void guPerspectiveF(float mf[4][4], u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); -void guPerspective(Mtx* m, u16* perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale); -s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); -s32 __osSiRawStartDma(s32 direction, void* dramAddr); -s32 osEPiLinkHandle(OSPiHandle* handle); -void osViBlack(u8 active); -s32 __osSiRawReadIo(uintptr_t devAddr, u32* data); -OSId osGetThreadId(OSThread* t); -void osSpTaskYield(void); -s32 __osPfsGetNextPage(OSPfs* pfs, u8* bank, __OSInode* inode, __OSInodeUnit* page); -s32 osPfsReadWriteFile(OSPfs* pfs, s32 fileNo, u8 flag, s32 offset, s32 size, u8* data); -s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); -// void __osPfsRequestOneChannel(void); -// void __osPfsGetOneChannelData(void); -void guMtxIdentF(float mf[4][4]); -void osViSetMode(OSViMode* modep); -// void __osGetConfig(void); -// void __osSetConfig(void); -void guLookAtF(float mf[4][4], f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); -void guLookAt(Mtx* m, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp); -s32 osPfsAllocateFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32 fileSize, s32* fileNo); -s32 __osPfsDeclearPage(OSPfs* pfs, __OSInode* inode, s32 fileSizeInPages, s32* startPage, u8 bank, s32* decleared, s32* finalPage); -s32 osStopTimer(OSTimer* t); -u32 __osProbeTLB(void* param_1); -void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); -void __osPiCreateAccessQueue(void); -void __osPiGetAccess(void); -void __osPiRelAccess(void); -void __osDevMgrMain(void* arg); -// void func_8008C640(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16, UNK_TYPE4 param_17, UNK_TYPE4 param_18); -s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size); -u16 __osSumcalc(u8* ptr, s32 length); -s32 __osIdCheckSum(u16* ptr, u16* checkSum, u16* idSum); -s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid); -// void __osCheckPackId(void); -s32 __osCheckId(OSPfs* pfs); -s32 __osPfsRWInode(OSPfs* pfs, __OSInode* inode, u8 flag, u8 bank); -u32 osGetCount(void); -void guMtxL2F(MtxF* m1, Mtx* m2); -u32 osGetMemSize(void); -s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo); -void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); -f32 sqrtf(f32 f); -s32 osAfterPreNMI(void); -s32 osContStartQuery(OSMesgQueue* mq); -void osContGetQuery(OSContStatus* data); -void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); -void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); -s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap); -void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac); -void osUnmapTLBAll(void); -s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); -const char* strchr(const char* s, s32 c); -size_t strlen(const char* s); -void* memcpy(void* s1, const void* s2, size_t n); -void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count); -void osInvalICache(void* vaddr, size_t nbytes); -void osInvalDCache(void* vaddr, size_t nbytes); -void __osTimerServicesInit(void); -void __osTimerInterrupt(void); -void __osSetTimerIntr(OSTime tim); -OSTime __osInsertTimer(OSTimer* t); -s32 __osSpDeviceBusy(void); -s32 __osSiDeviceBusy(void); -void guMtxIdent(Mtx* mtx); -s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); -void osSetThreadPri(OSThread* thread, OSPri p); -OSPri osGetThreadPri(OSThread* t); -s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); -void osViSwapBuffer(void* frameBufPtr); -void guPositionF(float mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); -void guPosition(Mtx* m, f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z); -s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); -OSYieldResult osSpTaskYielded(OSTask* task); -s32 bcmp(void* __s1, void* __s2, size_t __n); -OSTime osGetTime(void); -void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); -void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); -void __osSetGlobalIntMask(u32 mask); -s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); -s32 osAiSetFrequency(u32 frequency); -s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer); -u8 __osContAddressCrc(u16 addr); -u8 __osContDataCrc(u8* data); -OSThread* __osGetActiveQueue(void); -void guNormalize(float* x, float* y, float* z); -void __osSetCompare(u32 value); -// u32 __osGetCompare(void); -u32 osDpGetStatus(void); -void osDpSetStatus(u32 data); -void bcopy(void* __src, void* __dest, size_t __n); -void __osResetGlobalIntMask(u32 mask); -// void osPfsDeleteFile(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void __osPfsReleasePages(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -void guOrthoF(float m[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); -void guOrtho(Mtx* m, f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); -OSIntMask __osDisableInt(void); -void __osRestoreInt(OSIntMask im); -void __osViInit(void); -void __osViSwapContext(void); -OSMesgQueue* osPiGetCmdQueue(void); -f32 cosf(f32 __x); -s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); -void osViSetSpecialFeatures(u32 func); -s16 coss(u16 x); -void osSetTime(OSTime ticks); -void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); -s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); -// void __osPfsRequestData(void); -// void __osPfsGetInitData(void); -OSPiHandle* osCartRomInit(void); -// void guS2DInitBg(void); -s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); -s32 osContSetCh(u8 ch); -u32 __osSetFpcCsr(u32 value); -u32 __osGetFpcCsr(void); -// void osPfsFileState(void); -// void osPfsInitPak(void); -// void __osPfsCheckRamArea(void); -// void osPfsChecker(void); -u32 osAiGetLength(void); -s32 osEPiWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); -void osMapTLBRdb(void); -void osYieldThread(void); -void guTranslate(Mtx* mtx, f32 x, f32 y, f32 z); -u32 __osGetCause(void); -s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force); -s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data); -s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); -void _Ldtob(_Pft* args, u8 type); -// void _Ldunscale(void); -void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp); -ldiv_t ldiv(long numer, long denom); -lldiv_t lldiv(long long numer, long long denom); -void _Litob(_Pft* args, u8 type); -s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data); -u32 __osSpGetStatus(void); -void __osSpSetStatus(u32 data); -void osCreateViManager(OSPri pri); -// void viMgrMain(OSDevMgr* iParm1); -__OSViContext* __osViGetCurrentContext(void); -void osWritebackDCacheAll(void); -OSThread* __osGetCurrFaultedThread(void); -void guMtxF2L(float mf[4][4], Mtx* m); -void osStartThread(OSThread* t); -void osViSetYScale(f32 value); -void osViSetXScale(f32 value); -long long __d_to_ll(double d); -long long __f_to_ll(float f); -unsigned long long __d_to_ull(double d); -unsigned long long __f_to_ull(float f); -double __ll_to_d(long long s); -float __ll_to_f(long long s); -double __ull_to_d(unsigned long long u); -float __ull_to_f(unsigned long long u); -u32* osViGetCurrentFramebuffer(void); -s32 __osSpSetPc(void* pc); -void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); -void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg); -u32 __osGetWatchLo(void); -void __osSetWatchLo(u32 value); f32 fmodf(f32 dividend, f32 divisor); void* __osMemset(void* ptr, s32 val, size_t size); s32 __osStrcmp(const char* str1, const char* str2); @@ -1625,22 +1403,6 @@ void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); s32 func_80185F90(u32 arg0); -u32 osFlashGetAddr(u32 pageNum); -OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); -void osFlashChange(u32 flashNum); -OSPiHandle* osFlashInit(void); -void osFlashReadStatus(u8* flashStatus); -void osFlashReadId(u32* flashType, u32* flashVendor); -void osFlashClearStatus(void); -s32 osFlashAllErase(void); -void osFlashAllEraseThrough(void); -s32 osFlashCheckEraseEnd(void); -s32 osFlashSectorErase(u32 pageNum); -void osFlashSectorEraseThrough(u32 pageNum); -s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq); -s32 osFlashWriteArray(u32 pageNum); -s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq); - Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32 numSamplesPerFrame); AudioTask* AudioThread_Update(void); @@ -1661,8 +1423,6 @@ void AudioThread_InitMesgQueues(void); void Audio_InvalDCache(void* buf, size_t size); void Audio_WritebackDCache(void* buf, size_t size); -s32 osAiSetNextBuffer(void* buf, u32 size); - void AudioPlayback_NoteDisable(Note* note); void AudioPlayback_ProcessNotes(void); TunedSample* AudioPlayback_GetInstrumentTunedSample(Instrument* instrument, s32 semitone); diff --git a/include/gfx.h b/include/gfx.h index b9bbb744d..790279368 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -5,6 +5,7 @@ #include "PR/sched.h" #include "thga.h" #include "alignment.h" +#include "unk.h" struct GameState; diff --git a/include/gfxprint.h b/include/gfxprint.h index b652cc132..6149a5c4a 100644 --- a/include/gfxprint.h +++ b/include/gfxprint.h @@ -4,7 +4,8 @@ #include "color.h" #include "PR/gbi.h" #include "PR/ultratypes.h" -#include "xstdio.h" +#include "PR/xstdio.h" +#include "unk.h" #define GFXP_UNUSED "\x8E" #define GFXP_UNUSED_CHAR 0x8E diff --git a/include/irqmgr.h b/include/irqmgr.h index ac2c74960..a19169dc7 100644 --- a/include/irqmgr.h +++ b/include/irqmgr.h @@ -1,14 +1,8 @@ #ifndef IRQMGR_H #define IRQMGR_H -#include "PR/sched.h" -#include "os.h" #include "ultra64.h" - -#define OS_SC_RETRACE_MSG 1 -#define OS_SC_DONE_MSG 2 -#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c -#define OS_SC_PRE_NMI_MSG 4 +#include "PR/sched.h" typedef struct IrqMgrClient { /* 0x0 */ struct IrqMgrClient* next; diff --git a/include/libc/alloca.h b/include/libc/alloca.h index 4e8720f7e..fa49dd133 100644 --- a/include/libc/alloca.h +++ b/include/libc/alloca.h @@ -1,5 +1,5 @@ -#ifndef ALLOCA_H -#define ALLOCA_H +#ifndef LIBC_ALLOCA_H +#define LIBC_ALLOCA_H void* alloca(u32); #define alloca __builtin_alloca diff --git a/include/libc/assert.h b/include/libc/assert.h deleted file mode 100644 index 1bc72e314..000000000 --- a/include/libc/assert.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef ASSERT_H -#define ASSERT_H - -#endif diff --git a/include/libc/math.h b/include/libc/math.h index 1cdac0fb3..618ab52b5 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -1,5 +1,5 @@ -#ifndef MATH_H -#define MATH_H +#ifndef LIBC_MATH_H +#define LIBC_MATH_H #include "PR/ultratypes.h" @@ -27,8 +27,10 @@ extern f32 __libm_qnan_f; float fabsf(float f); #pragma intrinsic(fabsf) -float sqrtf(float f); -#pragma intrinsic(sqrtf) +#ifdef __GNUC__ +#define fabsf(f) __builtin_fabsf((float)(f)) +#endif + double sqrt(double d); #pragma intrinsic(sqrt) diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h index 77b8b8866..55f694385 100644 --- a/include/libc/stdarg.h +++ b/include/libc/stdarg.h @@ -1,7 +1,5 @@ -#ifndef STDARG_H -#define STDARG_H - -#include "ultra64.h" +#ifndef LIBC_STDARG_H +#define LIBC_STDARG_H // When building with GCC, use the official vaarg macros to avoid warnings // and possibly bad codegen. diff --git a/include/libc/stdbool.h b/include/libc/stdbool.h index d441054c1..52546edb3 100644 --- a/include/libc/stdbool.h +++ b/include/libc/stdbool.h @@ -1,5 +1,5 @@ -#ifndef STDBOOL -#define STDBOOL +#ifndef LIBC_STDBOOL_H +#define LIBC_STDBOOL_H #define __bool_true_false_are_defined 1 diff --git a/include/libc/stddef.h b/include/libc/stddef.h index 4f55e5725..e867d8e2a 100644 --- a/include/libc/stddef.h +++ b/include/libc/stddef.h @@ -1,5 +1,5 @@ -#ifndef STDDEF_H -#define STDDEF_H +#ifndef LIBC_STDDEF_H +#define LIBC_STDDEF_H #include "PR/ultratypes.h" diff --git a/include/libc/stdint.h b/include/libc/stdint.h index 20288d40d..854fd2546 100644 --- a/include/libc/stdint.h +++ b/include/libc/stdint.h @@ -1,5 +1,5 @@ -#ifndef STDINT_H -#define STDINT_H +#ifndef LIBC_STDINT_H +#define LIBC_STDINT_H #include "PR/ultratypes.h" diff --git a/include/libc/stdlib.h b/include/libc/stdlib.h index 57d352a13..ec15b4f6c 100644 --- a/include/libc/stdlib.h +++ b/include/libc/stdlib.h @@ -1,5 +1,5 @@ -#ifndef STDLIB_H -#define STDLIB_H +#ifndef LIBC_STDLIB_H +#define LIBC_STDLIB_H #include "libc/stddef.h" @@ -22,4 +22,7 @@ typedef int ssize_t; typedef long wchar_t; +ldiv_t ldiv(long numer, long denom); +lldiv_t lldiv(long long numer, long long denom); + #endif /* STDLIB_H */ diff --git a/include/libc/string.h b/include/libc/string.h new file mode 100644 index 000000000..9c6a1cb08 --- /dev/null +++ b/include/libc/string.h @@ -0,0 +1,12 @@ +#ifndef LIBC_STRING_H +#define LIBC_STRING_H + +#include "libc/stddef.h" + + +const char* strchr(const char* s, int c); +size_t strlen(const char* s); +void* memcpy(void* s1, const void* s2, size_t n); + + +#endif diff --git a/include/macros.h b/include/macros.h index b03d01b3e..ff764f644 100644 --- a/include/macros.h +++ b/include/macros.h @@ -2,7 +2,7 @@ #define MACROS_H #include "libc/stdint.h" -#include "ultra64/convert.h" +#include "PR/os_convert.h" #include "main.h" #define SCREEN_WIDTH 320 diff --git a/include/os_malloc.h b/include/os_malloc.h index 6f6bbf900..4106d42e8 100644 --- a/include/os_malloc.h +++ b/include/os_malloc.h @@ -1,8 +1,8 @@ -#ifndef OS_MALLOC -#define OS_MALLOC +#ifndef OS_MALLOC_H +#define OS_MALLOC_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "libc/stddef.h" typedef struct ArenaNode { diff --git a/include/osint.h b/include/osint.h deleted file mode 100644 index fa74a82eb..000000000 --- a/include/osint.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _OSINT_H_ -#define _OSINT_H_ - -// TODO should be in libultra/os - -#include "libc/stdarg.h" -#include "os.h" -#include "os_internal.h" -#include "ultraerror.h" -#include "ultralog.h" - -typedef struct { - /* 0x0 */ OSMesgQueue* messageQueue; - /* 0x4 */ OSMesg message; -} __OSEventState; - - -typedef struct { - /* 0x0 */ OSThread* next; - /* 0x4 */ OSPri priority; -} __OSThreadTail; - -extern __osHwInt __osHwIntTable[]; -extern __OSEventState __osEventStateTab[]; - -#endif diff --git a/include/padmgr.h b/include/padmgr.h index 7cb3cc800..59157dd81 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -2,15 +2,9 @@ #define PADMGR_H #include "libc/stdbool.h" -#include "io/controller.h" +#include "ultra64.h" #include "irqmgr.h" - -typedef struct Input { - /* 0x00 */ OSContPad cur; - /* 0x06 */ OSContPad prev; - /* 0x0C */ OSContPad press; // X/Y store delta from last frame - /* 0x12 */ OSContPad rel; // X/Y store adjusted -} Input; // size = 0x18 +#include "padutils.h" typedef enum { /* 0 */ PADMGR_CONT_NONE, diff --git a/include/padutils.h b/include/padutils.h new file mode 100644 index 000000000..4531bc010 --- /dev/null +++ b/include/padutils.h @@ -0,0 +1,14 @@ +#ifndef PADUTILS_H +#define PADUTILS_H + +#include "PR/controller.h" + + +typedef struct Input { + /* 0x00 */ OSContPad cur; + /* 0x06 */ OSContPad prev; + /* 0x0C */ OSContPad press; // X/Y store delta from last frame + /* 0x12 */ OSContPad rel; // X/Y store adjusted +} Input; // size = 0x18 + +#endif diff --git a/include/ramrom.h b/include/ramrom.h deleted file mode 100644 index 6671b9931..000000000 --- a/include/ramrom.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _RAMROM_H_ -#define _RAMROM_H_ - -#include "PR/ultratypes.h" - -typedef struct { - /* 0x0 */ long type; - /* 0x4 */ long length; - /* 0x8 */ long magic; - /* 0xC */ unsigned char userdata[24564]; -} RamRomBuffer; - -#endif diff --git a/include/rdb.h b/include/rdb.h deleted file mode 100644 index 04b3ed5bc..000000000 --- a/include/rdb.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _RDB_H_ -#define _RDB_H_ - -typedef struct { - /* 0x0 */ unsigned int type : 2; - /* 0x0 */ unsigned int length : 2; - /* 0x1 */ unsigned char buf[3]; -} rdbPacket; - -#endif diff --git a/include/regs.h b/include/regs.h index bc8bacb1b..2d113ea48 100644 --- a/include/regs.h +++ b/include/regs.h @@ -5,6 +5,8 @@ #define REGS_H #include "ultra64.h" +#include "unk.h" + #define REG_GROUPS 29 // number of REG groups, i.e. REG, SREG, OREG, etc. #define REG_PAGES 6 diff --git a/include/rmon.h b/include/rmon.h deleted file mode 100644 index efdd555c6..000000000 --- a/include/rmon.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _RMON_H_ -#define _RMON_H_ - -#endif diff --git a/include/scheduler.h b/include/scheduler.h index 3cf588b1f..1aeae07ec 100644 --- a/include/scheduler.h +++ b/include/scheduler.h @@ -3,8 +3,8 @@ #include "PR/ultratypes.h" #include "PR/sched.h" -#include "ultra64/vi.h" -#include "ultra64/sptask.h" +#include "PR/os_vi.h" +#include "PR/sptask.h" #include "irqmgr.h" #define TASK_FRAMEBUFFER(task) ((CfbInfo*)(task)->framebuffer) diff --git a/include/ultra64.h b/include/ultra64.h index f7baade42..54bb66d69 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -1,21 +1,23 @@ -#ifndef _ULTRA64_H_ -#define _ULTRA64_H_ +#ifndef ULTRA64_H +#define ULTRA64_H #include "PR/ultratypes.h" #include "PR/gbi.h" -#include "unk.h" - -#include "ultra64/controller_voice.h" -#include "ultra64/hardware.h" -#include "ultra64/message.h" -#include "ultra64/sptask.h" -#include "ultra64/thread.h" -#include "ultra64/rcp.h" -#include "ultra64/rdp.h" -#include "ultra64/rsp.h" -#include "ultra64/r4300.h" -#include "ultra64/ucode.h" -#include "ultra64/vi.h" +#include "PR/gu.h" +#include "PR/controller_voice.h" +#include "PR/hardware.h" +#include "PR/os.h" +#include "PR/osint.h" +#include "PR/piint.h" +#include "PR/siint.h" +#include "PR/sptask.h" +#include "PR/rcp.h" +#include "PR/rdp.h" +#include "PR/rsp.h" +#include "PR/r4300.h" +#include "PR/ucode.h" +#include "PR/viint.h" +#include "PR/xstdio.h" #endif diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h deleted file mode 100644 index 6f61307eb..000000000 --- a/include/ultra64/viint.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ULTRA64_VIINT_H -#define ULTRA64_VIINT_H - -#define VI_STATE_MODE_SET (1 << 0) -#define VI_STATE_XSCALE_SET (1 << 1) -#define VI_STATE_YSCALE_FACTOR_SET (1 << 2) -#define VI_STATE_CTRL_SET (1 << 3) -#define VI_STATE_BUFFER_SET (1 << 4) -#define VI_STATE_BLACK (1 << 5) -#define VI_STATE_REPEATLINE (1 << 6) -#define VI_STATE_FADE (1 << 7) - -#define VI_SCALE_MASK 0xFFF -#define VI_2_10_FPART_MASK 0x3FF -#define VI_SUBPIXEL_SH 0x10 - -// For use in initializing OSViMode structures - -#define BURST(hsync_width, color_width, vsync_width, color_start) \ - (((u32)(hsync_width) & 0xFF) | (((u32)(color_width) & 0xFF) << 8) | (((u32)(vsync_width) & 0xF) << 16) | (((u32)(color_start) & 0xFFFF) << 20)) -#define WIDTH(v) (v) -#define VSYNC(v) (v) -#define HSYNC(duration, leap) (((u32)(leap) << 16) | ((u32)(duration) & 0xFFFF)) -#define LEAP(upper, lower) (((u32)(upper) << 16) | ((u32)(lower) & 0xFFFF)) -#define START(start, end) (((u32)(start) << 16) | ((u32)(end) & 0xFFFF)) - -#define FTOFIX(val, i, f) ((u32)((val) * (f32)(1 << (f))) & ((1 << ((i) + (f))) - 1)) - -#define F210(val) FTOFIX(val, 2, 10) -#define SCALE(scaleup, off) (F210((1.0f / (f32)(scaleup))) | (F210((f32)(off)) << 16)) - -#define VCURRENT(v) v -#define ORIGIN(v) v -#define VINTR(v) v -#define HSTART START - -#endif diff --git a/include/ultraerror.h b/include/ultraerror.h deleted file mode 100644 index 030b05af6..000000000 --- a/include/ultraerror.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ULTRAERROR_H_ -#define _ULTRAERROR_H_ - -typedef void (*OSErrorHandler)(/* ECOFF does not store param types */); - -#endif diff --git a/include/ultralog.h b/include/ultralog.h deleted file mode 100644 index ae052d91d..000000000 --- a/include/ultralog.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _ULTRALOG_H_ -#define _ULTRALOG_H_ - -#include "PR/ultratypes.h" - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 len; - /* 0x8 */ u32* base; - /* 0xC */ s32 startCount; - /* 0x10 */ s32 writeOffset; -} OSLog; - - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 timeStamp; - /* 0x8 */ u16 argCount; - /* 0xA */ u16 eventID; -} OSLogItem; - - -typedef struct { - /* 0x0 */ u32 magic; - /* 0x4 */ u32 version; -} OSLogFileHdr; - -#endif diff --git a/include/variables.h b/include/variables.h index 1614d922b..0f499fde4 100644 --- a/include/variables.h +++ b/include/variables.h @@ -34,7 +34,6 @@ extern s32 sIrqMgrRetraceCount; extern OSViMode osViModeNtscHpf1; extern OSViMode osViModePalLan1; extern s16 sintable[0x400]; -extern __osHwInt __osHwIntTable[]; // extern UNK_TYPE1 D_80097DE4; // extern UNK_TYPE4 D_80097E08; extern OSThread* __osThreadTail; @@ -63,14 +62,12 @@ extern s32 __osPfsLastChannel; extern OSViMode osViModeNtscLan1; extern OSViMode osViModeMpalLan1; // extern __OSViContext D_80098060[2]; -extern __OSViContext* __osViCurr; -extern __OSViContext* __osViNext; + // extern UNK_TYPE4 sCartRomNeedsInit; extern OSViMode osViModeFpalLan1; // extern u8 ldigs[]; // extern u8 udigs[]; // extern OSDevMgr __osViDevMgr; -extern u32 __additional_scanline; extern char bootThreadName[]; extern char idleThreadName[]; @@ -160,7 +157,6 @@ extern OSPiHandle D_8009D1A8; extern OSMesg D_8009E3F0[1]; extern OSMesgQueue __osPiAccessQueue; extern __OSInode __osPfsInodeCache; -extern __OSEventState __osEventStateTab[16]; extern OSTimer D_8009E590; extern OSTime __osCurrentTime; extern u32 __osBaseCounter; diff --git a/include/viint.h b/include/viint.h deleted file mode 100644 index fadd5d781..000000000 --- a/include/viint.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _VIINT_H_ -#define _VIINT_H_ - -// TODO should be in libultra/io - -#include "PR/ultratypes.h" -#include "os.h" - -// typedef struct { -// /* 0x0 */ f32 factor; -// /* 0x4 */ u16 offset; -// /* 0x8 */ u32 scale; -// } __OSViScale; - - -typedef struct { - /* 0x0 */ u16 state; - /* 0x2 */ u16 retraceCount; - /* 0x4 */ void* buffer; - /* 0x8 */ OSViMode* modep; - /* 0xC */ u32 control; - /* 0x10 */ OSMesgQueue* msgq; - /* 0x14 */ OSMesg msg; - /* 0x18 */ __OSViScale x; - /* 0x24 */ __OSViScale y; -} __OSViContext; // size = 0x30 - -#endif diff --git a/include/z64.h b/include/z64.h index c94bec081..69e7e01f2 100644 --- a/include/z64.h +++ b/include/z64.h @@ -9,14 +9,10 @@ #include "libc/stdlib.h" #include "ultra64.h" -#include "ultra64/gs2dex.h" -#include "io/controller.h" -#include "osint.h" -#include "os.h" + #include "irqmgr.h" #include "padmgr.h" #include "scheduler.h" -#include "xstdio.h" #include "color.h" #include "ichain.h" @@ -27,6 +23,7 @@ #include "gfx.h" #include "gfxprint.h" +#include "padutils.h" #include "sys_matrix.h" #include "tha.h" #include "thga.h" diff --git a/include/z64actor.h b/include/z64actor.h index d794b8dd1..5f0ea59ad 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -2,6 +2,7 @@ #define Z64ACTOR_H #include "PR/ultratypes.h" +#include "padutils.h" #include "z64math.h" #include "z64animation.h" #include "z64collision_check.h" diff --git a/include/z64audio.h b/include/z64audio.h index e09848e7a..d2a9afd08 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -2,7 +2,8 @@ #define Z64AUDIO_H #include "PR/ultratypes.h" -#include "ultra64/os_voice.h" +#include "PR/os_voice.h" +#include "audiothread_cmd.h" #include "libc/stddef.h" #include "unk.h" #include "audiothread_cmd.h" diff --git a/include/z64bombers_notebook.h b/include/z64bombers_notebook.h index 403f4a88a..5b89aaf70 100644 --- a/include/z64bombers_notebook.h +++ b/include/z64bombers_notebook.h @@ -2,9 +2,10 @@ #define Z64BOMBERS_NOTEBOOK_H #include "ultra64.h" -#include "io/controller.h" #include "z64dma.h" +struct PlayState; + #define DEFINE_PERSON(enum, _photo, _description, _metEnum, _metMessage, _metFlag) enum, typedef enum BombersNotebookPerson { #include "tables/bombers_notebook/person_table.h" diff --git a/include/z64frameadvance.h b/include/z64frameadvance.h index 179a1adba..a05ee8d58 100644 --- a/include/z64frameadvance.h +++ b/include/z64frameadvance.h @@ -1,15 +1,17 @@ #ifndef Z64FRAMEADVANCE_H #define Z64FRAMEADVANCE_H -#include "padmgr.h" +#include "ultra64.h" + +struct Input; + typedef struct FrameAdvanceContext { /* 0x0 */ s32 enabled; /* 0x4 */ s32 timer; } FrameAdvanceContext; // size = 0x8 - void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx); -s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input); +s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, struct Input* input); #endif diff --git a/include/z64game.h b/include/z64game.h index a0c57853a..8b63b701f 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -4,9 +4,10 @@ #include "ultra64.h" #include "libc/stdbool.h" #include "libc/stdint.h" -#include "io/controller.h" +#include "padutils.h" #include "tha.h" #include "padmgr.h" +#include "unk.h" struct GraphicsContext; struct GameState; diff --git a/include/z64jpeg.h b/include/z64jpeg.h index 60797af98..181140386 100644 --- a/include/z64jpeg.h +++ b/include/z64jpeg.h @@ -2,7 +2,7 @@ #define Z64JPEG_H #include "PR/ultratypes.h" -#include "ultra64/message.h" +#include "PR/os_message.h" #include "PR/sched.h" typedef struct { diff --git a/include/z64math.h b/include/z64math.h index a86cf9a20..6fa64f4f4 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -114,6 +114,17 @@ typedef enum { /* 2 */ OLIB_DIFF // Sub `a` and `b` to dest } OlibVec3fDiff; +typedef float MtxF_t[4][4]; +typedef union { + MtxF_t mf; + struct { + float xx, yx, zx, wx, + xy, yy, zy, wy, + xz, yz, zz, wz, + xw, yw, zw, ww; + }; +} MtxF; // size = 0x40 + #define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t))) #define F32_LERP(v0, v1, t) ((1.0f - (t)) * (f32)(v0) + (t) * (f32)(v1)) #define F32_LERPIMP(v0, v1, t) ((f32)(v0) + (((f32)(v1) - (f32)(v0)) * (t))) diff --git a/include/z64player.h b/include/z64player.h index 03bb71d94..f628cd0bc 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -2,7 +2,7 @@ #define Z64PLAYER_H #include "alignment.h" -#include "os.h" +#include "PR/os.h" #include "z64actor.h" struct Player; diff --git a/include/z64rumble.h b/include/z64rumble.h index cb422d2de..844d712db 100644 --- a/include/z64rumble.h +++ b/include/z64rumble.h @@ -2,7 +2,7 @@ #define Z64RUMBLE_H #include "PR/ultratypes.h" -#include "io/controller.h" +#include "PR/controller.h" typedef enum RumbleManagerState { /* 0 */ RUMBLEMANAGER_STATE_WIPE, // Disables the request processing and wipes every request. It can be either set manually or automatically by the system as fail-safe in case the Rumble Pak has been vibrating for 2 minutes diff --git a/include/z64save.h b/include/z64save.h index 5abf105e9..cdc46f023 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -2,9 +2,9 @@ #define Z64SAVE_H #include "ultra64.h" +#include "PR/os.h" #include "z64item.h" #include "z64math.h" -#include "os.h" struct GameState; struct PlayState; diff --git a/spec b/spec index 7ebf16cd9..4612c1801 100644 --- a/spec +++ b/spec @@ -33,7 +33,7 @@ beginseg include "build/src/boot_O2/gfxprint.o" include "build/data/boot/gfxprint.data.o" include "build/src/boot_O2/mtxuty-cvt.o" - include "build/src/boot_O2/assert.o" + include "build/src/boot_O2/debug.o" include "build/src/boot_O2/system_heap.o" include "build/src/boot_O2/padsetup.o" include "build/src/boot_O2/boot_80086760.o" diff --git a/src/boot_O2/assert.c b/src/boot_O2/debug.c similarity index 67% rename from src/boot_O2/assert.c rename to src/boot_O2/debug.c index 04fcf87fe..3933b585e 100644 --- a/src/boot_O2/assert.c +++ b/src/boot_O2/debug.c @@ -1,11 +1,11 @@ #include "global.h" #include "fault.h" -void __assert(const char* file, u32 lineNum) { +void _dbg_hungup(const char* file, int lineNum) { osGetThreadId(NULL); Fault_AddHungupAndCrash(file, lineNum); } -void func_800862B4(void) { +void Reset(void) { Fault_AddHungupAndCrash("Reset", 0); } diff --git a/src/boot_O2/loadfragment.c b/src/boot_O2/loadfragment.c index 517c82bbb..b22b1a692 100644 --- a/src/boot_O2/loadfragment.c +++ b/src/boot_O2/loadfragment.c @@ -9,6 +9,7 @@ * The main difference between them seems to be the lack of vramEnd arguments here. * Instead they are calculated on the fly. */ + #include "global.h" #include "system_malloc.h" #include "loadfragment.h" diff --git a/src/boot_O2/mtxuty-cvt.c b/src/boot_O2/mtxuty-cvt.c index 2c1634392..a5da24522 100644 --- a/src/boot_O2/mtxuty-cvt.c +++ b/src/boot_O2/mtxuty-cvt.c @@ -15,5 +15,5 @@ void MtxConv_F2L(Mtx* mtx, MtxF* mf) { } void MtxConv_L2F(MtxF* mtx, Mtx* mf) { - guMtxL2F(mtx, mf); + guMtxL2F(mtx->mf, mf); } diff --git a/src/boot_O2/padutils.c b/src/boot_O2/padutils.c index accd09e11..1c6bbe868 100644 --- a/src/boot_O2/padutils.c +++ b/src/boot_O2/padutils.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "padutils.h" void PadUtils_Init(Input* input) { bzero(input, sizeof(Input)); diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index b2afc3f95..f62dfb8b7 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -44,6 +44,7 @@ #include "fault.h" #include "global.h" #include "vt.h" +#include "PR/osint.h" #include "stackcheck.h" #include "z64thread.h" diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 31166c3b5..edb7fc5cc 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" diff --git a/src/code/game.c b/src/code/game.c index dc1e1b93e..4f2df63cd 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -11,6 +11,7 @@ #include "z64vismono.h" #include "z64viszbuf.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +#include "debug.h" s32 gFramerateDivisor = 1; f32 gFramerateDivisorF = 1.0f; @@ -168,7 +169,7 @@ void GameState_InitArena(GameState* gameState, size_t size) { } THA_Init(&gameState->heap, NULL, 0); - __assert("../game.c", 1035); + _dbg_hungup("../game.c", 1035); } void GameState_Realloc(GameState* gameState, size_t size) { @@ -192,7 +193,7 @@ void GameState_Realloc(GameState* gameState, size_t size) { THA_Init(&gameState->heap, gameArena, size); } else { THA_Init(&gameState->heap, NULL, 0); - __assert("../game.c", 1074); + _dbg_hungup("../game.c", 1074); } } diff --git a/src/code/padmgr.c b/src/code/padmgr.c index eb6a811b7..ae40fc1a4 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -32,8 +32,8 @@ */ #include "global.h" -#include "io/controller.h" -#include "ultra64/motor.h" +#include "PR/controller.h" +#include "PR/os_motor.h" #include "fault.h" #define PADMGR_RETRACE_MSG (1 << 0) diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 012c118fb..d48ed24bc 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 924000f92..ae871c8a6 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "fault.h" #include "fixed_point.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 95d2e36f9..c2e00e206 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -44,6 +44,7 @@ */ #include "global.h" +#include "libc/string.h" #include "z64quake.h" #include "z64shrink_window.h" #include "z64view.h" diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 24371cdbe..ba9199dbb 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,5 +1,6 @@ -#include "prevent_bss_reordering.h" #include "PR/ultratypes.h" +#include "prevent_bss_reordering.h" +#include "prevent_bss_reordering2.h" // Variables are put before most headers as a hacky way to bypass bss reordering struct CutsceneCamera; diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index 88ec794fc..fed5ec48c 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -3,8 +3,10 @@ * * Manages all cutscenes except for manual */ + #include "global.h" #include "z64shrink_window.h" +#include "libc/string.h" ActorCutscene sGlobalCutsceneList[] = { // CS_ID_GLOBAL_78 diff --git a/src/code/z_pause.c b/src/code/z_pause.c index 5f212b7ae..b16cc62c1 100644 --- a/src/code/z_pause.c +++ b/src/code/z_pause.c @@ -20,6 +20,8 @@ */ #include "z64frameadvance.h" +#include "libc/stdbool.h" +#include "padutils.h" #include "macros.h" void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx) { diff --git a/src/code/z_play.c b/src/code/z_play.c index ccbf1f0c4..48fbb1f2d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -32,6 +32,7 @@ u8 sMotionBlurStatus; #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +#include "debug.h" s32 gDbgCamEnabled = false; u8 D_801D0D54 = false; @@ -335,11 +336,11 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) { default: fbdemoType = -1; - __assert("../z_play.c", 1420); + _dbg_hungup("../z_play.c", 1420); } } else { fbdemoType = -1; - __assert("../z_play.c", 1423); + _dbg_hungup("../z_play.c", 1423); } transitionCtx->transitionType = transitionType; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index e272bbfea..a890090ff 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -3,6 +3,7 @@ * Description: Set of library functions to interact with the Player system */ +#include "prevent_bss_reordering.h" #include "global.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/code/z_room.c b/src/code/z_room.c index 78eb5f98e..28a297499 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -1,4 +1,5 @@ #include "global.h" +#include "debug.h" void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3) { } @@ -380,7 +381,7 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS bgEntry++; } - __assert("../z_room.c", 849); + _dbg_hungup("../z_room.c", 849); return NULL; } @@ -461,7 +462,7 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) { } else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) { Room_DrawImageMulti(play, room, flags); } else { - __assert("../z_room.c", 965); + _dbg_hungup("../z_room.c", 965); } } @@ -516,7 +517,7 @@ size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) { roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize); if (roomCtx->roomMemPages[0] == NULL) { - __assert("../z_room.c", 1078); + _dbg_hungup("../z_room.c", 1078); } roomCtx->roomMemPages[1] = (void*)((uintptr_t)roomCtx->roomMemPages[0] + maxRoomSize); roomCtx->activeMemPage = 0; diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 778c89c14..8e3d1c59f 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,6 +1,7 @@ #include "global.h" +#include "debug.h" #include "z64vimode.h" -#include "ultra64/viint.h" +#include "PR/viint.h" typedef struct { /* 0x00 */ u32 burst; @@ -143,7 +144,7 @@ void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 ant viMode->fldRegs[0].vBurst = ptr->vBurst; viMode->fldRegs[1].vBurst = ptr->vBurst; } else { - __assert("../z_vimode.c", 216); + _dbg_hungup("../z_vimode.c", 216); } viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust; diff --git a/src/libultra/gu/guS2DInitBg.c b/src/libultra/gu/guS2DInitBg.c index d2e5a2b04..c87176f49 100644 --- a/src/libultra/gu/guS2DInitBg.c +++ b/src/libultra/gu/guS2DInitBg.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" void guS2DInitBg(uObjBg* bg) { u32 size; diff --git a/src/libultra/gu/lookathil.c b/src/libultra/gu/lookathil.c index dcb05b3d9..22540337c 100644 --- a/src/libultra/gu/lookathil.c +++ b/src/libultra/gu/lookathil.c @@ -1,7 +1,5 @@ #include "global.h" -#define FTOFRAC8(x) ((s32)MIN(((x) * (128.0f)), 127.0f) & 0xFF) - void guLookAtHiliteF(f32 mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, /* light 1 direction */ f32 xl2, f32 yl2, f32 zl2, /* light 2 direction */ diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c index 27bd0b8ed..21a8b90ce 100644 --- a/src/libultra/io/contreaddata.c +++ b/src/libultra/io/contreaddata.c @@ -1,5 +1,7 @@ #include "global.h" +void __osPackReadData(void); + s32 osContStartReadData(OSMesgQueue* mq) { s32 ret; int i; @@ -37,7 +39,7 @@ void osContGetReadData(OSContPad* data) { } } -void __osPackReadData() { +void __osPackReadData(void) { u8* ptr; __OSContReadFormat readformat; int i; diff --git a/src/libultra/io/motor.c b/src/libultra/io/motor.c index 9e0eb127e..ba934d800 100644 --- a/src/libultra/io/motor.c +++ b/src/libultra/io/motor.c @@ -1,6 +1,6 @@ -#include "ultra64/motor.h" +#include "PR/os_motor.h" -#include "io/controller.h" +#include "PR/controller.h" #include "functions.h" #define BANK_ADDR 0x400 diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c index ccccf68ae..a7f5173a9 100644 --- a/src/libultra/io/osViModeMpalLan1.c +++ b/src/libultra/io/osViModeMpalLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeMpalLan1 = { OS_VI_MPAL_LAN1, // type diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c index 5f88f4e94..672a2a17f 100644 --- a/src/libultra/io/osViModeNtscHpf1.c +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeNtscHpf1 = { OS_VI_NTSC_HPF1, // type diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c index 86eb473b7..afbe46fab 100644 --- a/src/libultra/io/osViModeNtscLan1.c +++ b/src/libultra/io/osViModeNtscLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModeNtscLan1 = { OS_VI_NTSC_LAN1, // type diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c index f875bb731..66ae4e6f1 100644 --- a/src/libultra/io/osViModePalLan1.c +++ b/src/libultra/io/osViModePalLan1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "ultra64/viint.h" +#include "PR/viint.h" OSViMode osViModePalLan1 = { OS_VI_PAL_LAN1, // type diff --git a/src/libultra/io/pfschecker.c b/src/libultra/io/pfschecker.c index d3a635768..79045ce1b 100644 --- a/src/libultra/io/pfschecker.c +++ b/src/libultra/io/pfschecker.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" #define CHECK_IPAGE(p) \ diff --git a/src/libultra/io/pfsdeletefile.c b/src/libultra/io/pfsdeletefile.c index 39e9aa898..3d6558a0d 100644 --- a/src/libultra/io/pfsdeletefile.c +++ b/src/libultra/io/pfsdeletefile.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsReleasePages(OSPfs* pfs, __OSInode* inode, u8 initialPage, u8 bank, __OSInodeUnit* finalPage); diff --git a/src/libultra/io/pfsfilestate.c b/src/libultra/io/pfsfilestate.c index f06c8d937..887eac1f6 100644 --- a/src/libultra/io/pfsfilestate.c +++ b/src/libultra/io/pfsfilestate.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state) { diff --git a/src/libultra/io/pfsfreeblocks.c b/src/libultra/io/pfsfreeblocks.c index b90979c59..2f8c6493f 100644 --- a/src/libultra/io/pfsfreeblocks.c +++ b/src/libultra/io/pfsfreeblocks.c @@ -1,5 +1,5 @@ #include "global.h" -#include "PR/pfs.h" +#include "PR/os_pfs.h" s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes) { s32 j; diff --git a/src/libultra/io/pfsinitpak.c b/src/libultra/io/pfsinitpak.c index cc226f834..f4d917b62 100644 --- a/src/libultra/io/pfsinitpak.c +++ b/src/libultra/io/pfsinitpak.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsCheckRamArea(OSPfs* pfs); diff --git a/src/libultra/io/pfsisplug.c b/src/libultra/io/pfsisplug.c index 474c7f914..99a2cbc42 100644 --- a/src/libultra/io/pfsisplug.c +++ b/src/libultra/io/pfsisplug.c @@ -1,5 +1,5 @@ -#include "PR/pfs.h" -#include "io/controller.h" +#include "PR/os_pfs.h" +#include "PR/controller.h" #include "global.h" void __osPfsRequestData(u8 poll); diff --git a/src/libultra/io/pfsselectbank.c b/src/libultra/io/pfsselectbank.c index 6cc43a470..59a69fccb 100644 --- a/src/libultra/io/pfsselectbank.c +++ b/src/libultra/io/pfsselectbank.c @@ -1,4 +1,4 @@ -#include "PR/pfs.h" +#include "PR/os_pfs.h" #include "global.h" s32 __osPfsSelectBank(OSPfs* pfs, u8 bank) { diff --git a/src/libultra/io/vigetcurrframebuf.c b/src/libultra/io/vigetcurrframebuf.c index bace58ded..8127a3f63 100644 --- a/src/libultra/io/vigetcurrframebuf.c +++ b/src/libultra/io/vigetcurrframebuf.c @@ -1,8 +1,8 @@ #include "global.h" -u32* osViGetCurrentFramebuffer(void) { +void* osViGetCurrentFramebuffer(void) { register u32 prevInt = __osDisableInt(); - u32* curBuf = __osViCurr->buffer; + void* curBuf = __osViCurr->buffer; __osRestoreInt(prevInt); diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index 13f63c90d..f38974b8a 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -1,6 +1,7 @@ #include "global.h" +#include "PR/osint.h" #include "stack.h" -#include "osint.h" +#include "PR/osint.h" OSThread viThread; STACK(sViStack, 0x1000); diff --git a/src/libultra/os/gethwinterrupt.c b/src/libultra/os/gethwinterrupt.c index dacd43910..711985df7 100644 --- a/src/libultra/os/gethwinterrupt.c +++ b/src/libultra/os/gethwinterrupt.c @@ -1,7 +1,8 @@ #include "global.h" -#include "os_internal.h" +#include "PR/os_internal.h" +#include "PR/osint.h" -void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg) { +void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg) { *outQueue = __osHwIntTable[idx].queue; *outMsg = __osHwIntTable[idx].msg; } diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 4fabb4c4d..8eb97c28c 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -9,6 +9,8 @@ typedef struct { /* 0xC */ u32 ins_0C; // nop } struct_exceptionPreamble; // size = 0x10 +extern struct_exceptionPreamble __osExceptionPreamble; + u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; UNK_TYPE4 __osShutdown = 0; @@ -30,7 +32,7 @@ void __createSpeedParam(void) { D_8009D1A8.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); } -void osInitialize(void) { +void __osInitialize_common(void) { u32 pifdata; D_8009CF70 = 1; @@ -43,10 +45,10 @@ void osInitialize(void) { while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {} - *(struct_exceptionPreamble*)0x80000000 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000080 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000100 = *((struct_exceptionPreamble*)__osExceptionPreamble); - *(struct_exceptionPreamble*)0x80000180 = *((struct_exceptionPreamble*)__osExceptionPreamble); + *(struct_exceptionPreamble*)0x80000000 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000080 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000100 = __osExceptionPreamble; + *(struct_exceptionPreamble*)0x80000180 = __osExceptionPreamble; osWritebackDCache(0x80000000, 400); osInvalICache(0x80000000, 400); diff --git a/src/libultra/os/resetglobalintmask.c b/src/libultra/os/resetglobalintmask.c index c2561d712..6289a1d4c 100644 --- a/src/libultra/os/resetglobalintmask.c +++ b/src/libultra/os/resetglobalintmask.c @@ -1,6 +1,6 @@ #include "global.h" -void __osResetGlobalIntMask(u32 mask) { +void __osResetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); __OSGlobalIntMask &= ~(mask & ~0x401); diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index 26e837fcf..d5c8407f4 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -1,8 +1,9 @@ #include "global.h" +#include "PR/osint.h" UNK_TYPE4 D_80097F10 = 0; -__OSEventState __osEventStateTab[16]; +__OSEventState __osEventStateTab[OS_NUM_EVENTS]; void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { register u32 saveMask; diff --git a/src/libultra/os/setglobalintmask.c b/src/libultra/os/setglobalintmask.c index 6b7895d6d..067343f6e 100644 --- a/src/libultra/os/setglobalintmask.c +++ b/src/libultra/os/setglobalintmask.c @@ -1,6 +1,6 @@ #include "global.h" -void __osSetGlobalIntMask(u32 mask) { +void __osSetGlobalIntMask(OSHWIntr mask) { register s32 prevInt = __osDisableInt(); __OSGlobalIntMask |= mask; diff --git a/src/libultra/os/sethwinterrupt.c b/src/libultra/os/sethwinterrupt.c index 6ba72be7a..4f536cade 100644 --- a/src/libultra/os/sethwinterrupt.c +++ b/src/libultra/os/sethwinterrupt.c @@ -1,6 +1,7 @@ #include "global.h" +#include "PR/osint.h" -void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg) { +void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg) { register s32 prevInt = __osDisableInt(); __osHwIntTable[idx].queue = queue; diff --git a/src/libultra/os/virtualtophysical.c b/src/libultra/os/virtualtophysical.c index 6bdb2ccb3..403ab5f4f 100644 --- a/src/libultra/os/virtualtophysical.c +++ b/src/libultra/os/virtualtophysical.c @@ -1,5 +1,5 @@ #include "PR/ultratypes.h" -#include "osint.h" +#include "PR/osint.h" #include "libc/stdint.h" #include "global.h" diff --git a/src/libultra/rmon/sprintf.c b/src/libultra/rmon/sprintf.c index 446a74702..9f3610fe0 100644 --- a/src/libultra/rmon/sprintf.c +++ b/src/libultra/rmon/sprintf.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" void* proutSprintf(void* dst, const char* fmt, size_t size) { return (void*)((uintptr_t)memcpy(dst, fmt, size) + size); @@ -12,7 +13,7 @@ int vsprintf(char* dst, char* fmt, va_list args) { return ans; } -int sprintf(char* dst, char* fmt, ...) { +int sprintf(char* dst, const char* fmt, ...) { int ans; va_list args; va_start(args, fmt); diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index 66c058396..e30bf4b81 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define BUFF_LEN 0x20 diff --git a/src/libultra/rmon/xlitob.c b/src/libultra/rmon/xlitob.c index 6c53ee094..70b9c32a4 100644 --- a/src/libultra/rmon/xlitob.c +++ b/src/libultra/rmon/xlitob.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define BUFF_LEN 0x18 diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index 6caac436f..3fc6b5e2a 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -1,4 +1,5 @@ #include "global.h" +#include "libc/string.h" #define ATOI(i, a) \ for (i = 0; *a >= '0' && *a <= '9'; a++) \ @@ -28,6 +29,8 @@ char spaces[] = " "; char zeroes[] = "00000000000000000000000000000000"; +void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac); + int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) { _Pft x; x.nchar = 0; diff --git a/src/libultra/voice/voicecheckresult.c b/src/libultra/voice/voicecheckresult.c index 7d1e5c0a5..252472192 100644 --- a/src/libultra/voice/voicecheckresult.c +++ b/src/libultra/voice/voicecheckresult.c @@ -1,9 +1,10 @@ /** * File: voicecheckresult.c */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" + +#include "PR/controller_voice.h" +#include "PR/controller.h" +#include "PR/os_voice.h" s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status) { s32 errorCode = __osVoiceGetStatus(hd->mq, hd->channel, status); diff --git a/src/libultra/voice/voicecheckword.c b/src/libultra/voice/voicecheckword.c index 1a2695b51..b4c05d90c 100644 --- a/src/libultra/voice/voicecheckword.c +++ b/src/libultra/voice/voicecheckword.c @@ -3,7 +3,7 @@ * * Checks whether or not a word can be registered in the dictionary */ -#include "io/controller.h" +#include "PR/controller.h" // TODO: SJIS support s32 osVoiceCheckWord(u8* word) { diff --git a/src/libultra/voice/voicecleardictionary.c b/src/libultra/voice/voicecleardictionary.c index e474bc2fd..eceb9bb71 100644 --- a/src/libultra/voice/voicecleardictionary.c +++ b/src/libultra/voice/voicecleardictionary.c @@ -10,9 +10,9 @@ * is initialized with the osVoiceClearDictionary function */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" +#include "PR/os_voice.h" s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords) { s32 errorCode; diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c index 1477e570b..0f39ee308 100644 --- a/src/libultra/voice/voicecontread2.c +++ b/src/libultra/voice/voicecontread2.c @@ -2,8 +2,8 @@ * File: voicecontread2.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c index 83d0fdf2e..9f23bf979 100644 --- a/src/libultra/voice/voicecontread36.c +++ b/src/libultra/voice/voicecontread36.c @@ -2,8 +2,8 @@ * File: voicecontread36.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontrolgain.c b/src/libultra/voice/voicecontrolgain.c index 61cccde70..bac3871d7 100644 --- a/src/libultra/voice/voicecontrolgain.c +++ b/src/libultra/voice/voicecontrolgain.c @@ -4,9 +4,9 @@ * Adjusts the input gain of the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "macros.h" u8 sDigitalTable[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 }; diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c index cc3af385e..dd9d7e07f 100644 --- a/src/libultra/voice/voicecontwrite20.c +++ b/src/libultra/voice/voicecontwrite20.c @@ -2,8 +2,8 @@ * File: voicecontwrite20.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c index 06239219a..103d3e798 100644 --- a/src/libultra/voice/voicecontwrite4.c +++ b/src/libultra/voice/voicecontwrite4.c @@ -2,8 +2,8 @@ * File: voicecontwrite4.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicegetreaddata.c b/src/libultra/voice/voicegetreaddata.c index d271f71c7..5e5a2b62b 100644 --- a/src/libultra/voice/voicegetreaddata.c +++ b/src/libultra/voice/voicegetreaddata.c @@ -4,9 +4,9 @@ * Gets voice recognition result from the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result) { static u8 sHandleStatus; diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c index 444ae6233..b19348908 100644 --- a/src/libultra/voice/voicegetstatus.c +++ b/src/libultra/voice/voicegetstatus.c @@ -2,8 +2,8 @@ * File: voicegetstatus.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status) { diff --git a/src/libultra/voice/voiceinit.c b/src/libultra/voice/voiceinit.c index 2a777edaf..f8c965f70 100644 --- a/src/libultra/voice/voiceinit.c +++ b/src/libultra/voice/voiceinit.c @@ -4,9 +4,9 @@ * Initializes Voice Recognition System control structure and hardware */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" @@ -14,7 +14,7 @@ static u8 sCmds[] = { 0x1E, 0x6E, 0x08, 0x56, 0x03, }; -s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel) { +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, int channel) { s32 errorCode; s32 i; u8 status = 0; diff --git a/src/libultra/voice/voicemaskdictionary.c b/src/libultra/voice/voicemaskdictionary.c index a8f090329..225c45dee 100644 --- a/src/libultra/voice/voicemaskdictionary.c +++ b/src/libultra/voice/voicemaskdictionary.c @@ -4,13 +4,13 @@ * Mask words registered in the voice recognition system */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" -s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size) { +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, int size) { s32 errorCode; s32 i; s32 j; diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c index 2a6ebfbc7..55403dae6 100644 --- a/src/libultra/voice/voicesetadconverter.c +++ b/src/libultra/voice/voicesetadconverter.c @@ -2,8 +2,8 @@ * File: voicesetadconverter.c */ -#include "ultra64/controller_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicesetword.c b/src/libultra/voice/voicesetword.c index 2dfe58b94..82b0f88aa 100644 --- a/src/libultra/voice/voicesetword.c +++ b/src/libultra/voice/voicesetword.c @@ -4,9 +4,9 @@ * Registers words to the Voice Recognition System dictionary */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" #include "functions.h" #include "macros.h" diff --git a/src/libultra/voice/voicestartreaddata.c b/src/libultra/voice/voicestartreaddata.c index 398d10a15..0ff35fd2b 100644 --- a/src/libultra/voice/voicestartreaddata.c +++ b/src/libultra/voice/voicestartreaddata.c @@ -4,9 +4,9 @@ * Start voice recognition by the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceStartReadData(OSVoiceHandle* hd) { s32 errorCode; diff --git a/src/libultra/voice/voicestopread.c b/src/libultra/voice/voicestopread.c index 570613428..905efb19f 100644 --- a/src/libultra/voice/voicestopread.c +++ b/src/libultra/voice/voicestopread.c @@ -4,9 +4,9 @@ * Forcibly stops voice recognition processing by the Voice Recognition System */ -#include "ultra64/controller_voice.h" -#include "ultra64/os_voice.h" -#include "io/controller.h" +#include "PR/controller_voice.h" +#include "PR/os_voice.h" +#include "PR/controller.h" s32 osVoiceStopReadData(OSVoiceHandle* hd) { s32 errorCode; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c index 47f0dec92..5d0ac3bc5 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c @@ -4,7 +4,6 @@ * Description: Great Bay Temple - Seesaw and Waterwheel w/ Platforms */ -#include "prevent_bss_reordering.h" #include "z_bg_dblue_balance.h" #include "objects/object_dblue_object/object_dblue_object.h" diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 751aa5523..bf3aa576d 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -4,7 +4,6 @@ * Description: Twinmold */ -#include "prevent_bss_reordering.h" #include "z_boss_02.h" #include "z64rumble.h" #include "z64shrink_window.h" diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 8d1e306bb..8b98808e1 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -4,6 +4,7 @@ * Description: Beaver Bros */ +#include "prevent_bss_reordering.h" #include "z_en_az.h" #include "overlays/actors/ovl_En_Twig/z_en_twig.h" #include "overlays/actors/ovl_En_Fish/z_en_fish.h" diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 7aae1c742..7fbd43a54 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -7,6 +7,7 @@ #include "z_en_horse_game_check.h" #include "z64horse.h" #include "objects/object_horse_game_check/object_horse_game_check.h" +#include "debug.h" #define FLAGS (ACTOR_FLAG_10) @@ -128,13 +129,13 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { this->horse1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_4)); if (this->horse1 == NULL) { - __assert("../z_en_horse_game_check.c", 1517); + _dbg_hungup("../z_en_horse_game_check.c", 1517); } this->horse2 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1376.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_5)); if (this->horse2 == NULL) { - __assert("../z_en_horse_game_check.c", 1526); + _dbg_hungup("../z_en_horse_game_check.c", 1526); } this->unk_17C = -1; diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 39e092e2f..8bbbaca14 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -4,7 +4,6 @@ * Description: Grass / Bush */ -#include "prevent_bss_reordering.h" #include "z_en_kusa.h" #include "objects/object_kusa/object_kusa.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 435406885..a1f238240 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,7 +4,6 @@ * Description: Player */ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" #include "z64quake.h" diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index 1104a28a3..c552e7c50 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -5,6 +5,7 @@ */ #include "z_eff_ss_kakera.h" +#include "debug.h" #define rReg0 regs[0] #define rGravity regs[1] @@ -62,7 +63,7 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa break; } } else { - __assert("../z_eff_kakera.c", 193); + _dbg_hungup("../z_eff_kakera.c", 193); } this->draw = EffectSsKakera_Draw; this->update = EffectSsKakera_Update; diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 562f4f42b..a7f421191 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -56,7 +56,7 @@ 0x80085320 : "stackcheck", 0x80085570 : "gfxprint", 0x80086110 : "mtxuty-cvt", - 0x80086280 : "assert", + 0x80086280 : "debug", 0x800862E0 : "system_heap", 0x80086620 : "padsetup", 0x80086760 : "boot_80086760", @@ -296,7 +296,7 @@ 0x800982B0 : "fault", 0x80098C50 : "fault_drawer", 0x80099090 : "gfxprint", - 0x800990B0 : "assert", + 0x800990B0 : "debug", 0x800990C0 : "boot_80086760", 0x80099110 : "__osMalloc", 0x800991A0 : "setintmask", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1b33b3a5f..13519cb06 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -155,8 +155,8 @@ 0x800860D8:("GfxPrint_Printf",), 0x80086110:("MtxConv_F2L",), 0x80086258:("MtxConv_L2F",), - 0x80086280:("__assert",), - 0x800862B4:("func_800862B4",), + 0x80086280:("_dbg_hungup",), + 0x800862B4:("Reset",), 0x800862E0:("SystemHeap_Malloc",), 0x80086310:("SystemHeap_Free",), 0x8008633C:("SystemHeap_RunBlockFunc",), @@ -299,7 +299,7 @@ 0x8008A5D0:("__osSetSR",), 0x8008A5E0:("osWritebackDCache",), 0x8008A660:("__createSpeedParam",), - 0x8008A6FC:("osInitialize",), + 0x8008A6FC:("__osInitialize_common",), 0x8008A9A8:("__osInitialize_autodetect",), 0x8008AA10:("osViGetNextFramebuffer",), 0x8008AA50:("guPerspectiveF",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 1c05ba562..f2aec1cb4 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -152,8 +152,8 @@ asm/non_matchings/boot/gfxprint/GfxPrint_VPrintf.s,GfxPrint_VPrintf,0x800860B8,0 asm/non_matchings/boot/gfxprint/GfxPrint_Printf.s,GfxPrint_Printf,0x800860D8,0xE asm/non_matchings/boot/mtxuty-cvt/MtxConv_F2L.s,MtxConv_F2L,0x80086110,0x52 asm/non_matchings/boot/mtxuty-cvt/MtxConv_L2F.s,MtxConv_L2F,0x80086258,0xA -asm/non_matchings/boot/assert/__assert.s,__assert,0x80086280,0xD -asm/non_matchings/boot/assert/func_800862B4.s,func_800862B4,0x800862B4,0xB +asm/non_matchings/boot/assert/_dbg_hungup.s,_dbg_hungup,0x80086280,0xD +asm/non_matchings/boot/assert/Reset.s,Reset,0x800862B4,0xB asm/non_matchings/boot/boot_800862E0/SystemHeap_Malloc.s,SystemHeap_Malloc,0x800862E0,0xC asm/non_matchings/boot/boot_800862E0/SystemArena_Free.s,SystemArena_Free,0x80086310,0xB asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc.s,SystemHeap_RunBlockFunc,0x8008633C,0x1C @@ -296,7 +296,7 @@ asm/non_matchings/boot/getsr/__osGetSR.s,__osGetSR,0x8008A5C0,0x4 asm/non_matchings/boot/setsr/__osSetSR.s,__osSetSR,0x8008A5D0,0x4 asm/non_matchings/boot/writebackdcache/osWritebackDCache.s,osWritebackDCache,0x8008A5E0,0x20 asm/non_matchings/boot/initialize/__createSpeedParam.s,__createSpeedParam,0x8008A660,0x27 -asm/non_matchings/boot/initialize/osInitialize.s,osInitialize,0x8008A6FC,0xAB +asm/non_matchings/boot/initialize/__osInitialize_common.s,__osInitialize_common,0x8008A6FC,0xAB asm/non_matchings/boot/initialize/__osInitialize_autodetect.s,__osInitialize_autodetect,0x8008A9A8,0x2 asm/non_matchings/boot/vigetnextframebuf/osViGetNextFramebuffer.s,osViGetNextFramebuffer,0x8008AA10,0x10 asm/non_matchings/boot/perspective/guPerspectiveF.s,guPerspectiveF,0x8008AA50,0x8C From c8304925da305f5d8fa43fc4ca93f95afd36bcab Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 8 Sep 2023 03:17:54 -0700 Subject: [PATCH 04/74] Subrepo Updates (#1368) * git subrepo pull --force tools/asm-processor subrepo: subdir: "tools/asm-processor" merged: "fed1e3ddb" upstream: origin: "git@github.com:simonlindholm/asm-processor.git" branch: "main" commit: "fed1e3ddb" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull tools/asm-differ subrepo: subdir: "tools/asm-differ" merged: "4ed847317" upstream: origin: "https://github.com/simonlindholm/asm-differ" branch: "main" commit: "4ed847317" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "7f398831f" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "7f398831f" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" * git subrepo pull (merge) --force tools/fado subrepo: subdir: "tools/fado" merged: "8ce048376" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "8ce048376" git-subrepo: version: "0.4.6" origin: "git@github.com:ingydotnet/git-subrepo.git" commit: "110b9eb" --- tools/ZAPD/.gitrepo | 4 +- tools/ZAPD/Makefile | 17 + tools/ZAPD/ZAPD/GameConfig.cpp | 1 + tools/ZAPD/ZAPDUtils/Utils/Directory.h | 9 +- tools/ZAPD/ZAPDUtils/Utils/File.h | 27 +- tools/ZAPD/ZAPDUtils/Utils/Path.h | 5 +- .../.github/workflows/check-poetry-lock.yml | 20 ++ .../.github/workflows/unit-tests.yml | 15 + tools/asm-differ/.gitignore | 1 - tools/asm-differ/.gitrepo | 6 +- tools/asm-differ/README.md | 2 +- tools/asm-differ/diff.py | 280 ++++++++++++--- tools/asm-differ/mypy.ini | 2 +- tools/asm-differ/poetry.lock | 321 ++++++++++++++++++ tools/asm-differ/test.py | 189 +++++++++++ tools/asm-processor/.gitrepo | 6 +- tools/asm-processor/asm_processor.py | 57 +++- tools/asm-processor/mypy.ini | 3 + tools/asm-processor/prelude.inc | 10 + tools/asm-processor/tests/static-global.c | 2 + .../asm-processor/tests/static-global.objdump | 2 + tools/fado/.gitrepo | 6 +- tools/fado/Makefile | 2 +- tools/fado/include/mips_elf.h | 6 +- 24 files changed, 905 insertions(+), 88 deletions(-) create mode 100644 tools/asm-differ/.github/workflows/check-poetry-lock.yml create mode 100644 tools/asm-differ/.github/workflows/unit-tests.yml create mode 100644 tools/asm-differ/poetry.lock create mode 100644 tools/asm-differ/test.py create mode 100644 tools/asm-processor/mypy.ini diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo index d021bc57e..c8d51d0cf 100644 --- a/tools/ZAPD/.gitrepo +++ b/tools/ZAPD/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/zeldaret/ZAPD.git branch = master - commit = 505024b33eb1fcd00e3e9bb71f1355fa2ae6e9cf - parent = 387d3597142ebdbebe1fbb99858ea831aa2752b4 + commit = 7f398831fbcf67210b37882b5017093a1d187d5c + parent = 71e36ae371f89b5f86a6d59c7ebc24b8a55ee43e method = merge cmdver = 0.4.6 diff --git a/tools/ZAPD/Makefile b/tools/ZAPD/Makefile index c97b7ce23..36331937a 100644 --- a/tools/ZAPD/Makefile +++ b/tools/ZAPD/Makefile @@ -8,6 +8,18 @@ COPYCHECK_ARGS ?= LLD ?= 0 WERROR ?= 0 +# On MacOS 10.14, use boost::filesystem, because +# the system doesn't supply std::filesystem. +ifneq ($(OS),Windows_NT) + ifeq ($(shell uname -s),Darwin) + MACOS_VERSION := $(shell sw_vers -productVersion | cut -d . -f 1,2) + ifeq ($(MACOS_VERSION),10.14) + USE_BOOST_FS ?= 1 + endif + endif +endif +USE_BOOST_FS ?= 0 + # Use clang++ if available, else use g++ ifeq ($(shell command -v clang++ >/dev/null 2>&1; echo $$?),0) CXX := clang++ @@ -46,6 +58,11 @@ endif LDFLAGS := -lm -ldl -lpng +ifneq ($(USE_BOOST_FS),0) + CXXFLAGS += -DUSE_BOOST_FS + LDFLAGS += -lboost_filesystem +endif + # Use LLD if available. Set LLD=0 to not use it ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0) LLD := 1 diff --git a/tools/ZAPD/ZAPD/GameConfig.cpp b/tools/ZAPD/ZAPD/GameConfig.cpp index b27e81600..638480875 100644 --- a/tools/ZAPD/ZAPD/GameConfig.cpp +++ b/tools/ZAPD/ZAPD/GameConfig.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "Utils/Directory.h" #include "Utils/File.h" diff --git a/tools/ZAPD/ZAPDUtils/Utils/Directory.h b/tools/ZAPD/ZAPDUtils/Utils/Directory.h index eaa6a26ab..2e782624e 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/Directory.h +++ b/tools/ZAPD/ZAPDUtils/Utils/Directory.h @@ -4,7 +4,10 @@ #include #include -#if __has_include() +#ifdef USE_BOOST_FS +#include +namespace fs = boost::filesystem; +#elif __has_include() #include namespace fs = std::filesystem; #else @@ -17,7 +20,11 @@ namespace fs = std::experimental::filesystem; class Directory { public: +#ifdef USE_BOOST_FS + static std::string GetCurrentDirectory() { return fs::current_path().string(); } +#else static std::string GetCurrentDirectory() { return fs::current_path().u8string(); } +#endif static bool Exists(const fs::path& path) { return fs::exists(path); } diff --git a/tools/ZAPD/ZAPDUtils/Utils/File.h b/tools/ZAPD/ZAPDUtils/Utils/File.h index bf2bb694e..707b1600f 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/File.h +++ b/tools/ZAPD/ZAPDUtils/Utils/File.h @@ -1,6 +1,11 @@ #pragma once +#ifdef USE_BOOST_FS +#include +#else #include +#endif + #include #include #include "Directory.h" @@ -8,16 +13,24 @@ class File { +#ifdef USE_BOOST_FS + typedef fs::ifstream ifstream; + typedef fs::ofstream ofstream; +#else + typedef std::ifstream ifstream; + typedef std::ofstream ofstream; +#endif + public: static bool Exists(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); return file.good(); } static std::vector ReadAllBytes(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); int32_t fileSize = (int32_t)file.tellg(); file.seekg(0); char* data = new char[fileSize]; @@ -31,7 +44,7 @@ public: static std::string ReadAllText(const fs::path& filePath) { - std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); if (!file.is_open()) return ""; int32_t fileSize = (int32_t)file.tellg(); @@ -56,28 +69,28 @@ public: static void WriteAllBytes(const fs::path& filePath, const std::vector& data) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); file.close(); }; static void WriteAllBytes(const std::string& filePath, const std::vector& data) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); file.close(); }; static void WriteAllBytes(const std::string& filePath, const char* data, int dataSize) { - std::ofstream file(filePath, std::ios::binary); + ofstream file(filePath, std::ios::binary); file.write((char*)data, dataSize); file.close(); }; static void WriteAllText(const fs::path& filePath, const std::string& text) { - std::ofstream file(filePath, std::ios::out); + ofstream file(filePath, std::ios::out); file.write(text.c_str(), text.size()); file.close(); } diff --git a/tools/ZAPD/ZAPDUtils/Utils/Path.h b/tools/ZAPD/ZAPDUtils/Utils/Path.h index 0f7ef2743..90f55380b 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/Path.h +++ b/tools/ZAPD/ZAPDUtils/Utils/Path.h @@ -4,7 +4,10 @@ #include #include "Utils/StringHelper.h" -#if __has_include() +#ifdef USE_BOOST_FS +#include +namespace fs = boost::filesystem; +#elif __has_include() #include namespace fs = std::filesystem; #else diff --git a/tools/asm-differ/.github/workflows/check-poetry-lock.yml b/tools/asm-differ/.github/workflows/check-poetry-lock.yml new file mode 100644 index 000000000..6104770e9 --- /dev/null +++ b/tools/asm-differ/.github/workflows/check-poetry-lock.yml @@ -0,0 +1,20 @@ +name: flake check + +on: + pull_request: + push: + +permissions: read-all + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # Install `nix` which is just a dead-simple way to get a stable `poetry` + # in scope. + - uses: cachix/install-nix-action@v20 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + # Check that poetry.lock is in sync with pyproject.toml + - run: nix run github:NixOS/nixpkgs/22.11#poetry -- lock --check diff --git a/tools/asm-differ/.github/workflows/unit-tests.yml b/tools/asm-differ/.github/workflows/unit-tests.yml new file mode 100644 index 000000000..a77498adf --- /dev/null +++ b/tools/asm-differ/.github/workflows/unit-tests.yml @@ -0,0 +1,15 @@ +name: unit tests + +on: + pull_request: + push: + +permissions: read-all + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: python3 -m pip install --user colorama watchdog levenshtein cxxfilt + - run: python3 test.py diff --git a/tools/asm-differ/.gitignore b/tools/asm-differ/.gitignore index a2b216fea..90df93b18 100644 --- a/tools/asm-differ/.gitignore +++ b/tools/asm-differ/.gitignore @@ -1,4 +1,3 @@ .mypy_cache/ __pycache__/ .vscode/ -poetry.lock diff --git a/tools/asm-differ/.gitrepo b/tools/asm-differ/.gitrepo index a23a9c1e4..21e3d185a 100644 --- a/tools/asm-differ/.gitrepo +++ b/tools/asm-differ/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/simonlindholm/asm-differ branch = main - commit = ae408664a89ea4dc70d005d0afc69ac26c938cbb - parent = c833969ea79ba31c3103e25e94ef88098c0287de + commit = 4ed8473173c5a4d6d62337ee4759fdbd93fcf20b + parent = 862e62040f70cb24d66e893ff4299b79fda9407d method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/asm-differ/README.md b/tools/asm-differ/README.md index 1d0932c9b..4e62b15b4 100644 --- a/tools/asm-differ/README.md +++ b/tools/asm-differ/README.md @@ -1,6 +1,6 @@ # asm-differ -Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, and ARM32; should be easy to hack to support other instruction sets. +Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, ARM32, SH2, SH4, and m68k; should be easy to hack to support other instruction sets. ![](screenshot.png) diff --git a/tools/asm-differ/diff.py b/tools/asm-differ/diff.py index 230dbaed7..d20fe4ed7 100755 --- a/tools/asm-differ/diff.py +++ b/tools/asm-differ/diff.py @@ -54,7 +54,7 @@ if __name__ == "__main__": argcomplete = None parser = argparse.ArgumentParser( - description="Diff MIPS, PPC, AArch64, or ARM32 assembly." + description="Diff MIPS, PPC, AArch64, ARM32, SH2, SH4, or m68k assembly." ) start_argument = parser.add_argument( @@ -120,11 +120,11 @@ if __name__ == "__main__": ) parser.add_argument( "-f", - "--objfile", - dest="objfile", + "--file", + dest="file", type=str, - help="""File path for an object file being diffed. When used - the map file isn't searched for the function given. Useful for dynamically + help="""File path for a file being diffed. When used the map + file isn't searched for the function given. Useful for dynamically linked libraries.""", ) parser.add_argument( @@ -212,9 +212,9 @@ if __name__ == "__main__": "-s", "--stop-at-ret", dest="stop_at_ret", - action="store_true", + action="count", help="""Stop disassembling at the first return instruction. - Some functions have multiple return points, so use with care!""", + You can also pass -ss to stop at the second return instruction, and so on.""", ) parser.add_argument( "-i", @@ -264,6 +264,14 @@ if __name__ == "__main__": help="""Automatically update when source/object files change. Recommended in combination with -m.""", ) + parser.add_argument( + "-y", + "--yes", + dest="agree", + action="store_true", + help="""Automatically agree to any yes/no questions asked. + Useful if you really want to use the -w option without -m.""" + ) parser.add_argument( "-0", "--diff_mode=single_base", @@ -407,7 +415,7 @@ class ProjectSettings: build_command: List[str] map_format: str build_dir: str - ms_map_address_offset: int + map_address_offset: int baseimg: Optional[str] myimg: Optional[str] mapfile: Optional[str] @@ -431,7 +439,7 @@ class Config: # Build/objdump options diff_obj: bool - objfile: Optional[str] + file: Optional[str] make: bool source_old_binutils: bool diff_section: str @@ -449,7 +457,7 @@ class Config: show_branches: bool show_line_numbers: bool show_source: bool - stop_at_ret: bool + stop_at_ret: Optional[int] ignore_large_imms: bool ignore_addr_diffs: bool algorithm: str @@ -481,7 +489,9 @@ def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings: objdump_flags=settings.get("objdump_flags", []), expected_dir=settings.get("expected_dir", "expected/"), map_format=settings.get("map_format", "gnu"), - ms_map_address_offset=settings.get("ms_map_address_offset", 0), + map_address_offset=settings.get( + "map_address_offset", settings.get("ms_map_address_offset", 0) + ), build_dir=settings.get("build_dir", settings.get("mw_build_dir", "build/")), show_line_numbers_default=settings.get("show_line_numbers_default", True), disassemble_all=settings.get("disassemble_all", False), @@ -522,7 +532,7 @@ def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config: arch=arch, # Build/objdump options diff_obj=args.diff_obj, - objfile=args.objfile, + file=args.file, make=args.make, source_old_binutils=args.source_old_binutils, diff_section=args.diff_section, @@ -557,6 +567,9 @@ def get_objdump_executable(objdump_executable: Optional[str]) -> str: "mips-linux-gnu-objdump", "mips64-elf-objdump", "mips-elf-objdump", + "sh-elf-objdump", + "sh4-linux-gnu-objdump", + "m68k-elf-objdump", ] for objdump_cand in objdump_candidates: try: @@ -590,7 +603,7 @@ BUFFER_CMD: List[str] = ["tail", "-c", str(10**9)] # -i ignores case when searching # -c something about how the screen gets redrawn; I don't remember the purpose # -#6 makes left/right arrow keys scroll by 6 characters -LESS_CMD: List[str] = ["less", "-SRic", "-#6"] +LESS_CMD: List[str] = ["less", "-SRic", "-+F", "-+X", "-#6"] DEBOUNCE_DELAY: float = 0.1 @@ -766,7 +779,6 @@ class AnsiFormatter(Formatter): BasicFormat.STACK: Fore.YELLOW, BasicFormat.REGISTER: Fore.YELLOW, BasicFormat.REGISTER_CATEGORY: Fore.LIGHTYELLOW_EX, - BasicFormat.DELAY_SLOT: Fore.LIGHTBLACK_EX, BasicFormat.DIFF_CHANGE: Fore.LIGHTBLUE_EX, BasicFormat.DIFF_ADD: Fore.GREEN, BasicFormat.DIFF_REMOVE: Fore.RED, @@ -1271,11 +1283,7 @@ def search_map_file( if len(find) == 1: names_find = re.search(r"(\S+) ... (\S+)", find[0]) assert names_find is not None - fileofs = ( - int(names_find.group(1), 16) - - load_address - + project.ms_map_address_offset - ) + fileofs = int(names_find.group(1), 16) - load_address if for_binary: return None, fileofs @@ -1462,7 +1470,7 @@ def dump_objfile( if start.startswith("0"): fail("numerical start address not supported with -o; pass a function name") - objfile = config.objfile + objfile = config.file if not objfile: objfile, _ = search_map_file(start, project, config, for_binary=False) @@ -1495,15 +1503,21 @@ def dump_objfile( def dump_binary( start: str, end: Optional[str], config: Config, project: ProjectSettings ) -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: - if not project.baseimg or not project.myimg: + binfile = config.file or project.myimg + if not project.baseimg or not binfile: fail("Missing myimg/baseimg in config.") if config.make: - run_make(project.myimg, project) + run_make(binfile, project) + if not os.path.isfile(binfile): + fail(f"Not able to find binary file: {binfile}") start_addr = maybe_eval_int(start) - if start_addr is None: + if start_addr is None and config.file is None: _, start_addr = search_map_file(start, project, config, for_binary=True) if start_addr is None: fail("Not able to find function in map file.") + start_addr += project.map_address_offset + elif start_addr is None: + fail("Start address must be an integer expression when using binary -f") if end is not None: end_addr = eval_int(end, "End address must be an integer expression.") else: @@ -1515,9 +1529,9 @@ def dump_binary( ] flags2 = [f"--start-address={start_addr}", f"--stop-address={end_addr}"] return ( - project.myimg, + binfile, (objdump_flags + flags1, project.baseimg, None), - (objdump_flags + flags2, project.myimg, None), + (objdump_flags + flags2, binfile, None), ) @@ -1569,7 +1583,8 @@ class AsmProcessorMIPS(AsmProcessor): # integer. return prev, None before, imm, after = parse_relocated_line(prev) - repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch) + addend = reloc_addend_from_imm(imm, before, self.config.arch) + repl = row.split()[-1] + addend if "R_MIPS_LO16" in row: repl = f"%lo({repl})" elif "R_MIPS_HI16" in row: @@ -1590,6 +1605,8 @@ class AsmProcessorMIPS(AsmProcessor): repl = f"%got({repl})" elif "R_MIPS_CALL16" in row: repl = f"%call16({repl})" + elif "R_MIPS_LITERAL" in row: + repl = repl[:-len(addend)] else: assert False, f"unknown relocation type '{row}' for line '{prev}'" return before + repl + after, repl @@ -1812,6 +1829,66 @@ class AsmProcessorI686(AsmProcessor): return mnemonic == "ret" +class AsmProcessorSH2(AsmProcessor): + def __init__(self, config: Config) -> None: + super().__init__(config) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + return prev, None + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "rts" + + +class AsmProcessorM68k(AsmProcessor): + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str] + ) -> Tuple[str, str]: + # replace objdump's syntax of pointer accesses with the equivilant in AT&T syntax for readability + return mnemonic, re.sub( + r"%(sp|a[0-7]|fp|pc)@(?:(?:\((-?(?:0x[0-9a-f]+|[0-9]+)) *(,%d[0-7]:[wl])?\))|(\+)|(-))?", + r"\5\2(%\1\3)\4", + args, + ) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + + addr_imm = re.search(r"(? bool: + return mnemonic == "rts" or mnemonic == "rte" or mnemonic == "rtr" + + @dataclass class ArchSettings: name: str @@ -2006,6 +2083,48 @@ I686_BRANCH_INSTRUCTIONS = { "jz", } +SH2_BRANCH_INSTRUCTIONS = { + "bf", + "bf.s", + "bt", + "bt.s", + "bra", + "bsr", +} + +M68K_CONDS = { + "ra", + "cc", + "cs", + "eq", + "ge", + "gt", + "hi", + "le", + "ls", + "lt", + "mi", + "ne", + "pl", + "vc", + "vs", +} + +M68K_BRANCH_INSTRUCTIONS = { + f"{prefix}{cond}{suffix}" + for prefix in {"b", "db"} + for cond in M68K_CONDS + for suffix in {"s", "w"} +}.union( + { + "dbt", + "dbf", + "bsrw", + "bsrs", + } +) + + MIPS_SETTINGS = ArchSettings( name="mips", re_int=re.compile(r"[0-9]+"), @@ -2127,6 +2246,72 @@ I686_SETTINGS = ArchSettings( proc=AsmProcessorI686, ) +SH2_SETTINGS = ArchSettings( + name="sh2", + # match -128-127 preceded by a '#' with a ',' after (8 bit immediates) + re_int=re.compile(r"(?<=#)(-?(?:1[01][0-9]|12[0-8]|[1-9][0-9]?|0))(?=,)"), + # match , match ! and after + re_comment=re.compile(r"<.*?>|!.*"), + # - r0-r15 general purpose registers, r15 is stack pointer during exceptions + # - sr, gbr, vbr - control registers + # - mach, macl, pr, pc - system registers + re_reg=re.compile(r"r1[0-5]|r[0-9]"), + # sh2 has pc-relative and gbr-relative but not stack-pointer-relative + re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"), + # max immediate size is 8-bit + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile(r"\b0[xX][0-9a-fA-F]+\b"), + # https://github.com/bminor/binutils-gdb/blob/master/bfd/elf32-sh-relocs.h#L21 + re_reloc=re.compile(r"R_SH_"), + arch_flags=["-m", "sh2"], + branch_instructions=SH2_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=SH2_BRANCH_INSTRUCTIONS.union( + {"bf", "bf.s", "bt", "bt.s", "bra", "bsr"} + ), + delay_slot_instructions=SH2_BRANCH_INSTRUCTIONS.union( + {"bf.s", "bt.s", "bra", "braf", "bsr", "bsrf", "jmp", "jsr", "rts"} + ), + proc=AsmProcessorSH2, +) + +SH4_SETTINGS = replace( + SH2_SETTINGS, + name="sh4", + # - fr0-fr15, dr0-dr14, xd0-xd14, fv0-fv12 FP registers + # dr/xd registers can only be even-numbered, and fv registers can only be a multiple of 4 + re_reg=re.compile( + r"r1[0-5]|r[0-9]|fr1[0-5]|fr[0-9]|dr[02468]|dr1[024]|xd[02468]|xd1[024]|fv[048]|fv12" + ), + arch_flags=["-m", "sh4"], +) + +SH4EL_SETTINGS = replace(SH4_SETTINGS, name="sh4el", big_endian=False) + +M68K_SETTINGS = ArchSettings( + name="m68k", + re_int=re.compile(r"[0-9]+"), + # '|' is used by assemblers, but is not used by objdump + re_comment=re.compile(r"<.*>"), + # Includes: + # - d0-d7 data registers + # - a0-a6 address registers + # - fp0-fp7 floating-point registers + # - usp (user sp) + # - fp, sr, ccr + # - fpcr, fpsr, fpiar + re_reg=re.compile(r"%\b(d[0-7]|a[0-6]|usp|fp([0-7]|cr|sr|iar)?|sr|ccr)(:[wl])?\b"), + # This matches all stack accesses that do not use an index register + re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%sp|%a7)\))"), + re_imm=re.compile(r"#?-?\b(0x[0-9a-f]+|[0-9]+)(?!\()"), + re_large_imm=re.compile(r"#?-?([1-9][0-9]{2,}|0x[0-9a-f]{3,})"), + re_reloc=re.compile(r"R_68K_"), + arch_flags=["-m", "m68k"], + branch_instructions=M68K_BRANCH_INSTRUCTIONS, + # Pretty much every instruction can take an address immediate + instructions_with_address_immediates=M68K_BRANCH_INSTRUCTIONS.union("jmp", "jsr"), + proc=AsmProcessorM68k, +) + ARCH_SETTINGS = [ MIPS_SETTINGS, MIPSEL_SETTINGS, @@ -2136,11 +2321,21 @@ ARCH_SETTINGS = [ AARCH64_SETTINGS, PPC_SETTINGS, I686_SETTINGS, + SH2_SETTINGS, + SH4_SETTINGS, + SH4EL_SETTINGS, + M68K_SETTINGS, ] def hexify_int(row: str, pat: Match[str], arch: ArchSettings) -> str: full = pat.group(0) + + # sh2/sh4 only has 8-bit immediates, just convert them uniformly without + # any -hex stuff + if arch.name == "sh2" or arch.name == "sh4" or arch.name == "sh4el": + return hex(int(full) & 0xFF) + if len(full) <= 1: # leave one-digit ints alone return full @@ -2220,16 +2415,15 @@ class Line: def process(dump: str, config: Config) -> List[Line]: arch = config.arch processor = arch.proc(config) - skip_next = False source_lines = [] source_filename = None source_line_num = None + rets_remaining = config.stop_at_ret i = 0 num_instr = 0 data_refs: Dict[int, Dict[str, List[int]]] = defaultdict(lambda: defaultdict(list)) output: List[Line] = [] - stop_after_delay_slot = False lines = dump.split("\n") while i < len(lines): row = lines[i] @@ -2364,17 +2558,8 @@ def process(dump: str, config: Config) -> List[Line]: if not config.score_stack_differences: scorable_line = re.sub(arch.re_sprel, "addr(sp)", scorable_line) - if skip_next: - skip_next = False - row = "" - mnemonic = "" - scorable_line = "" - if mnemonic in arch.branch_likely_instructions: - skip_next = True - row = re.sub(arch.re_reg, "", row) row = re.sub(arch.re_sprel, "addr(sp)", row) - row_with_imm = row if mnemonic in arch.instructions_with_address_immediates: row = row.strip() row, _ = split_off_address(row) @@ -2414,8 +2599,10 @@ def process(dump: str, config: Config) -> List[Line]: num_instr += 1 source_lines = [] - if config.stop_at_ret and processor.is_end_of_function(mnemonic, args): - break + if rets_remaining and processor.is_end_of_function(mnemonic, args): + rets_remaining -= 1 + if rets_remaining == 0: + break processor.post_process(output) return output @@ -2509,7 +2696,7 @@ def diff_sequences( try: rem1 = remap(seq1) rem2 = remap(seq2) - except ValueError as e: + except ValueError: if len(seq1) + len(seq2) < 0x110000: raise # If there are too many unique elements, chr() doesn't work. @@ -2776,13 +2963,6 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: # the diff, and don't just happen to have the are the same address # by accident. pass - elif line1.diff_row == "": - # Don't draw attention to differing branch-likely delay slots: they - # typically mirror the branch destination - 1 so the real difference - # is elsewhere. Still, do mark them as different to avoid confusion. - # No need to consider branches because delay slots can't branch. - out1 = out1.reformat(BasicFormat.DELAY_SLOT) - out2 = out2.reformat(BasicFormat.DELAY_SLOT) else: mnemonic = line1.original.split()[0] branchless1, address1 = out1.plain(), "" @@ -3131,7 +3311,7 @@ def align_diffs(old_diff: Diff, new_diff: Diff, config: Config) -> TableData: def diff_line_to_table_line(line: Tuple[OutputLine, ...]) -> TableLine: cells = [ - (line[0].base or Text(), line[0].line1) + (line[0].base or Text(), line[0].line1), ] for ol in line[1:]: cells.append((ol.fmt2, ol.line2)) @@ -3433,9 +3613,9 @@ def main() -> None: elif not args.watch: display.run_sync() else: - if not args.make: + if not args.make and not args.agree: yn = input( - "Warning: watch-mode (-w) enabled without auto-make (-m). " + "Warning: watch-mode (-w) enabled without auto-make (-m) or agree-all (-y). " "You will have to run make manually. Ok? (Y/n) " ) if yn.lower() == "n": diff --git a/tools/asm-differ/mypy.ini b/tools/asm-differ/mypy.ini index 138b93935..0559d9b8b 100644 --- a/tools/asm-differ/mypy.ini +++ b/tools/asm-differ/mypy.ini @@ -11,7 +11,7 @@ warn_return_any = True warn_unused_ignores = True ignore_missing_imports = True python_version = 3.6 -files = diff.py +files = diff.py, test.py [mypy-diff_settings] ignore_errors = True diff --git a/tools/asm-differ/poetry.lock b/tools/asm-differ/poetry.lock new file mode 100644 index 000000000..2826d784b --- /dev/null +++ b/tools/asm-differ/poetry.lock @@ -0,0 +1,321 @@ +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. + +[[package]] +name = "ansiwrap" +version = "0.8.4" +description = "textwrap, but savvy to ANSI colors and styles" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ansiwrap-0.8.4-py2.py3-none-any.whl", hash = "sha256:7b053567c88e1ad9eed030d3ac41b722125e4c1271c8a99ade797faff1f49fb1"}, + {file = "ansiwrap-0.8.4.zip", hash = "sha256:ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7"}, +] + +[package.dependencies] +textwrap3 = ">=0.9.2" + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cxxfilt" +version = "0.3.0" +description = "Python interface to c++filt / abi::__cxa_demangle" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "cxxfilt-0.3.0-py2.py3-none-any.whl", hash = "sha256:774e85a8d0157775ed43276d89397d924b104135762d86b3a95f81f203094e07"}, + {file = "cxxfilt-0.3.0.tar.gz", hash = "sha256:7df6464ba5e8efbf0d8974c0b2c78b32546676f06059a83515dbdfa559b34214"}, +] + +[package.extras] +test = ["pytest (>=3.0.0)"] + +[[package]] +name = "levenshtein" +version = "0.20.9" +description = "Python extension for computing string edit distances and similarities." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:105c239ec786750cd5136991c58196b440cc39b6acf3ec8227f6562c9a94e4b9"}, + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f7728bea7fe6dc55ceecde0dcda4287e74fe3b6733ad42530f46aaa8d2f81d0"}, + {file = "Levenshtein-0.20.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc7eca755c13c92814c8cce8175524cf764ce38f39228b602f59eac58cfdc51a"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8a552e79d053dc1324fb90d342447fd4e15736f4cbc5363b6fbd5577f53dce9"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5474b2681ee0b7944fb1e7fe281cd44e2dfe75b03ba4558dca49c96fa0861b62"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:56e132c203b0dd8fc72a33e791c39ad0d5a25bcf24b130a1e202abbf489a3e75"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3badc94708ac05b405e795fde58a53272b90a9ee6099ecd54a345658b7b812e1"}, + {file = "Levenshtein-0.20.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48b9b3ae095b14dad7bc4bd219c7cd9113a7aa123a033337c85b00fe2ed565d3"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0d3a1f7328c91caeb1f857ddd2787e3f19d60cc2c688339d249ca8841da61454"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef67c50428c99caf67d31bd209da21d9378da5f0cc3ad4f7bafb6caa78aee6f2"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:47f6d1592c0891f7355e38a302becd233336ca2f55f9a8be3a8635f946a6784f"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2891019740e874f05e0349e9f27b6af8ad837b1612f42e9c90c296d54d1404fd"}, + {file = "Levenshtein-0.20.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c554704eec4f4ba742febdcc79a85491f8f9a1d493cb103bb2af18536d6cf122"}, + {file = "Levenshtein-0.20.9-cp310-cp310-win32.whl", hash = "sha256:7628e356b3f9c78ad7272c3b9137f0641a1368849e749ff6f2c8fe372795806b"}, + {file = "Levenshtein-0.20.9-cp310-cp310-win_amd64.whl", hash = "sha256:ba2bafe3511194a37044cae4e7d328cca70657933052691c37eba2ca428a379d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7605a94145198d19fdaaa7e29c0f8a56ad719b12386f3ae8cd8ed4cb9fa6c2e4"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29db4dabfad2ddf33c7986eb6fd525c7587cca4c4d9e187365cff0a5281f5a35"}, + {file = "Levenshtein-0.20.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:965336c1772a4fc5fb2686a2a0bfaf3455dced96f19f50f278da8bc139076d31"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67235753035ac898d6475c0b29540521018db2e0027a3c1deb9aa0af0a84fd74"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:120dca58136aee3d8c7b190e30db7b6a6eb9579ea5712df84ad076a389801743"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6496ea66a6f755e48c0d82f1eee396d16edcd5592d4b3677d26fa789a636a728"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0af20327acc2c904d11611cb3a0d8d17f80c279a12e0b84189eafc35297186d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d2f891ef53afbab6cf2eeb92ff13151884d17dc80a2d6d3c7ae74d7738b772"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2ab9c72380582bf4745d1c5b055b1df0c85f7a980a04bd7603a855dd91478c0f"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6de13be3eb5ac48053fb1635a7b4daa936b9114ad4b264942e9eb709fcaa41dd"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a9fc296860588251d8d72b4f4637cca4eef7351e042a7a23d44e6385aef1e160"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:35777b20fe35858248c22da37984469e6dd1278f55d17c53378312853d5d683d"}, + {file = "Levenshtein-0.20.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b9e0642ddb4c431f77c38cec9edbd0317e26c3f37d072ccf281ab58926dce69"}, + {file = "Levenshtein-0.20.9-cp311-cp311-win32.whl", hash = "sha256:f88ec322d86d3cc9d3936dbf6b421ad813950c2658599d48ac4ede59f2a6047e"}, + {file = "Levenshtein-0.20.9-cp311-cp311-win_amd64.whl", hash = "sha256:2907a6888455f9915d5b656f5d058f63eaf6063b2c7f0f1ff6bc05706ae5bc39"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6bcebc79760be08488cb921732af34ade6abc7476a94866881c68b45ec4b6c82"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47d8d4f3825d1d8f3b19382537a8536e689cf57aaa224d2cb4f44cf844811885"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d40e18a5817ee7f0675401613a26c492fd4ea68d2103c1480fb5a6ab1b8763d"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d258f3d44f6bac17f33002fea34570049507d3476c3716b5267170c666b20b4"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c621e0c389546147ed43c33ca4168de0f91c920508ab8a94a400835fa084f486"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a31527dc7994353091626e62b7d82d53290cb00df48d3e5d29cb291fb4c03c"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:129c8f192e656b7c2c543bf0d704d677720771b8bc2f30c50db02fbc2001bac2"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5a01fca58255be6bf724a40af2575d7cf644c099c28a00d1f5f6a81675e60e7d"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:4c13749ea39a228f05d5bd9d473e76f726fc2dcd493cafc322f740921a6eeffb"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:69daa0f8eefa5b947255a81346741ed86fe7030e0909741dbd978e38b30da3fd"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fcc78a73ed423bbb09ac902dd2e1ff1094d159d1c6766e5e52da5f376a4cba18"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-win32.whl", hash = "sha256:d82ae57982a9f33c55778f1f0f63d5e51e291aee236abed3b90497578b944202"}, + {file = "Levenshtein-0.20.9-cp36-cp36m-win_amd64.whl", hash = "sha256:4082379b406752fc1173ed1f8c3a122c5d5491e10e564ed721602e4e049e3d4c"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb499783b7126e6fc45c39ab34c8114148425c5d975b1ce35e6c47c0eda58a94"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce747b296aad3bd8a563cccf2119cf37bf72f668076bfdad6ec55f0a0596dd9"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1347c3ebbe8f42f7a487e8d23a95bde6529379b4939ad51d32246d001565c499"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a2f1c1e8360603a6da29416da61d1907a27656843e269413091c8c3a3e6286e"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73c1caaedbee3617fd29139aac8dab7743776b59c3c1fed2790308ecb43c7b25"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1f24133df69f8b618fc508d6023695130ad3c3c8968ef43aaeca21835eb337a"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cf7260722f8170c09af5cfa714bb45626a4dfc85d71d1c1c9c52c2a6901cc501"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:01668178fd9244df290db0340293982fe7641162a12a35ad9ffb3fe145ce6377"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e46f9d3483dc4991ac60ff3711b0d40f93e352cc8edc16b68df57ccc472bd6c"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:680cd250dc1875eb80cf2a0cca742bd13f6f9ab11c48317244fcc483eba1dd67"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2346e2f7dfbbc2936bd81e19f7734984e72486ffc086760c897b39b9f674b2fa"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-win32.whl", hash = "sha256:7f31bcf257fec9719d0d97185c419d315f6f20a194f0b442919e352d19418b2e"}, + {file = "Levenshtein-0.20.9-cp37-cp37m-win_amd64.whl", hash = "sha256:48262bc9830ad60de96411fcb2e96a522c7206e7069169e04d89dd79364a7722"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eba5696e1f8e8da225498fd1d743886d639400cafd0e5be3c553978cbb54c345"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:679333188f9791c85109d2981e97e8721a99b2b975b5c52d16aca50ac9c70757"}, + {file = "Levenshtein-0.20.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:06c9cfc61cf66833692d1ed258ec5a0871221b0779f1281c32a10348c492e2c5"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5d80d949168df406f2ac9ade1a5d0419cef0a8df611c8c2efe88f0248c9d0c0"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9275c6e601ff7f659116e2235e8585950c9c39d72504006077be85bf27950b35"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6414eea342d9632045e12b66bef043dbc6557189a283dc4dcc5966f63fa48998"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56571c58700600a382ecdf3f9efcb132ed16a0476cbb4e23a9478ab0ae788fd9"}, + {file = "Levenshtein-0.20.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7ccb76ffd9b851384f9cf1595b90b17cae46f0ab895e234de11ea48f9d9f73a"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109172943cff7fb10f28a9eb819eb3eaf9c88fe38661fb1d0f230a8ae68a615c"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:534c8bbdfd033fa20575d57332d9ac0447b5afbeca7db975ba169762ece2051f"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:381a725963c392585135654caa3c7fc32cb1755ed977fb9db72e8838fee261be"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7e4a44b1223980a9880e6f2bbf19121a125928580df9e4e81207199190343e11"}, + {file = "Levenshtein-0.20.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc0ced58ee6d07351cde140a7ec88e5f2ceb053c805af1f90514d21914d21cad"}, + {file = "Levenshtein-0.20.9-cp38-cp38-win32.whl", hash = "sha256:5eec0868ffcd825564dd5e3399305eaa159220554d1aedbff13af0de1fe01f6c"}, + {file = "Levenshtein-0.20.9-cp38-cp38-win_amd64.whl", hash = "sha256:e9db476e40a3aa184631d102b716a019f70837eb0fcdd5b5d1504f099f91359c"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d5a20ecc20a09a32c72128c43d7df23877a2469b3c17780ae83f9a9d55873c08"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b7b772f2f62a19a15ccb1b09c6c7754ca7430bb7e19d4ca4ff232958786873b"}, + {file = "Levenshtein-0.20.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af92326b90ea6fe4521cf6a5dfe450e21150393c573ef3ad9ee446f1009fbfbd"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48554dad328e198a636f937e2f4c057aac8e4bfcb8467b10e0f5daa94307b17"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:82304821e128d5453d1755d1c2f3d9cdf75e9def3517cf913b09df174e20283b"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2052357c5da195ede7dbc81a4e3408ebd6374a1ff1b86a0a9d8b8ce9562b32c3"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d60c6b47ccd6841c990418f7f4f58c28f7da9b07b81eaafc99b836cf351df1"}, + {file = "Levenshtein-0.20.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dc2194c917e4466cb604580b16e42286f04e3fe0424489459e68f0834f5c527"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb1e20965d759d89318cac7ff7eb045eb1fafcb5c3fa3047a23f6ae20c810ad7"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74e959035da10a54e7a2eee28408eff672297ce96cdadd6f4a2f269a06e395c4"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4a441b23d9704f57eb34af6a300ae5c335b9e77e6a065ada36ca69d6fc582af9"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f59470c49114a5da064712a427317f2b1fa5bb89aa2dfd0e300f8289e26aec28"}, + {file = "Levenshtein-0.20.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:06191f5d0527e3224107aea260b5cffc8a78722e0efb4e793f0e45c449b813a2"}, + {file = "Levenshtein-0.20.9-cp39-cp39-win32.whl", hash = "sha256:3235c461904fe94b4f62fee78a1658c1316344411c81b02400c27d692a893f8f"}, + {file = "Levenshtein-0.20.9-cp39-cp39-win_amd64.whl", hash = "sha256:8b852def43d165c2f2b468239d66b847d9e6f52a775fc657773ced04d26062bd"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f674cc75f127692525563155e500a3fa16aaf24dafd33a9bcda46e2979f793a1"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a34e3fd21acb31fcd29a0c8353dca74dfbb59957210a6f142505907a9dff3d59"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0ddddf2beafd1a2e17a87f80be562a7f7478e6098ccfc15de4c879972dfa2f9"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9649af1a896a4a7fc7f6f1fd093e8a92f463297f56c7bd0f8d7d16dfabeb236d"}, + {file = "Levenshtein-0.20.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d7bd7f25336849027fbe5ed32b6ffd404436727d78a014e348dcd17347c73fd8"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0371d996ae81089296f42b6e886c7bf138d1cb0f002b0c724a9e5d689b29b5a0"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7e00e2fda9f225b5f4537647f6195cf220d468532739d3390eaf082b1d76c87"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1600f5ebe2f2aebf13e88cf488ec2e5ce25f7a42b5846335018693baf4ea63bd"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bcd59fcf06aaedda98da185ec289dc2c2c9922ce789f6a9c101709d4a22cac9"}, + {file = "Levenshtein-0.20.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1549e307028fa5c3a8cf28ae8bcb1f6072df2abf7f36b9d7adf7fd60690fe372"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:795f2e95d09a33c66c73cd49be3ee632fb4b8c41be72c0cb8df29a329ce7d111"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:726bfb361d3b6786bea31392752f0ffcca568db7dc3f1e274f1b529489b8ad05"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0fd315132786375de532355fa06b2f11c4b4af5784b7e064dc54b6ee0c3281"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0674bc0549d5ea9edb934b3b03a160a116cc410feb5739a51f9c4f618ee674e3"}, + {file = "Levenshtein-0.20.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1ef8f3ecdfca5d6f0538226338d58617270439a1cc9b6cacb30a388984bb1608"}, + {file = "Levenshtein-0.20.9.tar.gz", hash = "sha256:70a8ad5e28bb76d87da1eb3f31de940836596547d6d01317c2289f5b7cd0b0ea"}, +] + +[package.dependencies] +rapidfuzz = ">=2.3.0,<3.0.0" + +[[package]] +name = "rapidfuzz" +version = "2.15.1" +description = "rapid fuzzy string matching" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fc0bc259ebe3b93e7ce9df50b3d00e7345335d35acbd735163b7c4b1957074d3"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d59fb3a410d253f50099d7063855c2b95df1ef20ad93ea3a6b84115590899f25"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c525a3da17b6d79d61613096c8683da86e3573e807dfaecf422eea09e82b5ba6"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4deae6a918ecc260d0c4612257be8ba321d8e913ccb43155403842758c46fbe"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2577463d10811386e704a3ab58b903eb4e2a31b24dfd9886d789b0084d614b01"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f67d5f56aa48c0da9de4ab81bffb310683cf7815f05ea38e5aa64f3ba4368339"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7927722ff43690e52b3145b5bd3089151d841d350c6f8378c3cfac91f67573a"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6534afc787e32c4104f65cdeb55f6abe4d803a2d0553221d00ef9ce12788dcde"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d0ae6ec79a1931929bb9dd57bc173eb5ba4c7197461bf69e3a34b6dd314feed2"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be7ccc45c4d1a7dfb595f260e8022a90c6cb380c2a346ee5aae93f85c96d362b"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:8ba013500a2b68c64b2aecc5fb56a2dad6c2872cf545a0308fd044827b6e5f6a"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4d9f7d10065f657f960b48699e7dddfce14ab91af4bab37a215f0722daf0d716"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7e24a1b802cea04160b3fccd75d2d0905065783ebc9de157d83c14fb9e1c6ce2"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win32.whl", hash = "sha256:dffdf03499e0a5b3442951bb82b556333b069e0661e80568752786c79c5b32de"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d150d90a7c6caae7962f29f857a4e61d42038cfd82c9df38508daf30c648ae7"}, + {file = "rapidfuzz-2.15.1-cp310-cp310-win_arm64.whl", hash = "sha256:87c30e9184998ff6eb0fa9221f94282ce7c908fd0da96a1ef66ecadfaaa4cdb7"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6986413cb37035eb796e32f049cbc8c13d8630a4ac1e0484e3e268bb3662bd1b"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a72f26e010d4774b676f36e43c0fc8a2c26659efef4b3be3fd7714d3491e9957"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5cd54c98a387cca111b3b784fc97a4f141244bbc28a92d4bde53f164464112e"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7fac7c3da39f93e6b2ebe386ed0ffe1cefec91509b91857f6e1204509e931f"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f976e76ac72f650790b3a5402431612175b2ac0363179446285cb3c901136ca9"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abde47e1595902a490ed14d4338d21c3509156abb2042a99e6da51f928e0c117"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca8f1747007a3ce919739a60fa95c5325f7667cccf6f1c1ef18ae799af119f5e"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35da09ab9797b020d0d4f07a66871dfc70ea6566363811090353ea971748b5a"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a3a769ca7580686a66046b77df33851b3c2d796dc1eb60c269b68f690f3e1b65"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d50622efefdb03a640a51a6123748cd151d305c1f0431af762e833d6ffef71f0"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b7461b0a7651d68bc23f0896bffceea40f62887e5ab8397bf7caa883592ef5cb"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:074ee9e17912e025c72a5780ee4c7c413ea35cd26449719cc399b852d4e42533"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7025fb105a11f503943f17718cdb8241ea3bb4d812c710c609e69bead40e2ff0"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win32.whl", hash = "sha256:2084d36b95139413cef25e9487257a1cc892b93bd1481acd2a9656f7a1d9930c"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:5a738fcd24e34bce4b19126b92fdae15482d6d3a90bd687fd3d24ce9d28ce82d"}, + {file = "rapidfuzz-2.15.1-cp311-cp311-win_arm64.whl", hash = "sha256:dc3cafa68cfa54638632bdcadf9aab89a3d182b4a3f04d2cad7585ed58ea8731"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c53d57ba7a88f7bf304d4ea5a14a0ca112db0e0178fff745d9005acf2879f7d"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6ee758eec4cf2215dc8d8eafafcea0d1f48ad4b0135767db1b0f7c5c40a17dd"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d93ba3ae59275e7a3a116dac4ffdb05e9598bf3ee0861fecc5b60fb042d539e"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c3ff75e647908ddbe9aa917fbe39a112d5631171f3fcea5809e2363e525a59d"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d89c421702474c6361245b6b199e6e9783febacdbfb6b002669e6cb3ef17a09"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f69e6199fec0f58f9a89afbbaea78d637c7ce77f656a03a1d6ea6abdc1d44f8"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:41dfea282844d0628279b4db2929da0dacb8ac317ddc5dcccc30093cf16357c1"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2dd03477feefeccda07b7659dd614f6738cfc4f9b6779dd61b262a73b0a9a178"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5efe035aa76ff37d1b5fa661de3c4b4944de9ff227a6c0b2e390a95c101814c0"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ed2cf7c69102c7a0a06926d747ed855bc836f52e8d59a5d1e3adfd980d1bd165"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a0e441d4c2025110ec3eba5d54f11f78183269a10152b3a757a739ffd1bb12bf"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-win32.whl", hash = "sha256:a4a54efe17cc9f53589c748b53f28776dfdfb9bc83619685740cb7c37985ac2f"}, + {file = "rapidfuzz-2.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:bb8318116ecac4dfb84841d8b9b461f9bb0c3be5b616418387d104f72d2a16d1"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e9296c530e544f68858c3416ad1d982a1854f71e9d2d3dcedb5b216e6d54f067"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:49c4bcdb9238f11f8c4eba1b898937f09b92280d6f900023a8216008f299b41a"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebb40a279e134bb3fef099a8b58ed5beefb201033d29bdac005bddcdb004ef71"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7381c11cb590bbd4e6f2d8779a0b34fdd2234dfa13d0211f6aee8ca166d9d05"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfdcdedfd12a0077193f2cf3626ff6722c5a184adf0d2d51f1ec984bf21c23c3"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85bece1ec59bda8b982bd719507d468d4df746dfb1988df11d916b5e9fe19e8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1b393f4a1eaa6867ffac6aef58cfb04bab2b3d7d8e40b9fe2cf40dd1d384601"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53de456ef020a77bf9d7c6c54860a48e2e902584d55d3001766140ac45c54bc7"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2492330bc38b76ed967eab7bdaea63a89b6ceb254489e2c65c3824efcbf72993"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:099e4c6befaa8957a816bdb67ce664871f10aaec9bebf2f61368cf7e0869a7a1"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:46599b2ad4045dd3f794a24a6db1e753d23304699d4984462cf1ead02a51ddf3"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:591f19d16758a3c55c9d7a0b786b40d95599a5b244d6eaef79c7a74fcf5104d8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed17359061840eb249f8d833cb213942e8299ffc4f67251a6ed61833a9f2ea20"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-win32.whl", hash = "sha256:aa1e5aad325168e29bf8e17006479b97024aa9d2fdbe12062bd2f8f09080acf8"}, + {file = "rapidfuzz-2.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:c2bb68832b140c551dbed691290bef4ee6719d4e8ce1b7226a3736f61a9d1a83"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3fac40972cf7b6c14dded88ae2331eb50dfbc278aa9195473ef6fc6bfe49f686"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0e456cbdc0abf39352800309dab82fd3251179fa0ff6573fa117f51f4e84be8"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:22b9d22022b9d09fd4ece15102270ab9b6a5cfea8b6f6d1965c1df7e3783f5ff"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46754fe404a9a6f5cbf7abe02d74af390038d94c9b8c923b3f362467606bfa28"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91abb8bf7610efe326394adc1d45e1baca8f360e74187f3fa0ef3df80cdd3ba6"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e40a2f60024f9d3c15401e668f732800114a023f3f8d8c40f1521a62081ff054"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a48ee83916401ac73938526d7bd804e01d2a8fe61809df7f1577b0b3b31049a3"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71580052f9dbac443c02f60484e5a2e5f72ad4351b84b2009fbe345b1f38422"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:82b86d5b8c1b9bcbc65236d75f81023c78d06a721c3e0229889ff4ed5c858169"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fc4528b7736e5c30bc954022c2cf410889abc19504a023abadbc59cdf9f37cae"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e1e0e569108a5760d8f01d0f2148dd08cc9a39ead79fbefefca9e7c7723c7e88"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:94e1c97f0ad45b05003806f8a13efc1fc78983e52fa2ddb00629003acf4676ef"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47e81767a962e41477a85ad7ac937e34d19a7d2a80be65614f008a5ead671c56"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win32.whl", hash = "sha256:79fc574aaf2d7c27ec1022e29c9c18f83cdaf790c71c05779528901e0caad89b"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:f3dd4bcef2d600e0aa121e19e6e62f6f06f22a89f82ef62755e205ce14727874"}, + {file = "rapidfuzz-2.15.1-cp39-cp39-win_arm64.whl", hash = "sha256:cac095cbdf44bc286339a77214bbca6d4d228c9ebae3da5ff6a80aaeb7c35634"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b89d1126be65c85763d56e3b47d75f1a9b7c5529857b4d572079b9a636eaa8a7"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7460e91168229768be882ea365ba0ac7da43e57f9416e2cfadc396a7df3c2"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c33c03e7092642c38f8a15ca2d8fc38da366f2526ec3b46adf19d5c7aa48ba"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040faca2e26d9dab5541b45ce72b3f6c0e36786234703fc2ac8c6f53bb576743"}, + {file = "rapidfuzz-2.15.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6e2a3b23e1e9aa13474b3c710bba770d0dcc34d517d3dd6f97435a32873e3f28"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e597b9dfd6dd180982684840975c458c50d447e46928efe3e0120e4ec6f6686"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d14752c9dd2036c5f36ebe8db5f027275fa7d6b3ec6484158f83efb674bab84e"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558224b6fc6124d13fa32d57876f626a7d6188ba2a97cbaea33a6ee38a867e31"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c89cfa88dc16fd8c9bcc0c7f0b0073f7ef1e27cceb246c9f5a3f7004fa97c4d"}, + {file = "rapidfuzz-2.15.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:509c5b631cd64df69f0f011893983eb15b8be087a55bad72f3d616b6ae6a0f96"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0f73a04135a03a6e40393ecd5d46a7a1049d353fc5c24b82849830d09817991f"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c99d53138a2dfe8ada67cb2855719f934af2733d726fbf73247844ce4dd6dd5"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f01fa757f0fb332a1f045168d29b0d005de6c39ee5ce5d6c51f2563bb53c601b"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60368e1add6e550faae65614844c43f8a96e37bf99404643b648bf2dba92c0fb"}, + {file = "rapidfuzz-2.15.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:785744f1270828cc632c5a3660409dee9bcaac6931a081bae57542c93e4d46c4"}, + {file = "rapidfuzz-2.15.1.tar.gz", hash = "sha256:d62137c2ca37aea90a11003ad7dc109c8f1739bfbe5a9a217f3cdb07d7ac00f6"}, +] + +[package.extras] +full = ["numpy"] + +[[package]] +name = "textwrap3" +version = "0.9.2" +description = "textwrap from Python 3.6 backport (plus a few tweaks)" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "textwrap3-0.9.2-py2.py3-none-any.whl", hash = "sha256:bf5f4c40faf2a9ff00a9e0791fed5da7415481054cef45bb4a3cfb1f69044ae0"}, + {file = "textwrap3-0.9.2.zip", hash = "sha256:5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414"}, +] + +[[package]] +name = "watchdog" +version = "2.3.1" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"}, + {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"}, + {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"}, + {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"}, + {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"}, + {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"}, + {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"}, + {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"}, + {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"}, + {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"}, + {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"}, + {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"}, + {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"}, + {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"}, + {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "f48df5c526c5e9e9b6c8dd83bb06b628c347f616a66670800e3032a83ba50c08" diff --git a/tools/asm-differ/test.py b/tools/asm-differ/test.py new file mode 100644 index 000000000..b5f037f90 --- /dev/null +++ b/tools/asm-differ/test.py @@ -0,0 +1,189 @@ +import unittest +import diff +import json + + +class TestSh2(unittest.TestCase): + def get_config(self) -> diff.Config: + arch = diff.get_arch("sh2") + formatter = diff.JsonFormatter(arch_str="sh2") + config = diff.Config( + arch=arch, + diff_obj=True, + file='', + make=False, + source_old_binutils=True, + diff_section='.text', + inlines=False, + max_function_size_lines=25000, + max_function_size_bytes=100000, + formatter=formatter, + diff_mode=diff.DiffMode.NORMAL, + base_shift=0, + skip_lines=0, + compress=None, + show_rodata_refs=True, + show_branches=True, + show_line_numbers=False, + show_source=False, + stop_at_ret=None, + ignore_large_imms=False, + ignore_addr_diffs=True, + algorithm="levenshtein", + reg_categories={}, + ) + return config + + # check that comment <> regex has ? to avoid ",r1 ! 60e87d0" + # all being a comment for: + # mov.l 44 ,r1 ! 60e87d0 + def test_sh2_comment(self) -> None: + # parser specifically looks for tabs so make sure they are represented + + # 16: d1 0b mov.l 44 ,r1 ! 60e87d0 + sh2_theirs = ( + " 16:\td1 0b \tmov.l\t44 ,r1\t! 60e87d0\n" + ) + + # 16: d1 0b mov.l 44 <_func_060E8780+0x44>,r1 ! 0 <_func_060E8780> + sh2_ours = " 16:\td1 0b \tmov.l\t44 <_func_060E8780+0x44>,r1\t! 0 <_func_060E8780>\n" + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + curr = loaded["rows"][0]["current"]["src_comment"] + + assert curr != "<_func_060E8780+0x44>,r1 ! 0 <_func_060E8780>" + assert curr == "<_func_060E8780+0x44>" + + def test_sh2_immediates(self) -> None: + # test parsing these immediates + # func_0606B760(): + # 0: ec 01 mov #1,r12 + # 2: 71 01 add #1,r1 + # 4: ec ff mov #-1,r12 + # 6: 71 ff add #-1,r1 + # 8: ec 7f mov #127,r12 + # a: 71 7f add #127,r1 + # c: ec 80 mov #-128,r12 + # e: 71 80 add #-128,r1 + sh2_theirs = "func_0606B760():\n 0:\tec 01 \tmov\t#1,r12\n 2:\t71 01 \tadd\t#1,r1\n 4:\tec ff \tmov\t#-1,r12\n 6:\t71 ff \tadd\t#-1,r1\n 8:\tec 7f \tmov\t#127,r12\n a:\t71 7f \tadd\t#127,r1\n c:\tec 80 \tmov\t#-128,r12\n e:\t71 80 \tadd\t#-128,r1" + + # just diff with self + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + expected = [ + "0: mov #0x1,r12", + "2: add #0x1,r1", + "4: mov #0xff,r12", + "6: add #0xff,r1", + "8: mov #0x7f,r12", + "a: add #0x7f,r1", + "c: mov #0x80,r12", + "e: add #0x80,r1", + ] + + i = 0 + for text in loaded["rows"]: + assert text["base"]["text"][0]["text"] == expected[i] + i += 1 + + def test_more_sh2_immediates(self) -> None: + # test that the re_int regex is able to catch all these "boundary" numbers + # since we have to match 0-9 one digit at a time + # 0: 71 00 add #0,r1 + # 2: 71 01 add #1,r1 + # 4: 71 09 add #9,r1 + # 6: 71 0a add #10,r1 + # 8: 71 0b add #11,r1 + # a: 71 13 add #19,r1 + # c: 71 64 add #100,r1 + # e: 71 65 add #101,r1 + # 10: 71 6d add #109,r1 + # 12: 71 6f add #111,r1 + # 14: 71 77 add #119,r1 + # 16: 71 f7 add #-9,r1 + # 18: 71 f6 add #-10,r1 + # 1a: 71 f5 add #-11,r1 + # 1c: 71 ed add #-19,r1 + # 1e: 71 9c add #-100,r1 + # 20: 71 9b add #-101,r1 + # 22: 71 93 add #-109,r1 + # 24: 71 91 add #-111,r1 + # 26: 71 89 add #-119,r1 + sh2_theirs = "func_0606B760():\n 0:\t71 00 \tadd\t#0,r1\n 2:\t71 01 \tadd\t#1,r1\n 4:\t71 09 \tadd\t#9,r1\n 6:\t71 0a \tadd\t#10,r1\n 8:\t71 0b \tadd\t#11,r1\n a:\t71 13 \tadd\t#19,r1\n c:\t71 64 \tadd\t#100,r1\n e:\t71 65 \tadd\t#101,r1\n 10:\t71 6d \tadd\t#109,r1\n 12:\t71 6f \tadd\t#111,r1\n 14:\t71 77 \tadd\t#119,r1\n 16:\t71 f7 \tadd\t#-9,r1\n 18:\t71 f6 \tadd\t#-10,r1\n 1a:\t71 f5 \tadd\t#-11,r1\n 1c:\t71 ed \tadd\t#-19,r1\n 1e:\t71 9c \tadd\t#-100,r1\n 20:\t71 9b \tadd\t#-101,r1\n 22:\t71 93 \tadd\t#-109,r1\n 24:\t71 91 \tadd\t#-111,r1\n 26:\t71 89 \tadd\t#-119,r1" + + # just diff with self + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + expected = [ + "0: add #0x0,r1", + "2: add #0x1,r1", + "4: add #0x9,r1", + "6: add #0xa,r1", + "8: add #0xb,r1", + "a: add #0x13,r1", + "c: add #0x64,r1", + "e: add #0x65,r1", + "10: add #0x6d,r1", + "12: add #0x6f,r1", + "14: add #0x77,r1", + "16: add #0xf7,r1", + "18: add #0xf6,r1", + "1a: add #0xf5,r1", + "1c: add #0xed,r1", + "1e: add #0x9c,r1", + "20: add #0x9b,r1", + "22: add #0x93,r1", + "24: add #0x91,r1", + "26: add #0x89,r1", + ] + + i = 0 + for text in loaded["rows"]: + assert text["base"]["text"][0]["text"] == expected[i] + i += 1 + + def test_branch(self) -> None: + # test that bt.s and bra get ~> + # func(): + # 0: 8d 02 bt.s 8 + # 2: 6e f3 mov r15,r14 + # 4: a0 01 bra a + # 6: 00 09 nop + + # 00000008 : + # lab_0606B780(): + # 8: db 32 mov.l d4 ,r11 + + # 0000000a : + # lab_0606B8E0(): + # a: 00 0b rts + # c: 00 09 nop + sh2_theirs = "func():\n 0:\t8d 02 \tbt.s\t8 \n 2:\t6e f3 \tmov\tr15,r14\n 4:\ta0 01 \tbra\ta \n 6:\t00 09 \tnop\t\n\n00000008 :\nlab_0606B780():\n 8:\tdb 32 \tmov.l\td4 ,r11\n\n0000000a :\nlab_0606B8E0():\n a:\t00 0b \trts\t\n c:\t00 09 \tnop\t" + sh2_ours = sh2_theirs + + config = self.get_config() + display = diff.Display(sh2_theirs, sh2_ours, config) + loaded = json.loads(display.run_diff()[0]) + + # bt.s 8 + print(loaded["rows"][0]["base"]["text"][1]["text"] == "~>") + print(loaded["rows"][0]["base"]["text"][1]["key"] == "8") + + # bra a + print(loaded["rows"][2]["base"]["text"][1]["text"] == "~>") + print(loaded["rows"][2]["base"]["text"][1]["key"] == "10") + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/asm-processor/.gitrepo b/tools/asm-processor/.gitrepo index e9ee1dd74..6265b2fc5 100644 --- a/tools/asm-processor/.gitrepo +++ b/tools/asm-processor/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:simonlindholm/asm-processor.git branch = main - commit = bbd86ea1faf84e6a7a0e101ab8068a00a3dfb2fc - parent = 8985197b6da23db874ac6e8a29ddec5636944bba + commit = fed1e3ddb9967bd427f4599b1b8ededa296bd9f9 + parent = 4fa13e4132cf8adb2f07bb34927e62e525c8cc79 method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/asm-processor/asm_processor.py b/tools/asm-processor/asm_processor.py index 0d62bc32a..317585291 100644 --- a/tools/asm-processor/asm_processor.py +++ b/tools/asm-processor/asm_processor.py @@ -2,7 +2,6 @@ import argparse import tempfile import struct -import copy import sys import re import os @@ -82,7 +81,14 @@ R_MIPS_HI16 = 5 R_MIPS_LO16 = 6 MIPS_DEBUG_ST_STATIC = 2 +MIPS_DEBUG_ST_PROC = 6 +MIPS_DEBUG_ST_BLOCK = 7 +MIPS_DEBUG_ST_END = 8 +MIPS_DEBUG_ST_FILE = 11 MIPS_DEBUG_ST_STATIC_PROC = 14 +MIPS_DEBUG_ST_STRUCT = 26 +MIPS_DEBUG_ST_UNION = 27 +MIPS_DEBUG_ST_ENUM = 28 class ElfFormat: @@ -605,11 +611,11 @@ class GlobalAsmBlock: line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line) changed_section = False emitting_double = False - if line.startswith('glabel ') and self.cur_section == '.text': + if (line.startswith('glabel ') or line.startswith('jlabel ')) and self.cur_section == '.text': self.text_glabels.append(line.split()[1]) if not line: pass # empty line - elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')): + elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('jlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')): pass # label elif line.startswith('.section') or line in ['.text', '.data', '.rdata', '.rodata', '.bss', '.late_rodata']: # section change @@ -651,19 +657,26 @@ class GlobalAsmBlock: emitting_double = True elif line.startswith('.space'): self.add_sized(int(line.split()[1], 0), real_line) - elif line.startswith('.balign') or line.startswith('.align'): + elif line.startswith('.balign'): align = int(line.split()[1]) if align != 4: self.fail("only .balign 4 is supported", real_line) self.align4() + elif line.startswith('.align'): + align = int(line.split()[1]) + if align != 2: + self.fail("only .align 2 is supported", real_line) + self.align4() elif line.startswith('.asci'): z = (line.startswith('.asciz') or line.startswith('.asciiz')) self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line) elif line.startswith('.byte'): self.add_sized(len(line.split(',')), real_line) - elif line.startswith('.half'): + elif line.startswith('.half') or line.startswith('.hword') or line.startswith(".short"): self.align2() self.add_sized(2*len(line.split(',')), real_line) + elif line.startswith('.size'): + pass elif line.startswith('.'): # .macro, ... self.fail("asm directive not supported", real_line) @@ -1268,6 +1281,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d # Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM if mdebug_section and convert_statics != "no": + static_name_count = {} strtab_index = len(objfile.symtab.strtab.data) new_strtab_data = [] ifd_max, cb_fd_offset = fmt.unpack('II', mdebug_section.data[18*4 : 20*4]) @@ -1276,20 +1290,28 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d for i in range(ifd_max): offset = cb_fd_offset + 18*4*i iss_base, _, isym_base, csym = fmt.unpack('IIII', objfile.data[offset + 2*4 : offset + 6*4]) + scope_level = 0 for j in range(csym): offset2 = cb_sym_offset + 12 * (isym_base + j) iss, value, st_sc_index = fmt.unpack('III', objfile.data[offset2 : offset2 + 12]) st = (st_sc_index >> 26) sc = (st_sc_index >> 21) & 0x1f - if st in [MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC]: + if st in (MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC): symbol_name_offset = cb_ss_offset + iss_base + iss symbol_name_offset_end = objfile.data.find(b'\0', symbol_name_offset) assert symbol_name_offset_end != -1 - symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end + 1] + symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end] + if scope_level > 1: + # For in-function statics, append an increasing counter to + # the name, to avoid duplicate conflicting symbols. + count = static_name_count.get(symbol_name, 0) + 1 + static_name_count[symbol_name] = count + symbol_name += b":" + str(count).encode("utf-8") emitted_symbol_name = symbol_name if convert_statics == "global-with-filename": # Change the emitted symbol name to include the filename, - # but don't let that affect deduplication logic. + # but don't let that affect deduplication logic (we still + # want to be able to reference statics from GLOBAL_ASM). emitted_symbol_name = objfile_name.encode("utf-8") + b":" + symbol_name section_name = {1: '.text', 2: '.data', 3: '.bss', 15: '.rodata'}[sc] section = objfile.find_section(section_name) @@ -1304,10 +1326,23 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d st_other=STV_DEFAULT, st_shndx=section.index, strtab=objfile.symtab.strtab, - name=symbol_name[:-1].decode('latin1')) - strtab_index += len(emitted_symbol_name) - new_strtab_data.append(emitted_symbol_name) + name=symbol_name.decode('latin1')) + strtab_index += len(emitted_symbol_name) + 1 + new_strtab_data.append(emitted_symbol_name + b'\0') new_syms.append(sym) + if st in ( + MIPS_DEBUG_ST_FILE, + MIPS_DEBUG_ST_STRUCT, + MIPS_DEBUG_ST_UNION, + MIPS_DEBUG_ST_ENUM, + MIPS_DEBUG_ST_BLOCK, + MIPS_DEBUG_ST_PROC, + MIPS_DEBUG_ST_STATIC_PROC, + ): + scope_level += 1 + if st == MIPS_DEBUG_ST_END: + scope_level -= 1 + assert scope_level == 0 objfile.symtab.strtab.data += b''.join(new_strtab_data) # Get rid of duplicate symbols, favoring ones that are not UNDEF. diff --git a/tools/asm-processor/mypy.ini b/tools/asm-processor/mypy.ini new file mode 100644 index 000000000..9a57d3c52 --- /dev/null +++ b/tools/asm-processor/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +files = asm_processor.py, build.py + diff --git a/tools/asm-processor/prelude.inc b/tools/asm-processor/prelude.inc index 3e58ff149..9bc893962 100644 --- a/tools/asm-processor/prelude.inc +++ b/tools/asm-processor/prelude.inc @@ -1,11 +1,21 @@ .set noat .set noreorder .set gp=64 + .macro glabel label .global \label \label: .endm +.macro dlabel label + .global \label + \label: +.endm + +.macro jlabel label + \label: +.endm + # Float register aliases (o32 ABI, odd ones are rarely used) diff --git a/tools/asm-processor/tests/static-global.c b/tools/asm-processor/tests/static-global.c index a7f616907..12b143462 100644 --- a/tools/asm-processor/tests/static-global.c +++ b/tools/asm-processor/tests/static-global.c @@ -25,9 +25,11 @@ nop ) static int xtext(int a, int b, int c) { + static int bss2; return 1; } void baz(void) { + { static int bss2; } xtext(bss2, rodata2[0], data2[0]); } diff --git a/tools/asm-processor/tests/static-global.objdump b/tools/asm-processor/tests/static-global.objdump index a519e4f48..c792e6a93 100644 --- a/tools/asm-processor/tests/static-global.objdump +++ b/tools/asm-processor/tests/static-global.objdump @@ -15,6 +15,8 @@ SYMBOL TABLE: 00000004 g O .data 00000000 data2 00000004 g O .bss 00000000 bss2 00000030 g F .text 00000000 xtext +00000008 g O .bss 00000000 bss2:1 +0000000c g O .bss 00000000 bss2:2 RELOCATION RECORDS FOR [.text]: diff --git a/tools/fado/.gitrepo b/tools/fado/.gitrepo index 042b904f1..f88c42275 100644 --- a/tools/fado/.gitrepo +++ b/tools/fado/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:EllipticEllipsis/fado.git branch = master - commit = 8d896ee97d565508755584803c409fc33bb0c953 - parent = b51c9f4d22d6e7db63700c163418654431a2a61a + commit = 8ce0483766e2857c6f2997880ab7a5381b2cc5c3 + parent = aa8be27d62d8485c61f88889faf6132e4f66590b method = merge - cmdver = 0.4.3 + cmdver = 0.4.6 diff --git a/tools/fado/Makefile b/tools/fado/Makefile index 135f51251..8f61a209e 100644 --- a/tools/fado/Makefile +++ b/tools/fado/Makefile @@ -57,7 +57,7 @@ clean: $(RM) -r build $(ELF) format: - clang-format-11 -i $(C_FILES) $(H_FILES) lib/fairy/* + clang-format-14 -i $(C_FILES) $(H_FILES) lib/fairy/* .PHONY: all clean format diff --git a/tools/fado/include/mips_elf.h b/tools/fado/include/mips_elf.h index 122e98d25..f76a69b79 100644 --- a/tools/fado/include/mips_elf.h +++ b/tools/fado/include/mips_elf.h @@ -476,9 +476,9 @@ typedef struct { /* Relocation table entry with addend (in section of type SHT_RELA). */ typedef struct { - Elf32_Addr r_offset; /* Address */ - Elf32_Word r_info; /* Relocation type and symbol index */ - Elf32_Sword r_addend; /* Addend */ + Elf32_Addr r_offset; /* Address */ + Elf32_Word r_info; /* Relocation type and symbol index */ + Elf32_Sword r_addend; /* Addend */ } Elf32_Rela; /* How to extract and insert information held in the r_info field. */ From 81424208e6559fe19e9ebdbaaf4dbb2d9173ba51 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Mon, 11 Sep 2023 02:27:23 -0300 Subject: [PATCH 05/74] document object_zov (lulu the zora vocalist) (#1357) * initial commit of object_zov documentation * morphFrames and mouth name change * sAnimations array name instead of sAnimationInfo * forgor format * separate categories --- assets/xml/objects/object_zos.xml | 2 +- assets/xml/objects/object_zov.xml | 163 ++++++++++++---------- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 43 +++--- src/overlays/actors/ovl_En_Zov/z_en_zov.h | 5 +- 5 files changed, 112 insertions(+), 103 deletions(-) diff --git a/assets/xml/objects/object_zos.xml b/assets/xml/objects/object_zos.xml index a1364a842..5b3b12345 100644 --- a/assets/xml/objects/object_zos.xml +++ b/assets/xml/objects/object_zos.xml @@ -6,7 +6,7 @@ - + diff --git a/assets/xml/objects/object_zov.xml b/assets/xml/objects/object_zov.xml index 440782f10..31b9bcd7b 100644 --- a/assets/xml/objects/object_zov.xml +++ b/assets/xml/objects/object_zov.xml @@ -1,81 +1,90 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 4be070d25..0e3262869 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -138,7 +138,7 @@ static AnimationHeader* sAnimations[] = { &gEvanLeanOnKeyboardAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD &gEvanLeanOnKeyboardAndSighAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD_AND_SIGH &gEvanHandsOnHipsAnim, // EN_ZOS_ANIM_HANDS_ON_HIPS - &gEeanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP + &gEvanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP &gEvanTalkLookDownAnim, // EN_ZOS_ANIM_TALK_LOOK_DOWN &gEvanTalkArmsOutAnim, // EN_ZOS_ANIM_TALK_ARMS_OUT &gEvanTalkHandsOnHipsAnim, // EN_ZOS_ANIM_TALK_HANDS_ON_HIPS diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c index 6342c38d3..8e85f4675 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -5,7 +5,6 @@ */ #include "z_en_zov.h" -#include "objects/object_zov/object_zov.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -60,20 +59,20 @@ static ColliderCylinderInit sCylinderInit = { { 20, 40, 0, { 0, 0, 0 } }, }; -static AnimationHeader* D_80BD270C[] = { - &object_zov_Anim_00D3EC, &object_zov_Anim_008120, &object_zov_Anim_00B4CC, &object_zov_Anim_00A888, - &object_zov_Anim_00C510, &object_zov_Anim_00CAA8, &object_zov_Anim_008120, &object_zov_Anim_00A888, - &object_zov_Anim_002B5C, &object_zov_Anim_00418C, &object_zov_Anim_005A6C, &object_zov_Anim_0066A4, - &object_zov_Anim_0017D4, &object_zov_Anim_0023F4, +static AnimationHeader* sAnimations[] = { + &gLuluLookDownAnim, &gLuluPutHandsDownAnim, &gLuluLookForwardAndDownAnim, &gLuluLookAroundAnim, + &gLuluAngleHeadAnim, &gLuluNodAnim, &gLuluPutHandsDownAnim, &gLuluLookAroundAnim, + &gLuluSingStartAnim, &gLuluSingLoopAnim, &gLuluLookForwardAndLeftAnim, &gLuluLookLeftLoopAnim, + &gLuluTurnAndWalkAnim, &gLuluWalkLoopAnim, }; static Vec3f D_80BD2744 = { 400.0f, 600.0f, 0.0f }; static Vec3f D_80BD2750 = { 400.0f, 600.0f, 0.0f }; -static TexturePtr D_80BD275C[] = { object_zov_Tex_013C38, object_zov_Tex_015138, object_zov_Tex_014138 }; +static TexturePtr sEyeTextures[] = { gLuluEyeOpenTex, gLuluEyeHalfTex, gLuluEyeClosedTex }; -static TexturePtr D_80BD2768[] = { object_zov_Tex_0135F8, object_zov_Tex_014538 }; +static TexturePtr sMouthTextures[] = { gLuluMouthClosedTex, gLuluMouthOpenTex }; static s8 D_80BD2770[] = { 1, 2, 1, 0, 0, 1, 2, 1, @@ -86,9 +85,9 @@ void EnZov_Init(Actor* thisx, PlayState* play) { this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; Actor_SetScale(&this->picto.actor, 0.01f); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); - SkelAnime_InitFlex(play, &this->skelAnime, &object_zov_Skel_016258, &object_zov_Anim_00D3EC, this->jontTable, - this->morphTable, 23); - Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC); + SkelAnime_InitFlex(play, &this->skelAnime, &gLuluSkel, &gLuluLookDownAnim, this->jointTable, this->morphTable, + LULU_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gLuluLookDownAnim); this->unk_320 = 0; this->csIdIndex = -1; @@ -147,10 +146,10 @@ void func_80BD1440(EnZov* this, s16 arg1) { this->csIdIndex = arg1; } -void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) { +void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 morphFrames) { f32 frame; - if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(D_80BD270C))) { + if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(sAnimations))) { switch (index) { case 6: frame = 30.0f; @@ -164,8 +163,8 @@ void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) { frame = 0.0f; break; } - Animation_Change(&this->skelAnime, D_80BD270C[index], 1.0f, frame, Animation_GetLastFrame(D_80BD270C[index]), - mode, transitionRate); + Animation_Change(&this->skelAnime, sAnimations[index], 1.0f, frame, Animation_GetLastFrame(sAnimations[index]), + mode, morphFrames); this->unk_322 = index; } } @@ -521,14 +520,14 @@ void EnZov_Update(Actor* thisx, PlayState* play) { s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnZov* this = THIS; - if (limbIndex == 12) { + if (limbIndex == LULU_LIMB_HEAD) { rot->x += this->unk_2F0.y; if ((this->unk_320 & 0x10) && (this->unk_322 == 0)) { rot->z += this->unk_2F0.x; } } - if (limbIndex == 11) { + if (limbIndex == LULU_LIMB_TORSO) { rot->x += this->unk_2F6.y; } return false; @@ -537,17 +536,17 @@ s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnZov_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnZov* this = THIS; - if (limbIndex == 12) { + if (limbIndex == LULU_LIMB_HEAD) { Matrix_MultVec3f(&D_80BD2744, &this->picto.actor.focus.pos); Math_Vec3f_Copy(&this->unk_2FC, &this->picto.actor.focus.pos); this->unk_2FC.y += 10.0f; } - if (limbIndex == 18) { + if (limbIndex == LULU_LIMB_RIGHT_UPPER_ARM) { Matrix_MultVec3f(&D_80BD2750, &this->unk_308); } - if (limbIndex == 13) { + if (limbIndex == LULU_LIMB_LEFT_UPPER_ARM) { Matrix_MultVec3f(&D_80BD2750, &this->unk_314); } } @@ -625,8 +624,8 @@ void EnZov_Draw(Actor* thisx, PlayState* play) { } gfx = POLY_OPA_DISP; - gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(D_80BD275C[phi_v1])); - gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(D_80BD2768[phi_a1])); + gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(sEyeTextures[phi_v1])); + gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(sMouthTextures[phi_a1])); POLY_OPA_DISP = &gfx[2]; CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.h b/src/overlays/actors/ovl_En_Zov/z_en_zov.h index 7e1204100..7637bb53e 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h @@ -3,6 +3,7 @@ #include "global.h" #include "z64snap.h" +#include "objects/object_zov/object_zov.h" struct EnZov; @@ -16,8 +17,8 @@ typedef void (*EnZovActionFunc)(struct EnZov*, PlayState*); typedef struct EnZov { /* 0x000 */ PictoActor picto; - /* 0x148 */ Vec3s jontTable[23]; - /* 0x1D2 */ Vec3s morphTable[23]; + /* 0x148 */ Vec3s jointTable[LULU_LIMB_MAX]; + /* 0x1D2 */ Vec3s morphTable[LULU_LIMB_MAX]; /* 0x25C */ SkelAnime skelAnime; /* 0x2A0 */ ColliderCylinder collider; /* 0x2EC */ s16 unk_2EC; From 39523baf8c52d59b8ca52832c22e70eadf518f8a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 10 Sep 2023 23:07:53 -0700 Subject: [PATCH 06/74] Add original asset names to all `object_i*` and `object_j*` files (#1365) * Add original asset names to all `object_i*` and `object_j*` files * Remove MM3D name from `object_ishi`; asset names that start with `zelda2_` almost certainly come from Grezzo. --- assets/xml/objects/object_ice_block.xml | 14 ++--- assets/xml/objects/object_icefloe.xml | 4 +- assets/xml/objects/object_icicle.xml | 4 +- assets/xml/objects/object_ik.xml | 36 +++++------ assets/xml/objects/object_ikana_obj.xml | 66 ++++++++++----------- assets/xml/objects/object_ikn_demo.xml | 66 ++++++++++----------- assets/xml/objects/object_ikninside_obj.xml | 36 +++++------ assets/xml/objects/object_iknv_obj.xml | 36 +++++------ assets/xml/objects/object_in.xml | 38 ++++++------ assets/xml/objects/object_in2.xml | 24 ++++---- assets/xml/objects/object_js.xml | 12 ++-- assets/xml/objects/object_jso.xml | 46 +++++++------- 12 files changed, 191 insertions(+), 191 deletions(-) diff --git a/assets/xml/objects/object_ice_block.xml b/assets/xml/objects/object_ice_block.xml index dd25c06d5..4b5cd47d4 100644 --- a/assets/xml/objects/object_ice_block.xml +++ b/assets/xml/objects/object_ice_block.xml @@ -1,23 +1,23 @@  - - + + - + - - + + - - + + diff --git a/assets/xml/objects/object_icefloe.xml b/assets/xml/objects/object_icefloe.xml index 2427052af..0440fa4bb 100644 --- a/assets/xml/objects/object_icefloe.xml +++ b/assets/xml/objects/object_icefloe.xml @@ -1,7 +1,7 @@  - + - + diff --git a/assets/xml/objects/object_icicle.xml b/assets/xml/objects/object_icicle.xml index 4f7bab8a2..ac0000471 100644 --- a/assets/xml/objects/object_icicle.xml +++ b/assets/xml/objects/object_icicle.xml @@ -1,7 +1,7 @@  - - + + diff --git a/assets/xml/objects/object_ik.xml b/assets/xml/objects/object_ik.xml index 352b82487..fcbb90620 100644 --- a/assets/xml/objects/object_ik.xml +++ b/assets/xml/objects/object_ik.xml @@ -1,34 +1,34 @@  - - - - - - - - - - - + + + + + + + + + + + - - + + - + - - - + + + - + diff --git a/assets/xml/objects/object_ikana_obj.xml b/assets/xml/objects/object_ikana_obj.xml index e0490a349..0b67e7757 100644 --- a/assets/xml/objects/object_ikana_obj.xml +++ b/assets/xml/objects/object_ikana_obj.xml @@ -1,38 +1,38 @@  - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - + + + + + + + + - + @@ -58,10 +58,10 @@ - - - - + + + + diff --git a/assets/xml/objects/object_ikn_demo.xml b/assets/xml/objects/object_ikn_demo.xml index 53d5c65a1..bbb803499 100644 --- a/assets/xml/objects/object_ikn_demo.xml +++ b/assets/xml/objects/object_ikn_demo.xml @@ -1,7 +1,7 @@  - + @@ -44,13 +44,13 @@ - - - - - - - + + + + + + + @@ -64,19 +64,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -90,18 +90,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_ikninside_obj.xml b/assets/xml/objects/object_ikninside_obj.xml index 98ae6d34f..26d1e1206 100644 --- a/assets/xml/objects/object_ikninside_obj.xml +++ b/assets/xml/objects/object_ikninside_obj.xml @@ -1,15 +1,15 @@  - - + + - + - + @@ -22,27 +22,27 @@ - - - - - - - - + + + + + + + + - - + + - - - + + + - + diff --git a/assets/xml/objects/object_iknv_obj.xml b/assets/xml/objects/object_iknv_obj.xml index 58926c0e3..5c54c71da 100644 --- a/assets/xml/objects/object_iknv_obj.xml +++ b/assets/xml/objects/object_iknv_obj.xml @@ -24,19 +24,19 @@ - - + + - - + + - - + + - - - - + + + + @@ -57,14 +57,14 @@ - + - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_in.xml b/assets/xml/objects/object_in.xml index 15b2382aa..ee7ceb3a0 100644 --- a/assets/xml/objects/object_in.xml +++ b/assets/xml/objects/object_in.xml @@ -1,10 +1,10 @@  - - - + + + - + @@ -113,21 +113,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_in2.xml b/assets/xml/objects/object_in2.xml index bcd04091b..e903185b4 100644 --- a/assets/xml/objects/object_in2.xml +++ b/assets/xml/objects/object_in2.xml @@ -1,6 +1,6 @@  - + @@ -67,16 +67,16 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/assets/xml/objects/object_js.xml b/assets/xml/objects/object_js.xml index 1335b8287..6d93f7ac2 100644 --- a/assets/xml/objects/object_js.xml +++ b/assets/xml/objects/object_js.xml @@ -1,10 +1,10 @@  - - - - - + + + + + @@ -40,6 +40,6 @@ - + diff --git a/assets/xml/objects/object_jso.xml b/assets/xml/objects/object_jso.xml index a397311c4..bfe271d69 100644 --- a/assets/xml/objects/object_jso.xml +++ b/assets/xml/objects/object_jso.xml @@ -50,26 +50,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -115,8 +115,8 @@ - - - + + + From 190b78549e0fa1a801786e73d914185e1fbca2a6 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 11 Sep 2023 17:38:31 -0700 Subject: [PATCH 07/74] Non libultra Boot Cleanup (#1370) * reorganize * math64 * rcp_utils * osSyncPrintfUnused * comment spacing --- Makefile | 11 +- include/PR/hardware.h | 85 ------ include/PR/os_internal.h | 1 + include/PR/os_internal_reg.h | 4 +- include/PR/os_internal_rsp.h | 13 + include/PR/rcp.h | 259 +++++++++++++++++- include/PR/rsp.h | 58 ---- include/functions.h | 6 +- include/ultra64.h | 1 - spec | 64 ++--- src/audio/lib/aisetnextbuf.c | 2 +- src/{boot_O2_g3 => boot}/CIC6105.c | 0 src/{boot_O2 => boot/O2}/__osMalloc.c | 0 src/{boot_O2 => boot/O2}/__osMemcpy.c | 0 src/{boot_O2 => boot/O2}/__osMemset.c | 0 src/{boot_O2 => boot/O2}/__osStrcmp.c | 0 src/{boot_O2 => boot/O2}/__osStrcpy.c | 0 src/{boot_O2 => boot/O2}/debug.c | 0 src/{boot_O2 => boot/O2}/fmodf.c | 0 src/{boot_O2 => boot/O2}/gfxprint.c | 0 src/{boot_O2 => boot/O2}/loadfragment.c | 0 src/{boot_O2 => boot/O2}/loadfragment2.c | 0 .../boot_80086760.c => boot/O2/math64.c} | 0 src/{boot_O2 => boot/O2}/mtxuty-cvt.c | 0 src/{boot_O2 => boot/O2}/padsetup.c | 0 src/{boot_O2 => boot/O2}/padutils.c | 0 src/{boot_O2 => boot/O2}/printutils.c | 0 src/{boot_O2 => boot/O2}/rand.c | 0 src/boot/O2/rcp_utils.c | 23 ++ src/{boot_O2 => boot/O2}/sleep.c | 0 src/{boot_O2 => boot/O2}/stackcheck.c | 0 src/{boot_O2 => boot/O2}/system_heap.c | 0 src/{boot_O2 => boot/O2}/system_malloc.c | 0 src/{boot_O2_g3 => boot}/boot_main.c | 0 src/{boot_O2_g3 => boot}/build.c | 0 src/{boot_O2_g3 => boot}/fault.c | 0 src/{boot_O2_g3 => boot}/fault_drawer.c | 0 src/{boot_O2_g3 => boot}/idle.c | 0 src/{boot_O2_g3 => boot}/irqmgr.c | 0 src/{boot_O2_g3 => boot}/syncprintf.c | 3 +- src/{boot_O2_g3 => boot}/viconfig.c | 0 src/{boot_O2_g3 => boot}/yaz0.c | 0 src/{boot_O2_g3 => boot}/z_std_dma.c | 0 src/boot_O2/boot_80084940.c | 15 - src/libultra/io/cartrominit.c | 2 +- src/libultra/io/devmgr.c | 2 +- src/libultra/io/epirawdma.c | 2 +- src/libultra/io/epirawread.c | 2 +- src/libultra/io/epirawwrite.c | 2 +- src/libultra/io/pirawdma.c | 2 +- src/libultra/io/sirawdma.c | 4 +- tools/disasm/files.txt | 8 +- tools/disasm/functions.txt | 6 +- tools/sizes/boot_functions.csv | 32 +-- 54 files changed, 366 insertions(+), 241 deletions(-) create mode 100644 include/PR/os_internal_rsp.h delete mode 100644 include/PR/rsp.h rename src/{boot_O2_g3 => boot}/CIC6105.c (100%) rename src/{boot_O2 => boot/O2}/__osMalloc.c (100%) rename src/{boot_O2 => boot/O2}/__osMemcpy.c (100%) rename src/{boot_O2 => boot/O2}/__osMemset.c (100%) rename src/{boot_O2 => boot/O2}/__osStrcmp.c (100%) rename src/{boot_O2 => boot/O2}/__osStrcpy.c (100%) rename src/{boot_O2 => boot/O2}/debug.c (100%) rename src/{boot_O2 => boot/O2}/fmodf.c (100%) rename src/{boot_O2 => boot/O2}/gfxprint.c (100%) rename src/{boot_O2 => boot/O2}/loadfragment.c (100%) rename src/{boot_O2 => boot/O2}/loadfragment2.c (100%) rename src/{boot_O2/boot_80086760.c => boot/O2/math64.c} (100%) rename src/{boot_O2 => boot/O2}/mtxuty-cvt.c (100%) rename src/{boot_O2 => boot/O2}/padsetup.c (100%) rename src/{boot_O2 => boot/O2}/padutils.c (100%) rename src/{boot_O2 => boot/O2}/printutils.c (100%) rename src/{boot_O2 => boot/O2}/rand.c (100%) create mode 100644 src/boot/O2/rcp_utils.c rename src/{boot_O2 => boot/O2}/sleep.c (100%) rename src/{boot_O2 => boot/O2}/stackcheck.c (100%) rename src/{boot_O2 => boot/O2}/system_heap.c (100%) rename src/{boot_O2 => boot/O2}/system_malloc.c (100%) rename src/{boot_O2_g3 => boot}/boot_main.c (100%) rename src/{boot_O2_g3 => boot}/build.c (100%) rename src/{boot_O2_g3 => boot}/fault.c (100%) rename src/{boot_O2_g3 => boot}/fault_drawer.c (100%) rename src/{boot_O2_g3 => boot}/idle.c (100%) rename src/{boot_O2_g3 => boot}/irqmgr.c (100%) rename src/{boot_O2_g3 => boot}/syncprintf.c (52%) rename src/{boot_O2_g3 => boot}/viconfig.c (100%) rename src/{boot_O2_g3 => boot}/yaz0.c (100%) rename src/{boot_O2_g3 => boot}/z_std_dma.c (100%) delete mode 100644 src/boot_O2/boot_80084940.c diff --git a/Makefile b/Makefile index d8878ac4b..e08d983c8 100644 --- a/Makefile +++ b/Makefile @@ -207,8 +207,7 @@ DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d) $(shell mkdir -p build/baserom $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(ASSET_BIN_DIRS),build/$(dir))) # directory flags -build/src/boot_O2/%.o: OPTFLAGS := -O2 -build/src/boot_O2_g3/%.o: OPTFLAGS := -O2 -g3 +build/src/boot/O2/%.o: OPTFLAGS := -O2 build/src/libultra/os/%.o: OPTFLAGS := -O1 build/src/libultra/voice/%.o: OPTFLAGS := -O2 @@ -225,8 +224,8 @@ build/assets/%.o: OPTFLAGS := -O1 build/assets/%.o: ASM_PROC_FLAGS := # file flags -build/src/boot_O2_g3/fault.o: CFLAGS += -trapuv -build/src/boot_O2_g3/fault_drawer.o: CFLAGS += -trapuv +build/src/boot/fault.o: CFLAGS += -trapuv +build/src/boot/fault_drawer.o: CFLAGS += -trapuv build/src/code/jpegutils.o: OPTFLAGS := -O2 build/src/code/jpegdecoder.o: OPTFLAGS := -O2 @@ -239,8 +238,8 @@ build/src/libultra/libc/llcvt.o: OPTFLAGS := -O1 build/src/libultra/libc/llcvt.o: MIPS_VERSION := -mips3 -32 # cc & asm-processor -build/src/boot_O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- -build/src/boot_O2_g3/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- +build/src/boot/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- +build/src/boot/O2/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- build/src/libultra/%.o: CC := $(CC_OLD) # Needed at least until voice is decompiled diff --git a/include/PR/hardware.h b/include/PR/hardware.h index 3bcf1b7fc..c6f27bdff 100644 --- a/include/PR/hardware.h +++ b/include/PR/hardware.h @@ -15,93 +15,8 @@ // Volatile access wrapper, enforcing uncached memory #define HW_REG(reg, type) *(volatile type*)((reg) | KSEG1) -#define AI_DRAM_ADDR_REG 0x04500000 -#define AI_LEN_REG 0x04500004 -#define AI_CONTROL_REG 0x04500008 -#define AI_STATUS_REG 0x0450000C -#define AI_DACRATE_REG 0x04500010 -#define AI_BITRATE_REG 0x04500014 - -#define AI_STATUS_AI_BUSY (1 << 30) -#define AI_STATUS_AI_FULL (1 << 31) - -#define VI_STATUS_REG 0x04400000 -#define VI_CONTROL_REG 0x04400000 -#define VI_ORIGIN_REG 0x04400004 -#define VI_DRAM_ADDR_REG 0x04400004 -#define VI_WIDTH_REG 0x04400008 -#define VI_H_WIDTH_REG 0x04400008 -#define VI_INTR_REG 0x0440000C -#define VI_V_INTER_REG 0x0440000C -#define VI_CURRENT_REG 0x04400010 -#define VI_V_CURRENT_LINE_REG 0x04400010 -#define VI_BURST_REG 0x04400014 -#define VI_TIMING_REG 0x04400014 -#define VI_V_SYNC_REG 0x04400018 //VI vertical sync -#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync -#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap -#define VI_H_SYNC_LEAP_REG 0x04400020 -#define VI_H_START_REG 0x04400024 //VI horizontal video -#define VI_H_VIDEO_REG 0x04400024 -#define VI_V_START_REG 0x04400028 //VI vertical video -#define VI_V_VIDEO_REG 0x04400028 -#define VI_V_BURST_REG 0x0440002C //VI vertical burst -#define VI_X_SCALE_REG 0x04400030 //VI x-scale -#define VI_Y_SCALE_REG 0x04400034 //VI y-scale - -#define SP_IMEM_START 0x04001000 -#define SP_IMEM_SIZE 0x1000 - -#define SP_DMEM_START 0x04000000 -#define SP_DMEM_SIZE 0x1000 - #define TMEM_SIZE 0x1000 -#define SP_MEM_ADDR_REG 0x04040000 -#define SP_DRAM_ADDR_REG 0x04040004 -#define SP_RD_LEN_REG 0x04040008 -#define SP_WR_LEN_REG 0x0404000C -#define SP_STATUS_REG 0x04040010 -#define SP_DMA_FULL_REG 0x04040014 -#define SP_DMA_BUSY_REG 0x04040018 -#define SP_PC_REG 0x04080000 - -#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address -#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address -#define PI_RD_LEN_REG 0x04600008 //PI read length -#define PI_WR_LEN_REG 0x0460000C //PI write length -#define PI_STATUS_REG 0x04600010 //PI status -#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency -#define PI_DOMAIN1_REG 0x04600014 -#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width -#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size -#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release -#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency -#define PI_DOMAIN2_REG 0x04600024 -#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width -#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size -#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release - -#define PI_STATUS_BUSY (1 << 0) -#define PI_STATUS_IOBUSY (1 << 1) -#define PI_STATUS_ERROR (1 << 2) - -#define PI_STATUS_RESET_CONTROLLER (1 << 0) -#define PI_STATUS_CLEAR_INTR (1 << 1) - -#define SI_DRAM_ADDR_REG 0x04800000 -#define SI_PIF_ADDR_RD64B_REG 0x04800004 -#define SI_PIF_ADDR_WR64B_REG 0x04800010 -#define SI_STATUS_REG 0x04800018 - -#define SI_STATUS_DMA_BUSY (1 << 0) -#define SI_STATUS_IO_READ_BUSY (1 << 1) -#define SI_STATUS_DMA_ERROR (1 << 3) -#define SI_STATUS_INTERRUPT (1 << 12) - -#define PIF_RAM_START 0x1FC007C0 -#define PIF_RAM_SIZE 0x40 - #define MI_INIT_MODE_REG 0x04300000 #define MI_MODE_REG MI_INIT_MODE_REG #define MI_VERSION_REG 0x04300004 diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index eadd0182b..944edfabf 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -4,6 +4,7 @@ #include "ultratypes.h" #include "os_message.h" #include "os_pi.h" +#include "os_internal_rsp.h" typedef struct { diff --git a/include/PR/os_internal_reg.h b/include/PR/os_internal_reg.h index 753692017..98e71cfe5 100644 --- a/include/PR/os_internal_reg.h +++ b/include/PR/os_internal_reg.h @@ -1,5 +1,5 @@ -#ifndef PR_OS_INTERNAL_REG -#define PR_OS_INTERNAL_REG +#ifndef PR_OS_INTERNAL_REG_H +#define PR_OS_INTERNAL_REG_H #include "ultratypes.h" #include "os_exception.h" diff --git a/include/PR/os_internal_rsp.h b/include/PR/os_internal_rsp.h new file mode 100644 index 000000000..d7b73096c --- /dev/null +++ b/include/PR/os_internal_rsp.h @@ -0,0 +1,13 @@ +#ifndef PR_OS_INTERNAL_RSP_H +#define PR_OS_INTERNAL_RSP_H + +#include "ultratypes.h" +#include "libc/stddef.h" + +u32 __osSpGetStatus(void); +void __osSpSetStatus(u32 data); +s32 __osSpSetPc(void* pc); +s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); + + +#endif diff --git a/include/PR/rcp.h b/include/PR/rcp.h index 1c97c64e3..1f2b57de5 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -1,15 +1,98 @@ #ifndef PR_RCP_H #define PR_RCP_H +/** + * PIF Physical memory map (total size = 2 KB) + * + * Size Description Mode + * 1FC007FF +-------+-----------------+-----+ + * | 64 B | JoyChannel RAM | R/W | + * 1FC007C0 +-------+-----------------+-----+ + * |1984 B | Boot ROM | * | * = Reserved + * 1FC00000 +-------+-----------------+-----+ + */ +#define PIF_ROM_START 0x1FC00000 +#define PIF_ROM_END 0x1FC007BF +#define PIF_RAM_START 0x1FC007C0 +#define PIF_RAM_END 0x1FC007FF + +/* + * Patterns to interpret VI_CONTROL_REG + */ +#define VI_CTRL_TYPE_16 0x00002 /* [1:0] pixel size: 16 bit */ +#define VI_CTRL_TYPE_32 0x00003 /* [1:0] pixel size: 32 bit */ +#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* 2: default = on */ +#define VI_CTRL_GAMMA_ON 0x00008 /* 3: default = on */ +#define VI_CTRL_DIVOT_ON 0x00010 /* 4: default = on */ +#define VI_CTRL_SERRATE_ON 0x00040 /* 6: on if interlaced */ +#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_PIXEL_ADV_MASK 0x01000 /* [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_1 0x01000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_2 0x02000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_PIXEL_ADV_3 0x03000 /* Bit [15:12] pixel advance mode? */ +#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* 16: dither-filter mode */ + + #define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ #define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ #define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */ -#define DEVICE_TYPE_CART 0 /* ROM cartridge */ -#define DEVICE_TYPE_BULK 1 /* ROM bulk */ -#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ -#define DEVICE_TYPE_SRAM 3 /* SRAM */ -#define DEVICE_TYPE_INIT 7 /* initial value */ +/** + * Audio Interface (AI) Registers + */ +#define AI_BASE_REG 0x04500000 + +/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */ +#define AI_DRAM_ADDR_REG (AI_BASE_REG + 0x00) /* R0: DRAM address */ + +/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */ +/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */ +#define AI_LEN_REG (AI_BASE_REG + 0x04) /* R1: Length */ + +/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */ +#define AI_CONTROL_REG (AI_BASE_REG + 0x08) /* R2: DMA Control */ + +/* Value for control register */ +#define AI_CONTROL_DMA_ON 1 /* LSB = 1: DMA enable*/ +#define AI_CONTROL_DMA_OFF 0 /* LSB = 1: DMA enable*/ + +/* + * AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy + * Note that a 1->0 transition in ai_full will set interrupt + * (W): clear audio interrupt + */ +#define AI_STATUS_REG (AI_BASE_REG + 0x0C) /* R3: Status */ + +/* Value for status register */ +#define AI_STATUS_FIFO_FULL (1 << 31) +#define AI_STATUS_DMA_BUSY (1 << 30) + +/* + * AI DAC sample period register (W): [13:0] dac rate + * - vid_clock/(dperiod + 1) is the DAC sample rate + * - (dperiod + 1) >= 66 * (aclockhp + 1) must be true + */ +#define AI_DACRATE_REG (AI_BASE_REG + 0x10) /* R4: DAC rate 14-lsb*/ + +/* DAC rate = video clock / audio frequency + * - DAC rate >= (66 * Bit rate) must be true + */ +#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */ +#define AI_MIN_DAC_RATE 132 + +/* + * AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) + * - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate + * - The abus clock stops if aclockhp is zero + */ +#define AI_BITRATE_REG (AI_BASE_REG + 0x14) /* R5: Bit rate 4-lsb */ + +/* Bit rate <= (DAC rate / 66) */ +#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */ +#define AI_MIN_BIT_RATE 2 #define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ #define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ @@ -18,6 +101,172 @@ #define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ +#define DEVICE_TYPE_CART 0 /* ROM cartridge */ +#define DEVICE_TYPE_BULK 1 /* ROM bulk */ +#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ +#define DEVICE_TYPE_SRAM 3 /* SRAM */ +#define DEVICE_TYPE_INIT 7 /* initial value */ + +/** + * Signal Processor (SP) Memory + */ +#define SP_DMEM_START 0x04000000 +#define SP_DMEM_END 0x04000FFF +#define SP_IMEM_START 0x04001000 +#define SP_IMEM_END 0x04001FFF + +#define SP_MEM_ADDR_REG 0x04040000 +#define SP_DRAM_ADDR_REG 0x04040004 +#define SP_RD_LEN_REG 0x04040008 +#define SP_WR_LEN_REG 0x0404000C +#define SP_STATUS_REG 0x04040010 +#define SP_DMA_FULL_REG 0x04040014 +#define SP_DMA_BUSY_REG 0x04040018 +#define SP_PC_REG 0x04080000 + +/** + * SP_STATUS_REG: write bits + */ +#define SP_CLR_HALT (1 << 0) +#define SP_SET_HALT (1 << 1) +#define SP_CLR_BROKE (1 << 2) +#define SP_CLR_INTR (1 << 3) +#define SP_SET_INTR (1 << 4) +#define SP_CLR_SSTEP (1 << 5) +#define SP_SET_SSTEP (1 << 6) +#define SP_CLR_INTR_BREAK (1 << 7) +#define SP_SET_INTR_BREAK (1 << 8) +#define SP_CLR_SIG0 (1 << 9) +#define SP_SET_SIG0 (1 << 10) +#define SP_CLR_SIG1 (1 << 11) +#define SP_SET_SIG1 (1 << 12) +#define SP_CLR_SIG2 (1 << 13) +#define SP_SET_SIG2 (1 << 14) +#define SP_CLR_SIG3 (1 << 15) +#define SP_SET_SIG3 (1 << 16) +#define SP_CLR_SIG4 (1 << 17) +#define SP_SET_SIG4 (1 << 18) +#define SP_CLR_SIG5 (1 << 19) +#define SP_SET_SIG5 (1 << 20) +#define SP_CLR_SIG6 (1 << 21) +#define SP_SET_SIG6 (1 << 22) +#define SP_CLR_SIG7 (1 << 23) +#define SP_SET_SIG7 (1 << 24) + +/* + * SP_STATUS_REG: read bits + */ +#define SP_STATUS_HALT (1 << 0) +#define SP_STATUS_BROKE (1 << 1) +#define SP_STATUS_DMA_BUSY (1 << 2) +#define SP_STATUS_DMA_FULL (1 << 3) +#define SP_STATUS_IO_FULL (1 << 4) +#define SP_STATUS_SSTEP (1 << 5) +#define SP_STATUS_INTR_BREAK (1 << 6) +#define SP_STATUS_SIG0 (1 << 7) +#define SP_STATUS_SIG1 (1 << 8) +#define SP_STATUS_SIG2 (1 << 9) +#define SP_STATUS_SIG3 (1 << 10) +#define SP_STATUS_SIG4 (1 << 11) +#define SP_STATUS_SIG5 (1 << 12) +#define SP_STATUS_SIG6 (1 << 13) +#define SP_STATUS_SIG7 (1 << 14) + +/** + * SP_STATUS_REG: use of SIG bits + */ +#define SP_CLR_YIELD SP_CLR_SIG0 +#define SP_SET_YIELD SP_SET_SIG0 +#define SP_STATUS_YIELD SP_STATUS_SIG0 +#define SP_CLR_YIELDED SP_CLR_SIG1 +#define SP_SET_YIELDED SP_SET_SIG1 +#define SP_STATUS_YIELDED SP_STATUS_SIG1 +#define SP_CLR_TASKDONE SP_CLR_SIG2 +#define SP_SET_TASKDONE SP_SET_SIG2 +#define SP_STATUS_TASKDONE SP_STATUS_SIG2 +#define SP_CLR_RSPSIGNAL SP_CLR_SIG3 +#define SP_SET_RSPSIGNAL SP_SET_SIG3 +#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3 +#define SP_CLR_CPUSIGNAL SP_CLR_SIG4 +#define SP_SET_CPUSIGNAL SP_SET_SIG4 +#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4 + +#define VI_STATUS_REG 0x04400000 +#define VI_CONTROL_REG 0x04400000 +#define VI_ORIGIN_REG 0x04400004 +#define VI_DRAM_ADDR_REG 0x04400004 +#define VI_WIDTH_REG 0x04400008 +#define VI_H_WIDTH_REG 0x04400008 +#define VI_INTR_REG 0x0440000C +#define VI_V_INTER_REG 0x0440000C +#define VI_CURRENT_REG 0x04400010 +#define VI_V_CURRENT_LINE_REG 0x04400010 +#define VI_BURST_REG 0x04400014 +#define VI_TIMING_REG 0x04400014 +#define VI_V_SYNC_REG 0x04400018 // VI vertical sync +#define VI_H_SYNC_REG 0x0440001C // VI horizontal sync +#define VI_LEAP_REG 0x04400020 // VI horizontal sync leap +#define VI_H_SYNC_LEAP_REG 0x04400020 +#define VI_H_START_REG 0x04400024 // VI horizontal video +#define VI_H_VIDEO_REG 0x04400024 +#define VI_V_START_REG 0x04400028 // VI vertical video +#define VI_V_VIDEO_REG 0x04400028 +#define VI_V_BURST_REG 0x0440002C // VI vertical burst +#define VI_X_SCALE_REG 0x04400030 // VI x-scale +#define VI_Y_SCALE_REG 0x04400034 // VI y-scale + +#define PI_DRAM_ADDR_REG 0x04600000 // PI DRAM address +#define PI_CART_ADDR_REG 0x04600004 // PI pbus (cartridge) address +#define PI_RD_LEN_REG 0x04600008 // PI read length +#define PI_WR_LEN_REG 0x0460000C // PI write length +#define PI_STATUS_REG 0x04600010 // PI status +#define PI_BSD_DOM1_LAT_REG 0x04600014 // PI dom1 latency +#define PI_DOMAIN1_REG 0x04600014 +#define PI_BSD_DOM1_PWD_REG 0x04600018 // PI dom1 pulse width +#define PI_BSD_DOM1_PGS_REG 0x0460001C // PI dom1 page size +#define PI_BSD_DOM1_RLS_REG 0x04600020 // PI dom1 release +#define PI_BSD_DOM2_LAT_REG 0x04600024 // PI dom2 latency +#define PI_DOMAIN2_REG 0x04600024 +#define PI_BSD_DOM2_PWD_REG 0x04600028 // PI dom2 pulse width +#define PI_BSD_DOM2_PGS_REG 0x0460002C // PI dom2 page size +#define PI_BSD_DOM2_RLS_REG 0x04600030 // PI dom2 release + +#define PI_STATUS_DMA_BUSY (1 << 0) +#define PI_STATUS_IO_BUSY (1 << 1) +#define PI_STATUS_ERROR (1 << 2) + +/* + * PI_STATUS_REG: write bits + */ +#define PI_STATUS_RESET (1 << 0) +#define PI_SET_RESET PI_STATUS_RESET + +#define PI_STATUS_CLR_INTR (1 << 1) +#define PI_CLR_INTR PI_STATUS_CLR_INTR + +#define PI_DMA_BUFFER_SIZE 128 + +#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */ +#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */ +#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */ +#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */ +#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */ + +/** + * Serial Interface (SI) Registers + */ +#define SI_BASE_REG 0x04800000 + +#define SI_DRAM_ADDR_REG (SI_BASE_REG + 0x00) +#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG + 0x04) +#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG + 0x10) +#define SI_STATUS_REG (SI_BASE_REG + 0x18) + +#define SI_STATUS_DMA_BUSY (1 << 0) +#define SI_STATUS_IO_READ_BUSY (1 << 1) +#define SI_STATUS_DMA_ERROR (1 << 3) +#define SI_STATUS_INTERRUPT (1 << 12) + #define IO_READ(addr) (*(vu32*)PHYS_TO_K1(addr)) #define IO_WRITE(addr,data) (*(vu32*)PHYS_TO_K1(addr)=(u32)(data)) diff --git a/include/PR/rsp.h b/include/PR/rsp.h deleted file mode 100644 index 467db831c..000000000 --- a/include/PR/rsp.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef PR_RSP_H -#define PR_RSP_H - -#include "ultratypes.h" -#include "libc/stddef.h" - - -/* SP Status Flags */ -#define SP_STATUS_HALT (1 << 0) -#define SP_STATUS_BROKE (1 << 1) -#define SP_STATUS_DMA_BUSY (1 << 2) -#define SP_STATUS_DMA_FULL (1 << 3) -#define SP_STATUS_IO_FULL (1 << 4) -#define SP_STATUS_SSTEP (1 << 5) -#define SP_STATUS_INTR_BREAK (1 << 6) -#define SP_STATUS_YIELD (1 << 7) // SIG0 -#define SP_STATUS_YIELDED (1 << 8) // SIG1 -#define SP_STATUS_TASKDONE (1 << 9) // SIG2 -#define SP_STATUS_SIG3 (1 << 10) -#define SP_STATUS_SIG4 (1 << 11) -#define SP_STATUS_SIG5 (1 << 12) -#define SP_STATUS_SIG6 (1 << 13) -#define SP_STATUS_SIG7 (1 << 14) - -#define SP_CLR_HALT (1 << 0) -#define SP_SET_HALT (1 << 1) -#define SP_CLR_BROKE (1 << 2) -#define SP_CLR_INTR (1 << 3) -#define SP_SET_INTR (1 << 4) -#define SP_CLR_SSTEP (1 << 5) -#define SP_SET_SSTEP (1 << 6) -#define SP_CLR_INTR_BREAK (1 << 7) -#define SP_SET_INTR_BREAK (1 << 8) -#define SP_CLR_SIG0 (1 << 9) -#define SP_SET_SIG0 (1 << 10) -#define SP_CLR_SIG1 (1 << 11) -#define SP_SET_SIG1 (1 << 12) -#define SP_CLR_SIG2 (1 << 13) -#define SP_SET_SIG2 (1 << 14) -#define SP_CLR_SIG3 (1 << 15) -#define SP_SET_SIG3 (1 << 16) -#define SP_CLR_SIG4 (1 << 17) -#define SP_SET_SIG4 (1 << 18) -#define SP_CLR_SIG5 (1 << 19) -#define SP_SET_SIG5 (1 << 20) -#define SP_CLR_SIG6 (1 << 21) -#define SP_SET_SIG6 (1 << 22) -#define SP_CLR_SIG7 (1 << 23) -#define SP_SET_SIG7 (1 << 24) - - -u32 __osSpGetStatus(void); -void __osSpSetStatus(u32 data); -s32 __osSpSetPc(void* pc); -s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); - - -#endif diff --git a/include/functions.h b/include/functions.h index 7eb67e3ba..4c6c74cef 100644 --- a/include/functions.h +++ b/include/functions.h @@ -40,11 +40,11 @@ void CIC6105_PrintRomInfo(void); void CIC6105_AddRomInfoFaultPage(void); void CIC6105_RemoveRomInfoFaultPage(void); void func_800818F4(void); -void __osSyncVPrintf(const char* fmt, ...); +void osSyncPrintfUnused(const char* fmt, ...); void rmonPrintf(const char* fmt, ...); -void func_80084940(void); -void func_80084968(void); +void RcpUtils_PrintRegisterStatus(void); +void RcpUtils_Reset(void); void PadUtils_Init(Input* input); void func_80085150(void); diff --git a/include/ultra64.h b/include/ultra64.h index 54bb66d69..58431bde8 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -14,7 +14,6 @@ #include "PR/sptask.h" #include "PR/rcp.h" #include "PR/rdp.h" -#include "PR/rsp.h" #include "PR/r4300.h" #include "PR/ucode.h" #include "PR/viint.h" diff --git a/spec b/spec index 4612c1801..abc0da4ad 100644 --- a/spec +++ b/spec @@ -13,38 +13,38 @@ endseg beginseg name "boot" address 0x80080060 - include "build/src/boot_O2_g3/boot_main.o" + include "build/src/boot/boot_main.o" include "build/data/boot/rspboot.data.o" - include "build/src/boot_O2_g3/idle.o" - include "build/src/boot_O2_g3/viconfig.o" + include "build/src/boot/idle.o" + include "build/src/boot/viconfig.o" include "build/data/boot/viconfig.data.o" - include "build/src/boot_O2_g3/z_std_dma.o" - include "build/src/boot_O2_g3/yaz0.o" - include "build/src/boot_O2_g3/irqmgr.o" - include "build/src/boot_O2_g3/CIC6105.o" - include "build/src/boot_O2_g3/syncprintf.o" - include "build/src/boot_O2_g3/fault.o" - include "build/src/boot_O2_g3/fault_drawer.o" - include "build/src/boot_O2/boot_80084940.o" - include "build/src/boot_O2/loadfragment.o" - include "build/src/boot_O2/loadfragment2.o" - include "build/src/boot_O2/padutils.o" - include "build/src/boot_O2/stackcheck.o" - include "build/src/boot_O2/gfxprint.o" + include "build/src/boot/z_std_dma.o" + include "build/src/boot/yaz0.o" + include "build/src/boot/irqmgr.o" + include "build/src/boot/CIC6105.o" + include "build/src/boot/syncprintf.o" + include "build/src/boot/fault.o" + include "build/src/boot/fault_drawer.o" + include "build/src/boot/O2/rcp_utils.o" + include "build/src/boot/O2/loadfragment.o" + include "build/src/boot/O2/loadfragment2.o" + include "build/src/boot/O2/padutils.o" + include "build/src/boot/O2/stackcheck.o" + include "build/src/boot/O2/gfxprint.o" include "build/data/boot/gfxprint.data.o" - include "build/src/boot_O2/mtxuty-cvt.o" - include "build/src/boot_O2/debug.o" - include "build/src/boot_O2/system_heap.o" - include "build/src/boot_O2/padsetup.o" - include "build/src/boot_O2/boot_80086760.o" + include "build/src/boot/O2/mtxuty-cvt.o" + include "build/src/boot/O2/debug.o" + include "build/src/boot/O2/system_heap.o" + include "build/src/boot/O2/padsetup.o" + include "build/src/boot/O2/math64.o" include "build/asm/boot/fp.text.o" include "build/data/boot/fp.data.o" - include "build/src/boot_O2/system_malloc.o" - include "build/src/boot_O2/rand.o" - include "build/src/boot_O2/__osMalloc.o" + include "build/src/boot/O2/system_malloc.o" + include "build/src/boot/O2/rand.o" + include "build/src/boot/O2/__osMalloc.o" include "build/src/libultra/rmon/sprintf.o" - include "build/src/boot_O2/printutils.o" - include "build/src/boot_O2/sleep.o" + include "build/src/boot/O2/printutils.o" + include "build/src/boot/O2/sleep.o" include "build/asm/boot/setcause.text.o" include "build/src/libultra/os/sendmesg.o" include "build/src/libultra/io/pfsfreeblocks.o" @@ -232,12 +232,12 @@ beginseg include "build/src/libultra/os/sethwinterrupt.o" include "build/asm/boot/getwatchlo.text.o" include "build/asm/boot/setwatchlo.text.o" - include "build/src/boot_O2/fmodf.o" - include "build/src/boot_O2/__osMemset.o" - include "build/src/boot_O2/__osStrcmp.o" - include "build/src/boot_O2/__osStrcpy.o" - include "build/src/boot_O2/__osMemcpy.o" - include "build/src/boot_O2_g3/build.o" + include "build/src/boot/O2/fmodf.o" + include "build/src/boot/O2/__osMemset.o" + include "build/src/boot/O2/__osStrcmp.o" + include "build/src/boot/O2/__osStrcpy.o" + include "build/src/boot/O2/__osMemcpy.o" + include "build/src/boot/build.o" endseg beginseg diff --git a/src/audio/lib/aisetnextbuf.c b/src/audio/lib/aisetnextbuf.c index b82f28e6f..c3434b19a 100644 --- a/src/audio/lib/aisetnextbuf.c +++ b/src/audio/lib/aisetnextbuf.c @@ -19,7 +19,7 @@ s32 osAiSetNextBuffer(void* buf, u32 size) { // Originally a call to __osAiDeviceBusy status = HW_REG(AI_STATUS_REG, s32); - if (status & AI_STATUS_AI_FULL) { + if (status & AI_STATUS_FIFO_FULL) { return -1; } diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot/CIC6105.c similarity index 100% rename from src/boot_O2_g3/CIC6105.c rename to src/boot/CIC6105.c diff --git a/src/boot_O2/__osMalloc.c b/src/boot/O2/__osMalloc.c similarity index 100% rename from src/boot_O2/__osMalloc.c rename to src/boot/O2/__osMalloc.c diff --git a/src/boot_O2/__osMemcpy.c b/src/boot/O2/__osMemcpy.c similarity index 100% rename from src/boot_O2/__osMemcpy.c rename to src/boot/O2/__osMemcpy.c diff --git a/src/boot_O2/__osMemset.c b/src/boot/O2/__osMemset.c similarity index 100% rename from src/boot_O2/__osMemset.c rename to src/boot/O2/__osMemset.c diff --git a/src/boot_O2/__osStrcmp.c b/src/boot/O2/__osStrcmp.c similarity index 100% rename from src/boot_O2/__osStrcmp.c rename to src/boot/O2/__osStrcmp.c diff --git a/src/boot_O2/__osStrcpy.c b/src/boot/O2/__osStrcpy.c similarity index 100% rename from src/boot_O2/__osStrcpy.c rename to src/boot/O2/__osStrcpy.c diff --git a/src/boot_O2/debug.c b/src/boot/O2/debug.c similarity index 100% rename from src/boot_O2/debug.c rename to src/boot/O2/debug.c diff --git a/src/boot_O2/fmodf.c b/src/boot/O2/fmodf.c similarity index 100% rename from src/boot_O2/fmodf.c rename to src/boot/O2/fmodf.c diff --git a/src/boot_O2/gfxprint.c b/src/boot/O2/gfxprint.c similarity index 100% rename from src/boot_O2/gfxprint.c rename to src/boot/O2/gfxprint.c diff --git a/src/boot_O2/loadfragment.c b/src/boot/O2/loadfragment.c similarity index 100% rename from src/boot_O2/loadfragment.c rename to src/boot/O2/loadfragment.c diff --git a/src/boot_O2/loadfragment2.c b/src/boot/O2/loadfragment2.c similarity index 100% rename from src/boot_O2/loadfragment2.c rename to src/boot/O2/loadfragment2.c diff --git a/src/boot_O2/boot_80086760.c b/src/boot/O2/math64.c similarity index 100% rename from src/boot_O2/boot_80086760.c rename to src/boot/O2/math64.c diff --git a/src/boot_O2/mtxuty-cvt.c b/src/boot/O2/mtxuty-cvt.c similarity index 100% rename from src/boot_O2/mtxuty-cvt.c rename to src/boot/O2/mtxuty-cvt.c diff --git a/src/boot_O2/padsetup.c b/src/boot/O2/padsetup.c similarity index 100% rename from src/boot_O2/padsetup.c rename to src/boot/O2/padsetup.c diff --git a/src/boot_O2/padutils.c b/src/boot/O2/padutils.c similarity index 100% rename from src/boot_O2/padutils.c rename to src/boot/O2/padutils.c diff --git a/src/boot_O2/printutils.c b/src/boot/O2/printutils.c similarity index 100% rename from src/boot_O2/printutils.c rename to src/boot/O2/printutils.c diff --git a/src/boot_O2/rand.c b/src/boot/O2/rand.c similarity index 100% rename from src/boot_O2/rand.c rename to src/boot/O2/rand.c diff --git a/src/boot/O2/rcp_utils.c b/src/boot/O2/rcp_utils.c new file mode 100644 index 000000000..f587fad21 --- /dev/null +++ b/src/boot/O2/rcp_utils.c @@ -0,0 +1,23 @@ +#include "ultra64.h" + +void RcpUtils_PrintRegisterStatus(void) { + u32 spStatus = __osSpGetStatus(); + u32 dpStatus = osDpGetStatus(); + + if (spStatus) { + // stubbed debug prints + } + + if (dpStatus) { + // stubbed debug prints + } +} + +void RcpUtils_Reset(void) { + RcpUtils_PrintRegisterStatus(); + // Flush the RDP pipeline and freeze clock counter + osDpSetStatus(DPC_SET_FREEZE | DPC_SET_FLUSH); + // Halt the RSP, disable interrupt on break and set "task done" signal + __osSpSetStatus(SP_SET_HALT | SP_SET_TASKDONE | SP_CLR_INTR_BREAK); + RcpUtils_PrintRegisterStatus(); +} diff --git a/src/boot_O2/sleep.c b/src/boot/O2/sleep.c similarity index 100% rename from src/boot_O2/sleep.c rename to src/boot/O2/sleep.c diff --git a/src/boot_O2/stackcheck.c b/src/boot/O2/stackcheck.c similarity index 100% rename from src/boot_O2/stackcheck.c rename to src/boot/O2/stackcheck.c diff --git a/src/boot_O2/system_heap.c b/src/boot/O2/system_heap.c similarity index 100% rename from src/boot_O2/system_heap.c rename to src/boot/O2/system_heap.c diff --git a/src/boot_O2/system_malloc.c b/src/boot/O2/system_malloc.c similarity index 100% rename from src/boot_O2/system_malloc.c rename to src/boot/O2/system_malloc.c diff --git a/src/boot_O2_g3/boot_main.c b/src/boot/boot_main.c similarity index 100% rename from src/boot_O2_g3/boot_main.c rename to src/boot/boot_main.c diff --git a/src/boot_O2_g3/build.c b/src/boot/build.c similarity index 100% rename from src/boot_O2_g3/build.c rename to src/boot/build.c diff --git a/src/boot_O2_g3/fault.c b/src/boot/fault.c similarity index 100% rename from src/boot_O2_g3/fault.c rename to src/boot/fault.c diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot/fault_drawer.c similarity index 100% rename from src/boot_O2_g3/fault_drawer.c rename to src/boot/fault_drawer.c diff --git a/src/boot_O2_g3/idle.c b/src/boot/idle.c similarity index 100% rename from src/boot_O2_g3/idle.c rename to src/boot/idle.c diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot/irqmgr.c similarity index 100% rename from src/boot_O2_g3/irqmgr.c rename to src/boot/irqmgr.c diff --git a/src/boot_O2_g3/syncprintf.c b/src/boot/syncprintf.c similarity index 52% rename from src/boot_O2_g3/syncprintf.c rename to src/boot/syncprintf.c index 1cbceb595..7ceb04bb1 100644 --- a/src/boot_O2_g3/syncprintf.c +++ b/src/boot/syncprintf.c @@ -1,7 +1,6 @@ #include "global.h" -// This isn't a vprintf since it doesn't take a va_list -void __osSyncVPrintf(const char* fmt, ...) { +void osSyncPrintfUnused(const char* fmt, ...) { } void osSyncPrintf(const char* fmt, ...) { diff --git a/src/boot_O2_g3/viconfig.c b/src/boot/viconfig.c similarity index 100% rename from src/boot_O2_g3/viconfig.c rename to src/boot/viconfig.c diff --git a/src/boot_O2_g3/yaz0.c b/src/boot/yaz0.c similarity index 100% rename from src/boot_O2_g3/yaz0.c rename to src/boot/yaz0.c diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot/z_std_dma.c similarity index 100% rename from src/boot_O2_g3/z_std_dma.c rename to src/boot/z_std_dma.c diff --git a/src/boot_O2/boot_80084940.c b/src/boot_O2/boot_80084940.c deleted file mode 100644 index acee90fb9..000000000 --- a/src/boot_O2/boot_80084940.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "global.h" - -void func_80084940(void) { - u32 spStatus = __osSpGetStatus(); - u32 dpStatus = osDpGetStatus(); - - if (spStatus && dpStatus) {} // stubbed debug prints -} - -void func_80084968(void) { - func_80084940(); - osDpSetStatus(0x28); - __osSpSetStatus(0x4082); - func_80084940(); -} diff --git a/src/libultra/io/cartrominit.c b/src/libultra/io/cartrominit.c index 0825b472c..518be6624 100644 --- a/src/libultra/io/cartrominit.c +++ b/src/libultra/io/cartrominit.c @@ -28,7 +28,7 @@ OSPiHandle* osCartRomInit(void) { bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); /* Uses `status & PI_STATUS_ERROR` in OoT */ - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c index c3bbfa1f7..b27822afa 100644 --- a/src/libultra/io/devmgr.c +++ b/src/libultra/io/devmgr.c @@ -51,7 +51,7 @@ void __osDevMgrMain(void* arg) { __osEPiRawWriteIo(ioMesg->piHandle, 0x05000510, transfer->bmCtlShadow | 0x1000000); } block->errStatus = 4; - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; + HW_REG(PI_STATUS_REG, u32) = PI_CLR_INTR; __osSetGlobalIntMask(0x00100C01); } osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK); diff --git a/src/libultra/io/epirawdma.c b/src/libultra/io/epirawdma.c index aadd8ad5b..d0707dce9 100644 --- a/src/libultra/io/epirawdma.c +++ b/src/libultra/io/epirawdma.c @@ -4,7 +4,7 @@ s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, vo s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/epirawread.c b/src/libultra/io/epirawread.c index df0c6b603..1dd2d1381 100644 --- a/src/libultra/io/epirawread.c +++ b/src/libultra/io/epirawread.c @@ -4,7 +4,7 @@ s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data) { s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) { + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { ; } diff --git a/src/libultra/io/epirawwrite.c b/src/libultra/io/epirawwrite.c index 1e0e694a7..fe8ce81c5 100644 --- a/src/libultra/io/epirawwrite.c +++ b/src/libultra/io/epirawwrite.c @@ -4,7 +4,7 @@ s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data) { s32 status; OSPiHandle* curHandle; - while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) {} + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) {} if (__osCurrentHandle[handle->domain]->type != handle->type) { curHandle = __osCurrentHandle[handle->domain]; diff --git a/src/libultra/io/pirawdma.c b/src/libultra/io/pirawdma.c index 07aa1b822..90847c4be 100644 --- a/src/libultra/io/pirawdma.c +++ b/src/libultra/io/pirawdma.c @@ -3,7 +3,7 @@ s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size) { register int status = HW_REG(PI_STATUS_REG, u32); - while (status & (PI_STATUS_IOBUSY | PI_STATUS_BUSY)) { + while (status & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) { status = HW_REG(PI_STATUS_REG, u32); } diff --git a/src/libultra/io/sirawdma.c b/src/libultra/io/sirawdma.c index eb62fa2a3..08a347cc9 100644 --- a/src/libultra/io/sirawdma.c +++ b/src/libultra/io/sirawdma.c @@ -6,7 +6,7 @@ s32 __osSiRawStartDma(s32 direction, void* dramAddr) { } if (direction == OS_WRITE) { - osWritebackDCache(dramAddr, PIF_RAM_SIZE); + osWritebackDCache(dramAddr, ALIGN16(PIF_RAM_END - PIF_RAM_START)); } HW_REG(SI_DRAM_ADDR_REG, u32) = osVirtualToPhysical(dramAddr); @@ -18,7 +18,7 @@ s32 __osSiRawStartDma(s32 direction, void* dramAddr) { } if (direction == OS_READ) { - osInvalDCache(dramAddr, PIF_RAM_SIZE); + osInvalDCache(dramAddr, ALIGN16(PIF_RAM_END - PIF_RAM_START)); } return 0; } diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index a7f421191..e2d456ee6 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -49,7 +49,7 @@ 0x80081920 : "syncprintf", 0x80081980 : "fault", 0x80083EB0 : "fault_drawer", - 0x80084940 : "boot_80084940", + 0x80084940 : "rcp_utils", 0x800849A0 : "loadfragment", 0x80084DB0 : "loadfragment2", 0x80085130 : "padutils", @@ -59,7 +59,7 @@ 0x80086280 : "debug", 0x800862E0 : "system_heap", 0x80086620 : "padsetup", - 0x80086760 : "boot_80086760", + 0x80086760 : "math64", 0x80086C70 : "fp", 0x80086DD0 : "system_malloc", 0x80086FA0 : "rand", @@ -297,7 +297,7 @@ 0x80098C50 : "fault_drawer", 0x80099090 : "gfxprint", 0x800990B0 : "debug", - 0x800990C0 : "boot_80086760", + 0x800990C0 : "math64", 0x80099110 : "__osMalloc", 0x800991A0 : "setintmask", 0x80099220 : "sinf", @@ -320,7 +320,7 @@ 0x8009BE30 : "CIC6105", 0x8009BE50 : "fault", 0x8009CCD0 : "fault_drawer", - 0x8009CD10 : "boot_80086760", + 0x8009CD10 : "math64", 0x8009CD20 : "system_malloc", 0x8009CD50 : "rand", 0x8009CD60 : "__osMalloc", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 13519cb06..d060d23e2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -46,7 +46,7 @@ 0x8008189C:("CIC6105_AddRomInfoFaultPage",), 0x800818D0:("CIC6105_RemoveRomInfoFaultPage",), 0x800818F4:("func_800818F4",), - 0x80081920:("__osSyncVPrintf",), + 0x80081920:("osSyncPrintfUnused",), 0x8008193C:("osSyncPrintf",), 0x80081958:("rmonPrintf",), 0x80081980:("Fault_SleepImpl",), @@ -107,8 +107,8 @@ 0x8008486C:("FaultDrawer_SetDrawerFrameBuffer",), 0x800848A4:("FaultDrawer_SetInputCallback",), 0x800848B8:("FaultDrawer_Init",), - 0x80084940:("func_80084940",), - 0x80084968:("func_80084968",), + 0x80084940:("RcpUtils_PrintRegisterStatus",), + 0x80084968:("RcpUtils_Reset",), 0x800849A0:("Fragment_Relocate",), 0x80084C0C:("Fragment_Load",), 0x80084CD0:("Fragment_AllocateAndLoad",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index f2aec1cb4..61a69fe7f 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -43,7 +43,7 @@ asm/non_matchings/boot/CIC6105/CIC6105_PrintRomInfo.s,CIC6105_PrintRomInfo,0x800 asm/non_matchings/boot/CIC6105/CIC6105_AddRomInfoFaultPage.s,CIC6105_AddRomInfoFaultPage,0x8008189C,0xD asm/non_matchings/boot/CIC6105/CIC6105_RemoveRomInfoFaultPage.s,CIC6105_RemoveRomInfoFaultPage,0x800818D0,0x9 asm/non_matchings/boot/CIC6105/func_800818F4.s,func_800818F4,0x800818F4,0xB -asm/non_matchings/boot/syncprintf/__osSyncVPrintf.s,__osSyncVPrintf,0x80081920,0x7 +asm/non_matchings/boot/syncprintf/osSyncPrintfUnused.s,osSyncPrintfUnused,0x80081920,0x7 asm/non_matchings/boot/syncprintf/osSyncPrintf.s,osSyncPrintf,0x8008193C,0x7 asm/non_matchings/boot/syncprintf/rmonPrintf.s,rmonPrintf,0x80081958,0xA asm/non_matchings/boot/fault/Fault_SleepImpl.s,Fault_SleepImpl,0x80081980,0x1C @@ -104,8 +104,8 @@ asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawText.s,FaultDrawer_DrawText, asm/non_matchings/boot/fault_drawer/FaultDrawer_SetDrawerFrameBuffer.s,FaultDrawer_SetDrawerFrameBuffer,0x8008486C,0xE asm/non_matchings/boot/fault_drawer/FaultDrawer_SetInputCallback.s,FaultDrawer_SetInputCallback,0x800848A4,0x5 asm/non_matchings/boot/fault_drawer/FaultDrawer_Init.s,FaultDrawer_Init,0x800848B8,0x22 -asm/non_matchings/boot/boot_80084940/func_80084940.s,func_80084940,0x80084940,0xA -asm/non_matchings/boot/boot_80084940/func_80084968.s,func_80084968,0x80084968,0xE +asm/non_matchings/boot/rcp_utils/RcpUtils_PrintRegisterStatus.s,RcpUtils_PrintRegisterStatus,0x80084940,0xA +asm/non_matchings/boot/rcp_utils/RcpUtils_Reset.s,RcpUtils_Reset,0x80084968,0xE asm/non_matchings/boot/loadfragment/Fragment_Relocate.s,Fragment_Relocate,0x800849A0,0x9B asm/non_matchings/boot/loadfragment/Fragment_Load.s,Fragment_Load,0x80084C0C,0x31 asm/non_matchings/boot/loadfragment/Fragment_AllocateAndLoad.s,Fragment_AllocateAndLoad,0x80084CD0,0x38 @@ -163,19 +163,19 @@ asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHea asm/non_matchings/boot/boot_800862E0/SystemHeap_RunInits.s,SystemHeap_RunInits,0x80086588,0x1C asm/non_matchings/boot/boot_800862E0/SystemHeap_Init.s,SystemHeap_Init,0x800865F8,0xA asm/non_matchings/boot/padsetup/PadSetup_Init.s,PadSetup_Init,0x80086620,0x50 -asm/non_matchings/boot/boot_80086760/Math_FTanF.s,Math_FTanF,0x80086760,0xD -asm/non_matchings/boot/boot_80086760/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8 -asm/non_matchings/boot/boot_80086760/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8 -asm/non_matchings/boot/boot_80086760/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8 -asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13 -asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49 -asm/non_matchings/boot/boot_80086760/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53 -asm/non_matchings/boot/boot_80086760/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10 -asm/non_matchings/boot/boot_80086760/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A -asm/non_matchings/boot/boot_80086760/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC -asm/non_matchings/boot/boot_80086760/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA +asm/non_matchings/boot/math64/Math_FTanF.s,Math_FTanF,0x80086760,0xD +asm/non_matchings/boot/math64/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8 +asm/non_matchings/boot/math64/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8 +asm/non_matchings/boot/math64/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8 +asm/non_matchings/boot/math64/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8 +asm/non_matchings/boot/math64/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8 +asm/non_matchings/boot/math64/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13 +asm/non_matchings/boot/math64/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49 +asm/non_matchings/boot/math64/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53 +asm/non_matchings/boot/math64/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10 +asm/non_matchings/boot/math64/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A +asm/non_matchings/boot/math64/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC +asm/non_matchings/boot/math64/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA asm/non_matchings/boot/fp/floorf.s,floorf,0x80086C70,0x3 asm/non_matchings/boot/fp/floor.s,floor,0x80086C7C,0x3 asm/non_matchings/boot/fp/lfloorf.s,lfloorf,0x80086C88,0x4 From 17068dadef42f29da350cb25de5f049ca31f3db3 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Wed, 13 Sep 2023 18:29:30 -0700 Subject: [PATCH 08/74] EnInvadepohDemo (Aliens cutscene actors) OK and documented (#1363) * EnInvadepohDemo (Aliens cutscene actors) OK and documented * Make bss variables non-static * Provide type to Actor_SpawnAsChild * Respond to hensldm's review * Introduce obvious misformat * Format again, see if that fixes it? * Push the misformat up so I can see how Jenkins complains * Fix formatting on my end (again) * Apparently I had to merge master to fix the formatting issue?????? * Respond to engineer's review --- spec | 4 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 6 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 6 +- .../z_en_invadepoh_demo.c | 810 ++++++++++++++++-- .../z_en_invadepoh_demo.h | 41 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 8 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 2 +- tools/disasm/functions.txt | 64 +- tools/disasm/variables.txt | 31 +- undefined_syms.txt | 16 - 10 files changed, 826 insertions(+), 162 deletions(-) diff --git a/spec b/spec index abc0da4ad..a05eecaa7 100644 --- a/spec +++ b/spec @@ -4851,9 +4851,7 @@ beginseg name "ovl_En_Invadepoh_Demo" compress include "build/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.data.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.bss.o" - include "build/data/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo.reloc.o" + include "build/src/overlays/actors/ovl_En_Invadepoh_Demo/ovl_En_Invadepoh_Demo_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index a22bf3e46..c55c5bb3a 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -139,7 +139,7 @@ void EnBom_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.cylHeight = 10; this->flashSpeedScale = 7; - this->isPowderKeg = ENBOM_GETX_1(&this->actor); + this->isPowderKeg = ENBOM_GET_1(&this->actor); if (this->isPowderKeg) { play->actorCtx.flags |= ACTORCTX_FLAG_0; this->timer = gSaveContext.powderKegTimer; @@ -162,9 +162,9 @@ void EnBom_Init(Actor* thisx, PlayState* play) { func_80872648(play, &this->actor.world.pos); } - this->collider2Elements[0].info.toucher.damage += ENBOM_GETZ_FF00(thisx); + this->collider2Elements[0].info.toucher.damage += ENBOM_GET_FF00(thisx); this->actor.shape.rot.z &= 0xFF; - if (ENBOM_GETZ_80(&this->actor)) { + if (ENBOM_GET_80(&this->actor)) { this->actor.shape.rot.z |= 0xFF00; } diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h index 7ca26d3cb..723c11e8a 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -7,9 +7,9 @@ struct EnBom; typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); -#define ENBOM_GETX_1(thisx) ((thisx)->shape.rot.x & 1) -#define ENBOM_GETZ_80(thisx) ((thisx)->shape.rot.z & 0x80) -#define ENBOM_GETZ_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) +#define ENBOM_GET_1(thisx) ((thisx)->shape.rot.x & 1) +#define ENBOM_GET_80(thisx) ((thisx)->shape.rot.z & 0x80) +#define ENBOM_GET_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 014eea08e..cb5d73093 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -1,9 +1,21 @@ /* * File: z_en_invadepoh_demo.c * Overlay: ovl_En_Invadepoh_Demo - * Description: + * Description: Aliens cutscene actors + * + * This actor is responsible for handling the characters that appear in two cutscenes: + * 1. The cutscene where Romani introduces the aliens to the player. + * 2. The cutscene where the aliens abduct the cows and Romani from the barn. + * + * To be more specific, this actor has five variations: + * 1. An alien + * 2. Romani + * 3. A cow (minus the tail) + * 4. The UFO (which appears as a spinning ball of light) + * 5. A cow tail */ +#include "sys_cfb.h" #include "z_en_invadepoh_demo.h" #define FLAGS (ACTOR_FLAG_10) @@ -15,14 +27,72 @@ void EnInvadepohDemo_Destroy(Actor* thisx, PlayState* play); void EnInvadepohDemo_Update(Actor* thisx, PlayState* play); void EnInvadepohDemo_Draw(Actor* thisx, PlayState* play); -void func_80C19AB4(EnInvadepohDemo* this, PlayState* play); -void func_80C19D00(EnInvadepohDemo* this, PlayState* play); -void func_80C19D48(EnInvadepohDemo* this, PlayState* play); -void func_80C19E04(EnInvadepohDemo* this, PlayState* play); -void func_80C19EC0(EnInvadepohDemo* this, PlayState* play); -void func_80C19F7C(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Destroy(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Destroy(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_FollowPath(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_SelectCueAction(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Alien_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Romani_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Cow_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play); +void EnInvadepohDemo_CowTail_Draw(EnInvadepohDemo* this, PlayState* play); + +#define DRAW_FLAG_SHOULD_DRAW 1 +#define EN_INVADEPOH_DEMO_CUEID_NONE -1 + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1, + /* 3 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_2, + /* 4 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_3, + /* 5 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_4, + /* 6 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_5, // Doesn't seem to be actually used in the final game + /* 7 */ EN_INVADEPOH_DEMO_ALIEN_CUEID_MAX +} EnInvadepohDemoAlienCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_FOLLOW_PATH, + /* 3 */ EN_INVADEPOH_DEMO_ROMANI_CUEID_MAX +} EnInvadepohDemoRomaniCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_COW_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_COW_CUEID_IDLE, + /* 2 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1, + /* 3 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2, + /* 4 */ EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3, + /* 5 */ EN_INVADEPOH_DEMO_COW_CUEID_MAX +} EnInvadepohDemoCowCueId; + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_UFO_CUEID_DO_NOTHING, + /* 1 */ EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_1, + /* 2 */ EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH, + /* 3 */ EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_2, // Doesn't seem to be actually used in the final game + /* 4 */ EN_INVADEPOH_DEMO_UFO_CUEID_MAX +} EnInvadepohDemoUfoCueId; -#if 0 ActorInit En_Invadepoh_Demo_InitVars = { ACTOR_EN_INVADEPOH_DEMO, ACTORCAT_PROP, @@ -35,134 +105,710 @@ ActorInit En_Invadepoh_Demo_InitVars = { (ActorFunc)EnInvadepohDemo_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AA74[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), +static s32 sCueTypes[EN_INVADEPOH_DEMO_TYPE_MAX] = { + CS_CMD_ACTOR_CUE_553, // EN_INVADEPOH_DEMO_TYPE_ALIEN + CS_CMD_ACTOR_CUE_554, // EN_INVADEPOH_DEMO_TYPE_ROMANI + CS_CMD_ACTOR_CUE_563, // EN_INVADEPOH_DEMO_TYPE_COW + CS_CMD_ACTOR_CUE_555, // EN_INVADEPOH_DEMO_TYPE_UFO + CS_CAM_STOP, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; + +static InitChainEntry sAlienInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AA88[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), - ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), - ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), - ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), +static InitChainEntry sRomaniInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_CONTINUE), + ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAA0[] = { +static InitChainEntry sCowInitChain[] = { ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAB0[] = { - ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE), - ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE), - ICHAIN_VEC3S(shape.rot, 0, ICHAIN_CONTINUE), - ICHAIN_F32(terminalVelocity, -100, ICHAIN_CONTINUE), - ICHAIN_VEC3F_DIV1000(scale, 800, ICHAIN_STOP), +static InitChainEntry sUfoInitChain[] = { + ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE), ICHAIN_VEC3S(shape.rot, 0, ICHAIN_CONTINUE), + ICHAIN_F32(terminalVelocity, -100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 800, ICHAIN_STOP), }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80C1AAC8[] = { +static InitChainEntry sCowTailInitChain[] = { ICHAIN_F32(uncullZoneForward, 20000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_STOP), }; -#endif +static EnInvadepohDemoFunc sInitFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_Alien_Init, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_Romani_Init, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Init, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_Ufo_Init, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Init, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -extern InitChainEntry D_80C1AA74[]; -extern InitChainEntry D_80C1AA88[]; -extern InitChainEntry D_80C1AAA0[]; -extern InitChainEntry D_80C1AAB0[]; -extern InitChainEntry D_80C1AAC8[]; +static EnInvadepohDemoFunc sDestroyFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Destroy, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Destroy, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -extern UNK_TYPE D_06000560; -extern UNK_TYPE D_06001D80; -extern UNK_TYPE D_06004264; -extern UNK_TYPE D_06004E98; -extern UNK_TYPE D_06011FC8; -extern UNK_TYPE D_06016588; +static EnInvadepohDemoFunc sAlienCueActionCsFuncs[EN_INVADEPOH_DEMO_ALIEN_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_ALIEN_CUEID_DO_NOTHING + EnInvadepohDemo_Alien_Idle, // EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_2 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_3 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_4 + EnInvadepohDemo_Alien_FollowPath, // EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_5 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C192A0.s") +static EnInvadepohDemoFunc sRomaniCueActionCsFuncs[EN_INVADEPOH_DEMO_ROMANI_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_ROMANI_CUEID_DO_NOTHING + EnInvadepohDemo_Romani_Idle, // EN_INVADEPOH_DEMO_ROMANI_CUEID_IDLE + EnInvadepohDemo_Romani_FollowPath, // EN_INVADEPOH_DEMO_ROMANI_CUEID_FOLLOW_PATH +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C192B0.s") +static EnInvadepohDemoFunc sCowCueActionCsFuncs[EN_INVADEPOH_DEMO_COW_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_COW_CUEID_DO_NOTHING + EnInvadepohDemo_Cow_Idle, // EN_INVADEPOH_DEMO_COW_CUEID_IDLE + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1 + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2 + EnInvadepohDemo_Cow_FollowPath, // EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19334.s") +static EnInvadepohDemoFunc sUfoCueActionCsFuncs[EN_INVADEPOH_DEMO_UFO_CUEID_MAX] = { + EnInvadepohDemo_DoNothing, // EN_INVADEPOH_DEMO_UFO_CUEID_DO_NOTHING + EnInvadepohDemo_Ufo_Idle, // EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_1 + EnInvadepohDemo_Ufo_FollowPath, // EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH + EnInvadepohDemo_Ufo_Idle, // EN_INVADEPOH_DEMO_UFO_CUEID_IDLE_2 +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C193A8.s") +static EnInvadepohDemoFunc sDrawFuncs[EN_INVADEPOH_DEMO_TYPE_MAX] = { + EnInvadepohDemo_Alien_Draw, // EN_INVADEPOH_DEMO_TYPE_ALIEN + EnInvadepohDemo_Romani_Draw, // EN_INVADEPOH_DEMO_TYPE_ROMANI + EnInvadepohDemo_Cow_Draw, // EN_INVADEPOH_DEMO_TYPE_COW + EnInvadepohDemo_Ufo_Draw, // EN_INVADEPOH_DEMO_TYPE_UFO + EnInvadepohDemo_CowTail_Draw, // EN_INVADEPOH_DEMO_TYPE_COW_TAIL +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19454.s") +MtxF sAlienLeftEyeBeamMtxF; +MtxF sAlienRightEyeBeamMtxF; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19498.s") +void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1950C.s") +void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sAlienInitChain); + this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000; + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19548.s") + this->actionFunc = EnInvadepohDemo_Alien_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19564.s") +void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sRomaniInitChain); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19590.s") + this->actionFunc = EnInvadepohDemo_Romani_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1965C.s") +void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sCowInitChain); + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0, + EN_INVADEPOH_DEMO_TYPE_COW_TAIL); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19688.s") + this->actionFunc = EnInvadepohDemo_Cow_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19754.s") +void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sUfoInitChain); + this->actionFunc = EnInvadepohDemo_SelectCueAction; + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1985C.s") +void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) { + Actor_ProcessInitChain(&this->actor, sCowTailInitChain); + this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + if (this->objectIndex < 0) { + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1987C.s") + this->actionFunc = EnInvadepohDemo_CowTail_WaitForObject; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C199BC.s") +void EnInvadepohDemo_Cow_Destroy(EnInvadepohDemo* this, PlayState* play) { + Actor* thisx = &this->actor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C199EC.s") + if (thisx->child != NULL) { + thisx->child->parent = NULL; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19AB4.s") + Actor_Kill(thisx->child); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19D00.s") +void EnInvadepohDemo_CowTail_Destroy(EnInvadepohDemo* this, PlayState* play) { + if (this->actor.parent != NULL) { + this->actor.parent->child = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19D48.s") +void EnInvadepohDemo_Alien_Idle(EnInvadepohDemo* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19E04.s") +void EnInvadepohDemo_Alien_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19EC0.s") + if (pathCount != 0) { + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + SkelAnime_Update(&this->skelAnime); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C19F7C.s") +void EnInvadepohDemo_Romani_Idle(EnInvadepohDemo* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A038.s") +void EnInvadepohDemo_Romani_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A070.s") + if (pathCount != 0) { + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + SkelAnime_Update(&this->skelAnime); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A168.s") +/** + * Positions the cow tail actor at the appropriate spot on the cow's body and rotates it to + * match the cow's rotation. This function is also responsible for playing the cow's animation. + */ +void EnInvadepohDemo_Cow_UpdateCommon(EnInvadepohDemo* this, PlayState* play) { + s32 pad; + MtxF mtx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A244.s") + if (this->actor.child != NULL) { + Matrix_Push(); + Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, + &this->actor.shape.rot); + Matrix_Translate(0.0f, 57.0f, -36.0f, MTXMODE_APPLY); + Matrix_RotateXS(this->actor.shape.rot.x * -0.7f, MTXMODE_APPLY); + Matrix_RotateZS(this->actor.shape.rot.z * -0.7f, MTXMODE_APPLY); + Matrix_MultZero(&this->actor.child->world.pos); + Matrix_Get(&mtx); + Matrix_MtxFToYXZRot(&mtx, &this->actor.child->shape.rot, false); + Matrix_Pop(); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A590.s") + SkelAnime_Update(&this->skelAnime); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A650.s") +void EnInvadepohDemo_Cow_Idle(EnInvadepohDemo* this, PlayState* play) { + EnInvadepohDemo_Cow_UpdateCommon(this, play); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A670.s") +void EnInvadepohDemo_Cow_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A6C8.s") + if (pathCount != 0) { + if (((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_1) && (play->csCtx.curFrame == 343)) || + ((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_2) && (play->csCtx.curFrame == 421)) || + ((this->cueId == EN_INVADEPOH_DEMO_COW_CUEID_FOLLOW_PATH_3) && (play->csCtx.curFrame == 521))) { + Actor_PlaySfx(&this->actor, NA_SE_EV_COW_CRY); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/func_80C1A854.s") + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } else { + EnInvadepohDemo_Cow_UpdateCommon(this, play); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Init.s") +void EnInvadepohDemo_Ufo_Idle(EnInvadepohDemo* this, PlayState* play) { + this->ufoRotZ += 0x258; + Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_UFO_FLY - SFX_FLAG); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Destroy.s") +void EnInvadepohDemo_Ufo_FollowPath(EnInvadepohDemo* this, PlayState* play) { + Path* path = &play->setupPathList[this->pathIndex]; + s32 pathCount = path->count; + Vec3s* points = Lib_SegmentedToVirtual(path->points); + Vec3f point; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Update.s") + if (pathCount != 0) { + this->ufoRotZ += 0x258; + Math_Vec3s_ToVec3f(&point, &points[this->pointIndex]); + if (Math_Vec3f_StepTo(&this->actor.world.pos, &point, this->speed) < this->speed) { + this->pointIndex++; + if (this->pointIndex >= pathCount) { + Actor_Kill(&this->actor); + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Invadepoh_Demo/EnInvadepohDemo_Draw.s") +/** + * Updates the actor's cue ID if certain conditions are met and calls a function based + * on their current cue ID. Specifically, cows and aliens offset the cue ID from their + * cue channel (which applies to *all* aliens/cows, not just this specific actor), then + * they compare this offset value to a value read from their params. If these two values + * match, the actor's cue ID is updated. + * + * The distinction between a "global" cue ID from the cue channel and a "local" cue ID + * specific to an instance of this actor is used to prevent all the cows or aliens from + * moving along the path at once. The cow or alien waits in a stationary "idle" state + * until the "global" cue ID changes to a specific value; if the cue ID offset matches + * what this actor specifies in its params, then that acts like a signal to tell the + * actor to update the "local" cue ID and start moving. The other cows or aliens in + * the scene should have different params, meaning the cue ID offset will not match; + * they will thus ignore this "global" cue ID change and remain idle. + */ +void EnInvadepohDemo_SelectCueAction(EnInvadepohDemo* this, PlayState* play) { + CsCmdActorCue* cue; + s32 cueIdOffset; + + if (Cutscene_IsCueInChannel(play, sCueTypes[this->type])) { + this->cueChannel = Cutscene_GetCueChannel(play, sCueTypes[this->type]); + cue = play->csCtx.actorCues[this->cueChannel]; + + switch (this->type) { + case EN_INVADEPOH_DEMO_TYPE_UFO: + if (this->cueId != cue->id) { + if (cue->id == EN_INVADEPOH_DEMO_UFO_CUEID_FOLLOW_PATH) { + Actor_PlaySfx(&this->actor, NA_SE_EV_UFO_DASH); + } + + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_ROMANI: + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_ALIEN: + if (cue->id > EN_INVADEPOH_DEMO_ALIEN_CUEID_IDLE) { + cueIdOffset = cue->id - EN_INVADEPOH_DEMO_ALIEN_CUEID_FOLLOW_PATH_1; + if (this->cueIdOffset != cueIdOffset) { + break; + } + } + + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + case EN_INVADEPOH_DEMO_TYPE_COW: + if (cue->id > EN_INVADEPOH_DEMO_COW_CUEID_IDLE) { + cueIdOffset = cue->id - EN_INVADEPOH_DEMO_COW_CUEID_IDLE; + if (this->cueIdOffset != cueIdOffset) { + break; + } + } + + if (this->cueId != cue->id) { + this->cueId = cue->id; + } + break; + + default: + break; + } + + switch (this->type) { + case EN_INVADEPOH_DEMO_TYPE_UFO: + sUfoCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_ALIEN: + sAlienCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_ROMANI: + sRomaniCueActionCsFuncs[this->cueId](this, play); + break; + + case EN_INVADEPOH_DEMO_TYPE_COW: + sCowCueActionCsFuncs[this->cueId](this, play); + break; + + default: + break; + } + } +} + +void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play) { + if (this->actor.parent == NULL) { + Actor_Kill(&this->actor); + return; + } + + SkelAnime_Update(&this->skelAnime); +} + +void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gAlienSkel, &gAlienFloatAnim, this->jointTable, this->morphTable, + ALIEN_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gAlienFloatAnim); + } +} + +void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gRomaniSkel, &gRomaniAbductedAnim, this->jointTable, + this->morphTable, ROMANI_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gRomaniAbductedAnim); + } +} + +void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_SelectCueAction; + SkelAnime_InitFlex(play, &this->skelAnime, &gCowSkel, &gCowMooAnim, this->jointTable, this->morphTable, + COW_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gCowMooAnim); + } +} + +void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + this->actor.objBankIndex = this->objectIndex; + Actor_SetObjectDependency(play, &this->actor); + this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; + this->actionFunc = EnInvadepohDemo_CowTail_Idle; + SkelAnime_InitFlex(play, &this->skelAnime, &gCowTailSkel, &gCowTailSwishAnim, this->jointTable, + this->morphTable, COW_TAIL_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gCowTailSwishAnim); + } +} + +void EnInvadepohDemo_Ufo_UpdateMatrixTranslation(Vec3f* translation) { + MtxF* currentMatrix = Matrix_GetCurrent(); + + currentMatrix->xw = translation->x; + currentMatrix->yw = translation->y; + currentMatrix->zw = translation->z; +} + +s32 EnInvadepohDemo_Ufo_ShouldDrawLensFlare(PlayState* play, Vec3f* pos) { + Vec3f projectedPos; + f32 invW; + + Actor_GetProjectedPos(play, pos, &projectedPos, &invW); + if ((projectedPos.z > 1.0f) && (fabsf(projectedPos.x * invW) < 1.0f) && (fabsf(projectedPos.y * invW) < 1.0f)) { + f32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW); + f32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); + s32 wZ = (s32)(projectedPos.z * invW * 16352.0f) + 16352; + + if (wZ < SysCfb_GetZBufferInt(screenPosX, screenPosY)) { + return true; + } + } + + return false; +} + +void EnInvadepohDemo_Alien_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, + Gfx** gfx) { + if (limbIndex == ALIEN_LIMB_LEFT_EYE) { + Matrix_Push(); + Matrix_RotateZS(-0x53ED, MTXMODE_APPLY); + Matrix_RotateYS(-0x3830, MTXMODE_APPLY); + Matrix_Scale(1.0f, 1.0f, 1.5f, MTXMODE_APPLY); + Matrix_Get(&sAlienLeftEyeBeamMtxF); + Matrix_Pop(); + } else if (limbIndex == ALIEN_LIMB_RIGHT_EYE) { + Matrix_Push(); + Matrix_RotateZS(-0x53ED, MTXMODE_APPLY); + Matrix_RotateYS(-0x47D0, MTXMODE_APPLY); + Matrix_Scale(1.0f, 1.0f, 1.5f, MTXMODE_APPLY); + Matrix_Get(&sAlienRightEyeBeamMtxF); + Matrix_Pop(); + } +} + +void EnInvadepohDemo_Alien_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + Mtx* mtx; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Matrix_Push(); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gAlienEmptyTexAnim)); + Scene_SetRenderModeXlu(play, 0, 1); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + POLY_OPA_DISP = + SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + EnInvadepohDemo_Alien_PostLimbDraw, &this->actor, POLY_OPA_DISP); + + // In EnInvadepoh, the eye beam alpha is controlled by an instance variable, and there is an if-block that checks + // to see if this variable is not zero. In this actor, the eye beam alpha is hardcoded, but this block is still + // necessary to prevent reordering; this is likely a result of copy-pasting from EnInvadepoh. + if (true) { + Gfx* gfx; + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gAlienEyeBeamTexAnim)); + + OPEN_DISPS(play->state.gfxCtx); + + gfx = POLY_XLU_DISP; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0xFF, 240, 180, 100, 60); + gDPSetEnvColor(gfx++, 255, 255, 255, 150); + Matrix_Mult(&sAlienLeftEyeBeamMtxF, MTXMODE_NEW); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gAlienEyeBeamDL); + Matrix_Mult(&sAlienRightEyeBeamMtxF, MTXMODE_NEW); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gAlienEyeBeamDL); + POLY_XLU_DISP = gfx; + } + } + + CLOSE_DISPS(play->state.gfxCtx); + } + + CLOSE_DISPS(play->state.gfxCtx); + + // In EnInvadepoh, the code to draw the light flash checks an instance variable which is set to true if the actor + // should draw. In this actor, an equivalent variable is checked in EnInvadepohDemo_Draw, so it isn't checked here. + // However, this block is still necessary to prevent reordering; this is likely a result of copy-pasting from + // EnInvadepoh. Similarly, this function requires a lot of extra stack space for unused variables; the names and + // types of these variables are inferred from EnInvadepoh's version of this code. + if (true) { + Gfx* gfx; + Vec3f glowOffset; + Vec3f glowPos; // unused, inferred from EnInvadepoh + s32 glowAlpha; // unused, inferred from EnInvadepoh + + OPEN_DISPS(play->state.gfxCtx); + + gfx = POLY_XLU_DISP; + gfx = Gfx_SetupDL20_NoCD(gfx); + + gDPSetDither(gfx++, G_CD_NOISE); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, + 0); + Matrix_Mult(&play->billboardMtxF, MTXMODE_NEW); + Matrix_MultVecZ(90.0f, &glowOffset); + Matrix_Translate(this->actor.world.pos.x + glowOffset.x, this->actor.world.pos.y + glowOffset.y + 25.0f, + this->actor.world.pos.z + glowOffset.z, MTXMODE_NEW); + Matrix_Scale(0.15f, 0.15f, 0.15f, MTXMODE_APPLY); + gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); + gDPSetPrimColor(gfx++, 0, 0, 240, 180, 100, 100); + + mtx = Matrix_NewMtx(play->state.gfxCtx); + + if (mtx != NULL) { + gSPMatrix(gfx++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, gameplay_keep_DL_029CF0); + POLY_XLU_DISP = gfx; + } + + CLOSE_DISPS(play->state.gfxCtx); + } + + Matrix_Pop(); +} + +void EnInvadepohDemo_Romani_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(&gRomaniEyeSadTex)); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(&gRomaniMouthHangingOpenTex)); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + NULL, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} + +s32 EnInvadepohDemo_Cow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + if (limbIndex == COW_LIMB_NOSE_RING) { + *dList = NULL; + } + + return false; +} + +void EnInvadepohDemo_Cow_Draw(EnInvadepohDemo* this, PlayState* play) { + Gfx_SetupDL37_Opa(play->state.gfxCtx); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnInvadepohDemo_Cow_OverrideLimbDraw, NULL, &this->actor); +} + +void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play) { + s32 pad[2]; + Vec3f flashPos = gZeroVec3f; + Mtx* mtx; + + flashPos.x = this->actor.world.pos.x; + flashPos.y = this->actor.world.pos.y; + flashPos.z = this->actor.world.pos.z; + EnInvadepohDemo_Ufo_UpdateMatrixTranslation(&flashPos); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateZS(this->ufoRotZ, MTXMODE_APPLY); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + mtx = Matrix_NewMtx(play->state.gfxCtx); + if (mtx != NULL) { + gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0x80, 255, 255, 0, 180); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 50, 0, 0); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); + } + + CLOSE_DISPS(play->state.gfxCtx); + + if (EnInvadepohDemo_Ufo_ShouldDrawLensFlare(play, &flashPos)) { + func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); + } +} + +void EnInvadepohDemo_CowTail_Draw(EnInvadepohDemo* this, PlayState* play) { + Gfx_SetupDL37_Opa(play->state.gfxCtx); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, + NULL, &this->actor); +} + +void EnInvadepohDemo_Init(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + this->cueIdOffset = EN_INVADEPOH_DEMO_GET_CUEID_OFFSET(&this->actor); + this->type = EN_INVADEPOH_DEMO_GET_TYPE(&this->actor); + if ((this->type < EN_INVADEPOH_DEMO_TYPE_ALIEN) || (this->type > EN_INVADEPOH_DEMO_TYPE_COW_TAIL)) { + Actor_Kill(&this->actor); + return; + } + + if (this->type == EN_INVADEPOH_DEMO_TYPE_UFO) { + this->actor.world.rot.z = 0; + this->speed = EN_INVADEPOH_DEMO_GET_SPEED(&this->actor); + this->actor.shape.rot.z = this->actor.world.rot.z; + } else { + this->actor.world.rot.z = 0; + this->speed = EN_INVADEPOH_DEMO_GET_SPEED(&this->actor) / 10.0f; + this->actor.shape.rot.z = this->actor.world.rot.z; + } + + this->drawFlags = 0; + this->cueId = EN_INVADEPOH_DEMO_CUEID_NONE; + this->ufoRotZ = 0; + this->pathIndex = EN_INVADEPOH_DEMO_GET_PATH_INDEX(&this->actor); + this->pointIndex = 0; + this->objectIndex = -1; + sInitFuncs[this->type](this, play); +} + +void EnInvadepohDemo_Destroy(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + sDestroyFuncs[this->type](this, play); +} + +void EnInvadepohDemo_Update(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + this->actionFunc(this, play); +} + +void EnInvadepohDemo_Draw(Actor* thisx, PlayState* play) { + s32 pad; + EnInvadepohDemo* this = THIS; + + if ((this->cueId != EN_INVADEPOH_DEMO_CUEID_NONE) && (this->drawFlags & DRAW_FLAG_SHOULD_DRAW)) { + sDrawFuncs[this->type](this, play); + } +} diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h index ff13ca668..ac93078ec 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h @@ -2,15 +2,54 @@ #define Z_EN_INVADEPOH_DEMO_H #include "global.h" +#include "assets/objects/gameplay_keep/gameplay_keep.h" +#include "assets/objects/object_cow/object_cow.h" +#include "assets/objects/object_ma1/object_ma1.h" +#include "assets/objects/object_uch/object_uch.h" + +typedef enum { + /* 0 */ EN_INVADEPOH_DEMO_TYPE_ALIEN, + /* 1 */ EN_INVADEPOH_DEMO_TYPE_ROMANI, + /* 2 */ EN_INVADEPOH_DEMO_TYPE_COW, + /* 3 */ EN_INVADEPOH_DEMO_TYPE_UFO, + /* 4 */ EN_INVADEPOH_DEMO_TYPE_COW_TAIL, + /* 5 */ EN_INVADEPOH_DEMO_TYPE_MAX +} EnInvadepohDemoType; + +#define EN_INVADEPOH_DEMO_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define EN_INVADEPOH_DEMO_GET_CUEID_OFFSET(thisx) (((thisx)->params >> 11) & 0x7) +#define EN_INVADEPOH_DEMO_GET_PATH_INDEX(thisx) (((thisx)->params >> 4) & 0x7F) +#define EN_INVADEPOH_DEMO_GET_SPEED(thisx) ((thisx)->shape.rot.z) struct EnInvadepohDemo; typedef void (*EnInvadepohDemoActionFunc)(struct EnInvadepohDemo*, PlayState*); +// This actor has multiple arrays of function pointers which are used for things like +// Init, Destroy, Draw, and something similar to an Update function. Some of these +// functions do not have any stack space for a recast temp, which means that they must +// take an EnInvadepohDemo pointer, not an Actor pointer. In other words, these +// functions are not ActorFuncs. This typedef is used for these arrays of function +// pointers to better distinguish them from "actual" action functions, even if they +// have the exact same signature. +typedef void (*EnInvadepohDemoFunc)(struct EnInvadepohDemo*, PlayState*); + typedef struct EnInvadepohDemo { /* 0x000 */ Actor actor; /* 0x144 */ EnInvadepohDemoActionFunc actionFunc; - /* 0x148 */ char unk_148[0x180]; + /* 0x148 */ s32 type; // "type" + /* 0x14C */ f32 speed; + /* 0x150 */ s32 cueChannel; + /* 0x154 */ s32 cueId; // "demo_mode" + /* 0x158 */ s32 pathIndex; + /* 0x15C */ s32 pointIndex; + /* 0x160 */ s32 objectIndex; + /* 0x164 */ s32 drawFlags; // Only has one flag to control whether or not to draw + /* 0x168 */ s32 cueIdOffset; + /* 0x16C */ s16 ufoRotZ; + /* 0x170 */ SkelAnime skelAnime; + /* 0x1B4 */ Vec3s jointTable[ROMANI_LIMB_MAX]; + /* 0x23E */ Vec3s morphTable[ROMANI_LIMB_MAX]; } EnInvadepohDemo; // size = 0x2C8 #endif // Z_EN_INVADEPOH_DEMO_H diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index c9828e0ff..3a58ba62b 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -542,12 +542,10 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { MTXMODE_APPLY); } - gfx = Gfx_SetupDL20_NoCD(POLY_XLU_DISP); + gfx = POLY_XLU_DISP; + gfx = Gfx_SetupDL20_NoCD(gfx); - gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); - if (1) {} - if (1) {} - if (1) {} + gDPSetDither(gfx++, G_CD_NOISE); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); gDPSetPrimColor(gfx++, 0, 0, 130, 0, 255, 100); diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index 662543774..6440493cf 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -701,7 +701,7 @@ void func_80B32F04(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; gfx = Gfx_SetupDL20_NoCD(gfx); - gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); + gDPSetDither(gfx++, G_CD_NOISE); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gSPDisplayList(gfx++, gameplay_keep_DL_029CB0); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d060d23e2..e146d804d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16876,38 +16876,38 @@ 0x80C18E94:("EnAnd_Update",), 0x80C18ED0:("EnAnd_TransformLimbDraw",), 0x80C19084:("EnAnd_Draw",), - 0x80C192A0:("func_80C192A0",), - 0x80C192B0:("func_80C192B0",), - 0x80C19334:("func_80C19334",), - 0x80C193A8:("func_80C193A8",), - 0x80C19454:("func_80C19454",), - 0x80C19498:("func_80C19498",), - 0x80C1950C:("func_80C1950C",), - 0x80C19548:("func_80C19548",), - 0x80C19564:("func_80C19564",), - 0x80C19590:("func_80C19590",), - 0x80C1965C:("func_80C1965C",), - 0x80C19688:("func_80C19688",), - 0x80C19754:("func_80C19754",), - 0x80C1985C:("func_80C1985C",), - 0x80C1987C:("func_80C1987C",), - 0x80C199BC:("func_80C199BC",), - 0x80C199EC:("func_80C199EC",), - 0x80C19AB4:("func_80C19AB4",), - 0x80C19D00:("func_80C19D00",), - 0x80C19D48:("func_80C19D48",), - 0x80C19E04:("func_80C19E04",), - 0x80C19EC0:("func_80C19EC0",), - 0x80C19F7C:("func_80C19F7C",), - 0x80C1A038:("func_80C1A038",), - 0x80C1A070:("func_80C1A070",), - 0x80C1A168:("func_80C1A168",), - 0x80C1A244:("func_80C1A244",), - 0x80C1A590:("func_80C1A590",), - 0x80C1A650:("func_80C1A650",), - 0x80C1A670:("func_80C1A670",), - 0x80C1A6C8:("func_80C1A6C8",), - 0x80C1A854:("func_80C1A854",), + 0x80C192A0:("EnInvadepohDemo_DoNothing",), + 0x80C192B0:("EnInvadepohDemo_Alien_Init",), + 0x80C19334:("EnInvadepohDemo_Romani_Init",), + 0x80C193A8:("EnInvadepohDemo_Cow_Init",), + 0x80C19454:("EnInvadepohDemo_Ufo_Init",), + 0x80C19498:("EnInvadepohDemo_CowTail_Init",), + 0x80C1950C:("EnInvadepohDemo_Cow_Destroy",), + 0x80C19548:("EnInvadepohDemo_CowTail_Destroy",), + 0x80C19564:("EnInvadepohDemo_Alien_Idle",), + 0x80C19590:("EnInvadepohDemo_Alien_FollowPath",), + 0x80C1965C:("EnInvadepohDemo_Romani_Idle",), + 0x80C19688:("EnInvadepohDemo_Romani_FollowPath",), + 0x80C19754:("EnInvadepohDemo_Cow_UpdateCommon",), + 0x80C1985C:("EnInvadepohDemo_Cow_Idle",), + 0x80C1987C:("EnInvadepohDemo_Cow_FollowPath",), + 0x80C199BC:("EnInvadepohDemo_Ufo_Idle",), + 0x80C199EC:("EnInvadepohDemo_Ufo_FollowPath",), + 0x80C19AB4:("EnInvadepohDemo_SelectCueAction",), + 0x80C19D00:("EnInvadepohDemo_CowTail_Idle",), + 0x80C19D48:("EnInvadepohDemo_Alien_WaitForObject",), + 0x80C19E04:("EnInvadepohDemo_Romani_WaitForObject",), + 0x80C19EC0:("EnInvadepohDemo_Cow_WaitForObject",), + 0x80C19F7C:("EnInvadepohDemo_CowTail_WaitForObject",), + 0x80C1A038:("EnInvadepohDemo_Ufo_UpdateMatrixTranslation",), + 0x80C1A070:("EnInvadepohDemo_Ufo_ShouldDrawLensFlare",), + 0x80C1A168:("EnInvadepohDemo_Alien_PostLimbDraw",), + 0x80C1A244:("EnInvadepohDemo_Alien_Draw",), + 0x80C1A590:("EnInvadepohDemo_Romani_Draw",), + 0x80C1A650:("EnInvadepohDemo_Cow_OverrideLimbDraw",), + 0x80C1A670:("EnInvadepohDemo_Cow_Draw",), + 0x80C1A6C8:("EnInvadepohDemo_Ufo_Draw",), + 0x80C1A854:("EnInvadepohDemo_CowTail_Draw",), 0x80C1A8A4:("EnInvadepohDemo_Init",), 0x80C1A98C:("EnInvadepohDemo_Destroy",), 0x80C1A9C0:("EnInvadepohDemo_Update",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 5047e9804..fc49a3b43 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -16415,26 +16415,25 @@ 0x80C19218:("D_80C19218","UNK_TYPE4","",0x4), 0x80C19220:("D_80C19220","UNK_TYPE1","",0x1), 0x80C1AA40:("En_Invadepoh_Demo_InitVars","UNK_TYPE1","",0x1), - 0x80C1AA60:("D_80C1AA60","UNK_TYPE1","",0x1), - 0x80C1AA62:("D_80C1AA62","UNK_TYPE1","",0x1), - 0x80C1AA74:("D_80C1AA74","UNK_TYPE1","",0x1), - 0x80C1AA88:("D_80C1AA88","UNK_TYPE1","",0x1), - 0x80C1AAA0:("D_80C1AAA0","UNK_TYPE1","",0x1), - 0x80C1AAB0:("D_80C1AAB0","UNK_TYPE1","",0x1), - 0x80C1AAC8:("D_80C1AAC8","UNK_TYPE1","",0x1), - 0x80C1AAD8:("D_80C1AAD8","UNK_PTR","",0x4), - 0x80C1AAEC:("D_80C1AAEC","UNK_PTR","",0x4), - 0x80C1AB00:("D_80C1AB00","UNK_PTR","",0x4), - 0x80C1AB1C:("D_80C1AB1C","UNK_TYPE1","",0x1), - 0x80C1AB28:("D_80C1AB28","UNK_PTR","",0x4), - 0x80C1AB3C:("D_80C1AB3C","UNK_PTR","",0x4), - 0x80C1AB4C:("D_80C1AB4C","UNK_PTR","",0x4), + 0x80C1AA60:("sCueTypes","s32","[5]",0x14), + 0x80C1AA74:("sAlienInitChain","InitChainEntry","[5]",0x14), + 0x80C1AA88:("sRomaniInitChain","InitChainEntry","[6]",0x18), + 0x80C1AAA0:("sCowInitChain","InitChainEntry","[4]",0x10), + 0x80C1AAB0:("sUfoInitChain","InitChainEntry","[6]",0x18), + 0x80C1AAC8:("sCowTailInitChain","InitChainEntry","[4]",0x10), + 0x80C1AAD8:("sInitFuncs","UNK_PTR","[5]",0x14), + 0x80C1AAEC:("sDestroyFuncs","UNK_PTR","[5]",0x14), + 0x80C1AB00:("sAlienCueActionCsFuncs","UNK_PTR","[7]",0x1C), + 0x80C1AB1C:("sRomaniCueActionCsFuncs","UNK_TYPE1","[3]",0xC), + 0x80C1AB28:("sCowCueActionCsFuncs","UNK_PTR","[5]",0x14), + 0x80C1AB3C:("sUfoCueActionCsFuncs","UNK_PTR","[4]",0x10), + 0x80C1AB4C:("sDrawFuncs","UNK_PTR","[5]",0x14), 0x80C1AB60:("D_80C1AB60","f32","",0x4), 0x80C1AB64:("D_80C1AB64","f32","",0x4), 0x80C1AB68:("D_80C1AB68","f32","",0x4), 0x80C1AB6C:("D_80C1AB6C","f32","",0x4), - 0x80C1AD40:("D_80C1AD40","UNK_TYPE1","",0x1), - 0x80C1AD80:("D_80C1AD80","UNK_TYPE1","",0x1), + 0x80C1AD40:("sAlienLeftEyeBeamMtxF","MtxF","",0x40), + 0x80C1AD80:("sAlienRightEyeBeamMtxF","MtxF","",0x40), 0x80C1B520:("Obj_Danpeilift_InitVars","UNK_TYPE1","",0x1), 0x80C1B540:("D_80C1B540","UNK_TYPE1","",0x1), 0x80C1B550:("D_80C1B550","f32","",0x4), diff --git a/undefined_syms.txt b/undefined_syms.txt index 81f14ced8..a6a5bc8ae 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -470,22 +470,6 @@ D_06015C28 = 0x06015C28; D_060156D8 = 0x060156D8; D_06016720 = 0x06016720; -// ovl_En_Invadepoh_Demo - -D_06000080 = 0x06000080; -D_06000550 = 0x06000550; -D_06000560 = 0x06000560; -D_06001D80 = 0x06001D80; -D_06004010 = 0x06004010; -D_06004264 = 0x06004264; -D_06004C30 = 0x06004C30; -D_06004E50 = 0x06004E50; -D_06004E98 = 0x06004E98; -D_06011FC8 = 0x06011FC8; -D_06012FC8 = 0x06012FC8; -D_06013928 = 0x06013928; -D_06016588 = 0x06016588; - // ovl_En_Jso D_060081F4 = 0x060081F4; From cd38fbbab4694c9713922b3f0172688eaaae9ed9 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Wed, 13 Sep 2023 19:06:52 -0700 Subject: [PATCH 09/74] Change all uses of "rotational velocity" to "angular velocity" (#1375) * Change all uses of "rotational velocity" to "angular velocity" * Respond to review --- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 72 +++++++++---------- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h | 14 ++-- .../ovl_En_Grasshopper/z_en_grasshopper.c | 8 +-- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 27 ++++--- src/overlays/actors/ovl_En_Pp/z_en_pp.h | 4 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 16 ++--- src/overlays/actors/ovl_En_Rd/z_en_rd.h | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 6 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 10 +-- .../actors/ovl_En_Tanron5/z_en_tanron5.h | 4 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 50 ++++++------- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 62 ++++++++-------- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h | 10 +-- 15 files changed, 144 insertions(+), 145 deletions(-) diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index 93c0214df..8e96cae50 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -100,9 +100,9 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { s32 i; innerPetalYPos = this->dyna.actor.world.pos.y + -10.0f; - angle = this->petalZRotation - 0x2000; + angle = this->petalRotZ - 0x2000; outerPetalPosScale = (Math_CosS(angle) * 77.42784f) + 74.95192f; - outerPetalYPos = (Math_SinS(this->petalZRotation) * 77.42784f) + this->dyna.actor.world.pos.y + -64.74976f; + outerPetalYPos = (Math_SinS(this->petalRotZ) * 77.42784f) + this->dyna.actor.world.pos.y + -64.74976f; for (i = 0; i < ARRAY_COUNT(this->innerPetalPosRot); i++) { innerPetalPosRot = &this->innerPetalPosRot[i]; @@ -114,14 +114,14 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { innerPetalPosRot->pos.z = (Math_CosS(angle) * 74.95192f) + this->dyna.actor.world.pos.z; innerPetalPosRot->rot.x = this->dyna.actor.shape.rot.x; innerPetalPosRot->rot.y = angle - 0x4000; - innerPetalPosRot->rot.z = this->dyna.actor.shape.rot.z + this->petalZRotation; + innerPetalPosRot->rot.z = this->dyna.actor.shape.rot.z + this->petalRotZ; outerPetalPosRot->pos.x = (Math_SinS(angle) * outerPetalPosScale) + this->dyna.actor.world.pos.x; outerPetalPosRot->pos.y = outerPetalYPos; outerPetalPosRot->pos.z = (Math_CosS(angle) * outerPetalPosScale) + this->dyna.actor.world.pos.z; outerPetalPosRot->rot.x = innerPetalPosRot->rot.x; outerPetalPosRot->rot.y = innerPetalPosRot->rot.y; - outerPetalPosRot->rot.z = innerPetalPosRot->rot.z + this->outerPetalZRotation; + outerPetalPosRot->rot.z = innerPetalPosRot->rot.z + this->outerPetalRotZ; } } @@ -130,10 +130,10 @@ void BgNumaHana_UpdatePetalPosRots(BgNumaHana* this) { * as if they are "settling" into place. This function is responsible * for computing the extra rotation for this "settling". */ -void BgNumaHana_UpdateSettleRotation(s16* settleZRotation, s16* settleAngle, f32* settleScale, f32 scaleStep) { +void BgNumaHana_UpdateSettleRotation(s16* settleRotZ, s16* settleAngle, f32* settleScale, f32 scaleStep) { *settleAngle += 0x32C8; Math_StepToF(settleScale, 0.0f, scaleStep); - *settleZRotation += (s16)(Math_SinS(*settleAngle) * *settleScale); + *settleRotZ += (s16)(Math_SinS(*settleAngle) * *settleScale); } void BgNumaHana_Init(Actor* thisx, PlayState* play) { @@ -164,15 +164,15 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - this->petalZRotation = 0x2000; - this->innerPetalZRotation = 0x2000; - this->innerPetalZRotationalVelocity = 0; - this->settleZRotation = 0; + this->petalRotZ = 0x2000; + this->innerPetalRotZ = 0x2000; + this->innerPetalAngularVelocityZ = 0; + this->settleRotZ = 0; this->settleAngle = 0; this->settleScale = 0.0f; - this->outerPetalZRotation = -0x4000; - this->outerPetalZRotationalVelocity = 0; - this->flowerRotationalVelocity = 0x147; + this->outerPetalRotZ = -0x4000; + this->outerPetalAngularVelocityZ = 0; + this->flowerAngularVelocity = 0x147; this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 210.0f; FireObj_SetState2(&this->fire, 0.05f, FIRE_STATE_FULLY_LIT); @@ -238,13 +238,13 @@ void BgNumaHana_SetupUnfoldInnerPetals(BgNumaHana* this) { * parts of the petals that are closest to the stalk. */ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) { - Math_StepToS(&this->innerPetalZRotationalVelocity, 240, 14); - if (Math_ScaledStepToS(&this->innerPetalZRotation, 0x2000, this->innerPetalZRotationalVelocity)) { + Math_StepToS(&this->innerPetalAngularVelocityZ, 240, 14); + if (Math_ScaledStepToS(&this->innerPetalRotZ, 0x2000, this->innerPetalAngularVelocityZ)) { if (this->transitionTimer >= 11) { BgNumaHana_SetupUnfoldOuterPetals(this); } else { if (this->transitionTimer <= 0) { - this->settleZRotation = 0; + this->settleRotZ = 0; this->settleAngle = 0; this->settleScale = 420.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP); @@ -255,8 +255,8 @@ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 20.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 20.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); } @@ -270,13 +270,13 @@ void BgNumaHana_SetupUnfoldOuterPetals(BgNumaHana* this) { * parts of the petals that are furthest to the stalk. */ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) { - Math_StepToS(&this->outerPetalZRotationalVelocity, 240, 14); - if (Math_ScaledStepToS(&this->outerPetalZRotation, -0x4000, this->outerPetalZRotationalVelocity)) { + Math_StepToS(&this->outerPetalAngularVelocityZ, 240, 14); + if (Math_ScaledStepToS(&this->outerPetalRotZ, -0x4000, this->outerPetalAngularVelocityZ)) { if (this->transitionTimer >= 11) { BgNumaHana_SetupRaiseFlower(this); } else { if (this->transitionTimer <= 0) { - this->settleZRotation = 0; + this->settleRotZ = 0; this->settleAngle = 0x5120; this->settleScale = 130.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP); @@ -287,8 +287,8 @@ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_MOVE - SFX_FLAG); } - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 7.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 7.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); } @@ -303,10 +303,10 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { s32 pad; DynaPolyActor* child; - BgNumaHana_UpdateSettleRotation(&this->settleZRotation, &this->settleAngle, &this->settleScale, 10.0f); - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; - Math_StepToS(&this->flowerRotationalVelocity, 0x111, 0xA); - this->dyna.actor.shape.rot.y += this->flowerRotationalVelocity; + BgNumaHana_UpdateSettleRotation(&this->settleRotZ, &this->settleAngle, &this->settleScale, 10.0f); + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; + Math_StepToS(&this->flowerAngularVelocity, 0x111, 0xA); + this->dyna.actor.shape.rot.y += this->flowerAngularVelocity; Math_StepToF(&this->dyna.actor.velocity.y, 3.0f, 0.3f); if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 210.0f, @@ -317,14 +317,14 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { DynaPoly_EnableCollision(play, &play->colCtx.dyna, child->bgId); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - this->petalZRotation = 0x2000; - this->innerPetalZRotation = 0x2000; - this->innerPetalZRotationalVelocity = 0; - this->settleZRotation = 0; + this->petalRotZ = 0x2000; + this->innerPetalRotZ = 0x2000; + this->innerPetalAngularVelocityZ = 0; + this->settleRotZ = 0; this->settleAngle = 0; - this->outerPetalZRotation = -0x4000; - this->outerPetalZRotationalVelocity = 0; - this->flowerRotationalVelocity = 0x147; + this->outerPetalRotZ = -0x4000; + this->outerPetalAngularVelocityZ = 0; + this->flowerAngularVelocity = 0x147; this->settleScale = 0.0f; CutsceneManager_Stop(this->dyna.actor.csId); @@ -343,8 +343,8 @@ void BgNumaHana_SetupOpenedIdle(BgNumaHana* this) { * Spins the "opened" flower around the y-axis. */ void BgNumaHana_OpenedIdle(BgNumaHana* this, PlayState* play) { - this->dyna.actor.shape.rot.y += this->flowerRotationalVelocity; - this->petalZRotation = this->innerPetalZRotation + this->settleZRotation; + this->dyna.actor.shape.rot.y += this->flowerAngularVelocity; + this->petalRotZ = this->innerPetalRotZ + this->settleRotZ; BgNumaHana_UpdatePetalPosRots(this); Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_FLOWER_ROLLING - SFX_FLAG); } diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h index d9f4a1ece..25a6283eb 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h @@ -29,15 +29,15 @@ typedef struct BgNumaHana { /* 0x234 */ BgNumaHanaActionFunc actionFunc; /* 0x238 */ WoodenFlowerPetalPosRot innerPetalPosRot[6]; /* 0x2B0 */ WoodenFlowerPetalPosRot outerPetalPosRot[6]; - /* 0x328 */ s16 petalZRotation; - /* 0x32A */ s16 innerPetalZRotation; - /* 0x32C */ s16 innerPetalZRotationalVelocity; - /* 0x32E */ s16 settleZRotation; + /* 0x328 */ s16 petalRotZ; + /* 0x32A */ s16 innerPetalRotZ; + /* 0x32C */ s16 innerPetalAngularVelocityZ; + /* 0x32E */ s16 settleRotZ; /* 0x330 */ s16 settleAngle; /* 0x334 */ f32 settleScale; - /* 0x338 */ s16 outerPetalZRotation; - /* 0x33A */ s16 outerPetalZRotationalVelocity; - /* 0x33C */ s16 flowerRotationalVelocity; + /* 0x338 */ s16 outerPetalRotZ; + /* 0x33A */ s16 outerPetalAngularVelocityZ; + /* 0x33C */ s16 flowerAngularVelocity; /* 0x33E */ s16 transitionTimer; } BgNumaHana; // size = 0x340 diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index 461a1969f..3c0d97d20 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -473,12 +473,12 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { this->targetRot.z = (this->actor.world.rot.y - this->targetRot.y) * 0.2f; targetSpeed = (this->index * 0.1f) + 4.0f; Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.7f); - Math_ApproachF(&this->rotationalVelocity, 2000.0f, 1.0f, 50.0f); - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5); + Math_ApproachF(&this->angularVelocity, 2000.0f, 1.0f, 50.0f); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->angularVelocity, 5); if (this->timer == 0) { if (Rand_ZeroFloat(1.0f) < 0.3f) { this->waitTimer = Rand_S16Offset(10, 10); - this->rotationalVelocity = 0.0f; + this->angularVelocity = 0.0f; } this->targetRot.y = Math_Atan2S(diffX, diffZ); @@ -606,7 +606,7 @@ void EnGrasshopper_Bounced(EnGrasshopper* this, PlayState* play) { Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.8f); Math_SmoothStepToS(&this->actor.world.rot.z, this->targetRot.z, 5, 0x3E8, 5); this->targetRot.z *= 0.8f; - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->angularVelocity, 5); if (this->timer == 0) { this->collider.elements[0].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD); this->timer = 0; diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index 8677bb9f2..cf0e50cbe 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -90,7 +90,7 @@ typedef struct EnGrasshopper { /* 0x035C */ s16 bankState; /* 0x035E */ s16 type; /* 0x0360 */ f32 dragonflyScale; - /* 0x0364 */ f32 rotationalVelocity; + /* 0x0364 */ f32 angularVelocity; /* 0x0368 */ f32 endFrame; /* 0x036C */ f32 approachSpeed; /* 0x0370 */ f32 baseFlyHeight; diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 7d0aae02f..1c6774b1a 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -556,14 +556,14 @@ void EnPp_Idle(EnPp* this, PlayState* play) { EnPp_ChangeAnim(this, EN_PP_ANIM_WALK); } - if ((this->maskBounceRotationalVelocity < 0x64) && + if ((this->maskBounceAngularVelocity < 0x64) && (fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f)) { Math_ApproachF(&this->actor.speed, 1.0f, 0.3f, 1.0f); } - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, - (this->maskBounceRotationalVelocity + 0x258), 0); - Math_SmoothStepToS(&this->maskBounceRotationalVelocity, 0, 1, 0x1F4, 0); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, this->maskBounceAngularVelocity + 0x258, + 0); + Math_SmoothStepToS(&this->maskBounceAngularVelocity, 0, 1, 0x1F4, 0); } } } @@ -602,11 +602,10 @@ void EnPp_Charge(EnPp* this, PlayState* play) { this->targetPos.z += distanceFromWorldPos.z; } - Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, (this->maskBounceRotationalVelocity + 0x7D0), - 0); + Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, this->maskBounceAngularVelocity + 0x7D0, 0); } - Math_SmoothStepToS(&this->maskBounceRotationalVelocity, 0, 1, 0x1F4, 0); + Math_SmoothStepToS(&this->maskBounceAngularVelocity, 0, 1, 0x1F4, 0); if (!this->actionVar.isCharging) { Math_ApproachZeroF(&this->actor.speed, 0.5f, 1.0f); if (fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f) { @@ -985,7 +984,7 @@ void EnPp_SetupDead(EnPp* this, PlayState* play) { this->targetPos.z += deadVelocity.z; } - this->maskBounceRotationalVelocity = this->actionVar.isCharging = 0; + this->maskBounceAngularVelocity = this->actionVar.isCharging = 0; EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE); this->timer = 15; if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || @@ -1165,8 +1164,8 @@ void EnPp_BodyPart_SetupMove(EnPp* this) { this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 13.0f; this->actor.gravity = -2.0f; this->timer = Rand_S16Offset(30, 30); - this->deadBodyPartRotationalVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00; - this->deadBodyPartRotationalVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; + this->deadBodyPartAngularVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00; + this->deadBodyPartAngularVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) { this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f; this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex; @@ -1198,8 +1197,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { } else { Math_Vec3f_Copy(&this->deadBodyPartsPos[0], &this->deadBodyPartPos); this->deadBodyPartCount = 1; - this->actor.shape.rot.x += this->deadBodyPartRotationalVelocity.x; - this->actor.shape.rot.z += this->deadBodyPartRotationalVelocity.z; + this->actor.shape.rot.x += this->deadBodyPartAngularVelocity.x; + this->actor.shape.rot.z += this->deadBodyPartAngularVelocity.z; } if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &waterSurface, @@ -1348,12 +1347,12 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) { (this->action == EN_PP_ACTION_ROAR))) { this->secondaryTimer = 0; this->timer = 10; - this->maskBounceRotationalVelocity = 0x20D0; + this->maskBounceAngularVelocity = 0x20D0; this->actor.speed = 0.0f; if (this->action == EN_PP_ACTION_CHARGE) { this->actionVar.isCharging = false; EnPp_ChangeAnim(this, EN_PP_ANIM_TURN_TO_FACE_PLAYER); - this->maskBounceRotationalVelocity = 0x1B58; + this->maskBounceAngularVelocity = 0x1B58; } this->targetRotY = this->actor.yawTowardsPlayer; diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.h b/src/overlays/actors/ovl_En_Pp/z_en_pp.h index 2f3c0e7b1..2f975a68c 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h @@ -73,7 +73,7 @@ typedef struct EnPp { s16 hasLandedFromJump; s16 maskDetachState; } actionVar; - /* 0x2D4 */ s16 maskBounceRotationalVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask. + /* 0x2D4 */ s16 maskBounceAngularVelocity; // Controls the speed that the Hiploop rotates to face the player when an attack bounces off the mask. /* 0x2D6 */ s16 deadBodyPartsSpawnedCount; /* 0x2D8 */ f32 endFrame; /* 0x2DC */ f32 chargeAndBounceSpeed; @@ -88,7 +88,7 @@ typedef struct EnPp { /* 0x364 */ Vec3f deadBodyPartPos; /* 0x370 */ s32 deadBodyPartCount; /* 0x374 */ Vec3f deadBodyPartsPos[EN_PP_DEAD_BODYPART_MAX]; - /* 0x3EC */ Vec3s deadBodyPartRotationalVelocity; + /* 0x3EC */ Vec3s deadBodyPartAngularVelocity; /* 0x3F2 */ s16 drawDmgEffTimer; /* 0x3F4 */ s16 drawDmgEffType; /* 0x3F8 */ f32 drawDmgEffScale; diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index 0cf7ec733..1cd0a7861 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -523,7 +523,7 @@ void EnRd_SetupPirouette(EnRd* this) { Animation_MorphToLoop(&this->skelAnime, &gGibdoRedeadPirouetteAnim, -6.0f); this->action = EN_RD_ACTION_PIROUETTE; this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f; - this->pirouetteRotationalVelocity = 0x1112; + this->pirouetteAngularVelocity = 0x1112; this->actor.speed = 0.0f; this->actor.world.rot.y = this->actor.shape.rot.y; this->actionFunc = EnRd_Pirouette; @@ -562,12 +562,12 @@ void EnRd_Pirouette(EnRd* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->pirouetteRotationalVelocity = 0x1112; + this->pirouetteAngularVelocity = 0x1112; } else if (Animation_OnFrame(&this->skelAnime, 15.0f)) { - this->pirouetteRotationalVelocity = 0x199A; + this->pirouetteAngularVelocity = 0x199A; } - this->actor.world.rot.y -= this->pirouetteRotationalVelocity; + this->actor.world.rot.y -= this->pirouetteAngularVelocity; this->actor.shape.rot.y = this->actor.world.rot.y; } @@ -577,13 +577,13 @@ void EnRd_EndPirouetteWhenPlayerIsClose(EnRd* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY); } - this->actor.world.rot.y -= this->pirouetteRotationalVelocity; + this->actor.world.rot.y -= this->pirouetteAngularVelocity; this->actor.shape.rot.y = this->actor.world.rot.y; - this->pirouetteRotationalVelocity -= 0x64; - if ((this->pirouetteRotationalVelocity < 0x834) && (this->pirouetteRotationalVelocity >= 0x7D0)) { + this->pirouetteAngularVelocity -= 0x64; + if ((this->pirouetteAngularVelocity < 0x834) && (this->pirouetteAngularVelocity >= 0x7D0)) { Animation_Change(&this->skelAnime, &gGibdoRedeadLookBackAnim, 0.0f, 0.0f, 19.0f, ANIMMODE_ONCE, -10.0f); - } else if (this->pirouetteRotationalVelocity < 0x3E8) { + } else if (this->pirouetteAngularVelocity < 0x3E8) { if ((EN_RD_GET_TYPE(&this->actor) != EN_RD_TYPE_CRYING) && (!this->isMourning)) { EnRd_SetupAttemptPlayerFreeze(this); } else { diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.h b/src/overlays/actors/ovl_En_Rd/z_en_rd.h index 927fbf48b..578515a28 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h @@ -76,7 +76,7 @@ typedef struct EnRd { /* 0x3E2 */ UNK_TYPE1 unk3E2[0x2]; /* 0x3E4 */ union { s16 danceEndTimer; - s16 pirouetteRotationalVelocity; + s16 pirouetteAngularVelocity; }; /* 0x3E6 */ s16 drawDmgEffTimer; /* 0x3E8 */ u8 drawDmgEffType; diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index f030885b1..f1be3d5f4 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -692,11 +692,11 @@ void EnSnowman_SetupDamaged(EnSnowman* this) { * Otherwise, it will either submerge underground (if it has health remaining) or die. */ void EnSnowman_Damaged(EnSnowman* this, PlayState* play) { - s32 rotationalVelocityScale; + s32 angularVelocityScale; SkelAnime_Update(&this->skelAnime); - rotationalVelocityScale = CLAMP_MAX(this->work.timer, 10); - this->actor.shape.rot.y += rotationalVelocityScale * 0x300; + angularVelocityScale = CLAMP_MAX(this->work.timer, 10); + this->actor.shape.rot.y += angularVelocityScale * 0x300; Math_StepToF(&this->actor.speed, 0.0f, 0.5f); if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) { diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c index 38e1ba8c6..3f8442dad 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -224,10 +224,10 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { return; } - // fragmentRotationalVelocityX is in a union with itemDropRotZ, so for item drops, this code + // fragmentAngularVelocityX is in a union with itemDropRotZ, so for item drops, this code // will initialize its z-rotation to a random value. - this->fragmentRotationalVelocityX = Rand_CenteredFloat(0x2000); - this->fragmentRotationalVelocityY = Rand_CenteredFloat(0x2000); + this->fragmentAngularVelocityX = Rand_CenteredFloat(0x2000); + this->fragmentAngularVelocityY = Rand_CenteredFloat(0x2000); if (TWINMOLD_PROP_GET_TYPE(&this->actor) <= TWINMOLD_PROP_TYPE_FRAGMENT_LARGE_7) { Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * sGiantModeScaleFactor); @@ -538,8 +538,8 @@ void EnTanron5_RuinFragmentItemDrop_Update(Actor* thisx, PlayState* play2) { } if (TWINMOLD_PROP_GET_TYPE(&this->actor) < TWINMOLD_PROP_TYPE_ITEM_DROP_1) { - this->actor.shape.rot.x += this->fragmentRotationalVelocityX; - this->actor.shape.rot.y += this->fragmentRotationalVelocityY; + this->actor.shape.rot.x += this->fragmentAngularVelocityX; + this->actor.shape.rot.y += this->fragmentAngularVelocityY; interactionDistSq = SQ(35.0f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h index 9f8c9b676..dddc205e7 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h @@ -50,10 +50,10 @@ typedef struct EnTanron5 { /* 0x148 */ Gfx* dList; /* 0x14C */ ColliderCylinder collider; /* 0x198 */ union { - s16 fragmentRotationalVelocityX; + s16 fragmentAngularVelocityX; s16 itemDropRotZ; }; - /* 0x19A */ s16 fragmentRotationalVelocityY; + /* 0x19A */ s16 fragmentAngularVelocityY; /* 0x19C */ f32 baseScale; /* 0x1A0 */ union { u8 hitCount; // used by destructible ruins diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 2d7d12782..226382f8d 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -498,7 +498,7 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) { case EN_WIZ_INTRO_CS_WAIT_BEFORE_RUN: if (this->introCutsceneTimer == 0) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_RUN, false); - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->introCutsceneTimer = 34; this->introCutsceneState++; } @@ -510,8 +510,8 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) { this->animLoopCounter = this->introCutsceneCameraAngle = 0; this->introCutsceneState = EN_WIZ_INTRO_CS_DISAPPEAR; } else { - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + this->actor.world.rot.y += this->angularVelocity; } Math_Vec3f_Copy(&eyeNext, &this->actor.world.pos); @@ -784,7 +784,7 @@ void EnWiz_Appear(EnWiz* this, PlayState* play) { void EnWiz_SetupDance(EnWiz* this) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DANCE, false); Math_ApproachF(&this->scale, 0.015f, 0.05f, 0.001f); - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->animLoopCounter = 0; this->action = EN_WIZ_ACTION_DANCE; if (this->fightState >= EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE) { @@ -808,16 +808,16 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) { Math_SmoothStepToS(&this->alpha, 255, 1, 5, 0); Math_ApproachF(&this->scale, 0.015f, 0.05f, 0.001f); Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG); - this->actor.world.rot.y += this->rotationalVelocity; + this->actor.world.rot.y += this->angularVelocity; if (this->fightState >= EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND) { EnWiz_MoveGhosts(this); } else { for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } } - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 20, 50, 10); if (this->endFrame <= curFrame) { if (this->animLoopCounter < 10) { @@ -997,20 +997,20 @@ void EnWiz_Attack(EnWiz* this, PlayState* play) { void EnWiz_SetupDisappear(EnWiz* this) { if (this->action != EN_WIZ_ACTION_DAMAGED) { - this->rotationalVelocity = 0x2710; + this->angularVelocity = 0x2710; this->timer = 0; EnWiz_ChangeAnim(this, EN_WIZ_ANIM_IDLE, false); this->action = EN_WIZ_ACTION_DISAPPEAR; } else { - this->rotationalVelocity = 0x2710; - this->actor.world.rot.y += this->rotationalVelocity; + this->angularVelocity = 0x2710; + this->actor.world.rot.y += this->angularVelocity; } this->targetPlatformLightAlpha = 0; this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR); - Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0x1388, 0x64, 0x3E8, 0x3E8); + this->actor.world.rot.y += this->angularVelocity; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = EnWiz_Disappear; } @@ -1022,8 +1022,8 @@ void EnWiz_SetupDisappear(EnWiz* this) { void EnWiz_Disappear(EnWiz* this, PlayState* play) { s32 i; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); - this->actor.world.rot.y += this->rotationalVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); + this->actor.world.rot.y += this->angularVelocity; if ((this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) || (this->action == EN_WIZ_ACTION_DAMAGED)) { Math_ApproachZeroF(&this->scale, 0.3f, 0.01f); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 5, 50, 0); @@ -1031,7 +1031,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) { Math_ApproachZeroF(&this->scale, 0.3f, 0.001f); Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 10, 50, 0); for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } } @@ -1079,9 +1079,9 @@ void EnWiz_SetupDamaged(EnWiz* this, PlayState* play) { this->timer = 0; } - this->rotationalVelocity = 0x4E20; + this->angularVelocity = 0x4E20; if ((this->drawDmgEffTimer != 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX)) { - this->rotationalVelocity = 0; + this->angularVelocity = 0; this->timer = 0; } @@ -1100,7 +1100,7 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_WIZ_BODYPART_MAX, 2, 1.0f, 0.7f); this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; - this->rotationalVelocity = 0x4E20; + this->angularVelocity = 0x4E20; this->actor.velocity.y = 30.0f; this->actor.gravity = -3.0f; } @@ -1118,10 +1118,10 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { this->isDead = true; } - this->actor.world.rot.y += this->rotationalVelocity; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); + this->actor.world.rot.y += this->angularVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); for (i = 0; i < this->platformCount; i++) { - this->ghostRot[i].y += this->rotationalVelocity; + this->ghostRot[i].y += this->angularVelocity; } //! @bug: When the Wizrobe is defeated, it is launched into the air by the code above, and the @@ -1173,7 +1173,7 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { void EnWiz_SetupDead(EnWiz* this) { EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DAMAGE, false); - this->rotationalVelocity = 0x2710; + this->angularVelocity = 0x2710; this->action = EN_WIZ_ACTION_DEAD; this->timer = 0; this->actionFunc = EnWiz_Dead; @@ -1186,9 +1186,9 @@ void EnWiz_SetupDead(EnWiz* this) { void EnWiz_Dead(EnWiz* this, PlayState* play) { s32 i; - this->actor.world.rot.y += this->rotationalVelocity; - Math_SmoothStepToS(&this->rotationalVelocity, 0, 0xA, 0xBB8, 0x14); - if (this->rotationalVelocity < 0x1E) { + this->actor.world.rot.y += this->angularVelocity; + Math_SmoothStepToS(&this->angularVelocity, 0, 0xA, 0xBB8, 0x14); + if (this->angularVelocity < 0x1E) { Math_SmoothStepToS(&this->alpha, 0, 10, 30, 20); for (i = 0; i < this->platformCount; i++) { Math_SmoothStepToS(&this->ghostAlpha[i], 0, 10, 30, 20); diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index 80c8be208..c0f1c7cfb 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -50,7 +50,7 @@ typedef struct EnWiz { /* 0x3BA */ s16 hasActiveProjectile; /* 0x3BC */ s16 hasRunToEveryPlatform; // used for the second phase cutscene to make sure the Wizrobe visits every platform /* 0x3BE */ s16 unk_3BE; // unused, inferred from surrounding members - /* 0x3C0 */ s16 rotationalVelocity; + /* 0x3C0 */ s16 angularVelocity; /* 0x3C2 */ s16 alpha; /* 0x3C4 */ s16 platformLightAlpha; /* 0x3C6 */ s16 targetPlatformLightAlpha; diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 73cefa0f2..70a4e7022 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -99,7 +99,7 @@ void ObjTokeidai_SetupClockOrExteriorGear(ObjTokeidai* this) { this->clockMinute = currentClockMinute; this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); - this->minuteRingOrExteriorGearRotationalVelocity = 0x3C; + this->minuteRingOrExteriorGearAngularVelocity = 0x3C; this->minuteRingOrExteriorGearRotationTimer = 0; } @@ -110,9 +110,9 @@ void ObjTokeidai_Clock_Init(ObjTokeidai* this) { currentClockHour = GET_CURRENT_CLOCK_HOUR(this); this->clockHour = currentClockHour; this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); } @@ -294,8 +294,8 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { if (this->minuteRingOrExteriorGearRotationTimer > 8) { // This actually performs the rotation to the next minute // for the minute ring or exterior gear. - this->minuteRingOrExteriorGearRotationalVelocity += 0x3C; - this->minuteRingOrExteriorGearRotation += this->minuteRingOrExteriorGearRotationalVelocity; + this->minuteRingOrExteriorGearAngularVelocity += 0x3C; + this->minuteRingOrExteriorGearRotation += this->minuteRingOrExteriorGearAngularVelocity; } else { // This makes the minute ring or exterior gear wiggle in place for a bit // before rotating to the next position. @@ -314,7 +314,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute))) { this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); this->clockMinute = currentClockMinute; - this->minuteRingOrExteriorGearRotationalVelocity = 0x5A; + this->minuteRingOrExteriorGearAngularVelocity = 0x5A; this->minuteRingOrExteriorGearRotationTimer = 0; } } @@ -347,9 +347,9 @@ void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, PlayState* play) { * tower's clock slide off the tower and spin through the air when the moon crashes. */ void ObjTokeidai_TowerClock_Fall(ObjTokeidai* this, PlayState* play) { - this->actor.shape.rot.x += this->fallingClockFaceRotationalVelocity; - if (this->fallingClockFaceRotationalVelocity > 0xA0) { - this->fallingClockFaceRotationalVelocity -= 5; + this->actor.shape.rot.x += this->fallingClockFaceAngularVelocity; + if (this->fallingClockFaceAngularVelocity > 0xA0) { + this->fallingClockFaceAngularVelocity -= 5; } this->actor.world.pos.z += 4.0f; @@ -377,15 +377,15 @@ void ObjTokeidai_TowerClock_SlideOff(ObjTokeidai* this, PlayState* play) { if (this->aerialClockFaceSpeed < 0x80) { thisx->shape.rot.x = this->slidingClockFaceAngle - 0x4000; - this->fallingClockFaceRotationalVelocity = 0x28; + this->fallingClockFaceAngularVelocity = 0x28; } else { if (thisx->shape.rot.x < -0x1000) { - thisx->shape.rot.x += this->fallingClockFaceRotationalVelocity; - if (this->fallingClockFaceRotationalVelocity < 0x1E0) { - this->fallingClockFaceRotationalVelocity += 0xA; + thisx->shape.rot.x += this->fallingClockFaceAngularVelocity; + if (this->fallingClockFaceAngularVelocity < 0x1E0) { + this->fallingClockFaceAngularVelocity += 0xA; } } else { - thisx->shape.rot.x += this->fallingClockFaceRotationalVelocity; + thisx->shape.rot.x += this->fallingClockFaceAngularVelocity; this->actionFunc = ObjTokeidai_TowerClock_Fall; thisx->terminalVelocity = -7.5f; thisx->gravity = -0.75f; @@ -496,9 +496,9 @@ void ObjTokeidai_TowerOpening_Wait(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* play) { - this->xRotation += this->counterweightRotationalVelocity; + this->xRotation += this->counterweightAngularVelocity; if (this->xRotation < 0x4000) { - this->counterweightRotationalVelocity += this->counterweightRotationalAcceleration; + this->counterweightAngularVelocity += this->counterweightRotationalAcceleration; return; } @@ -522,14 +522,14 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl } this->boundCount++; - if (this->counterweightRotationalVelocity > 0x190) { + if (this->counterweightAngularVelocity > 0x190) { // This condition is met for the first bound, causing the counterweight // to rebound upwards quickly. - this->counterweightRotationalVelocity = -0xC8; - } else if (this->counterweightRotationalVelocity > 0x32) { + this->counterweightAngularVelocity = -0xC8; + } else if (this->counterweightAngularVelocity > 0x32) { // This condition is met for the second bound, causing the counterweight // to rebound upwards slowly. - this->counterweightRotationalVelocity = -(this->counterweightRotationalVelocity >> 1); + this->counterweightAngularVelocity = -(this->counterweightAngularVelocity >> 1); } else { // This condition is met for the third bound, causing the counterweight // to stop moving. @@ -561,7 +561,7 @@ void ObjTokeidai_TowerOpening_FinishRaise(ObjTokeidai* this, PlayState* play) { } this->yTranslation = 3400; this->actionFunc = ObjTokeidai_TowerOpening_DropCounterweight; - this->counterweightRotationalVelocity = 0; + this->counterweightAngularVelocity = 0; this->counterweightRotationalAcceleration = 0xA; this->boundCount = 0; } @@ -604,7 +604,7 @@ void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) { */ void ObjTokeidai_SetupTowerOpening(ObjTokeidai* this) { this->actionFunc = ObjTokeidai_TowerOpening_Start; - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; this->yTranslation = 0; this->xRotation = 0; @@ -641,8 +641,8 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { if (this->clockFaceRotationTimer > 12) { // This actually performs the rotation to the next hour // for the clock face. - this->clockFaceRotationalVelocity += 0xA; - this->clockFaceRotation += this->clockFaceRotationalVelocity; + this->clockFaceAngularVelocity += 0xA; + this->clockFaceRotation += this->clockFaceAngularVelocity; } else { // This makes the clock face wiggle in place for a bit // before rotating to the next position. @@ -660,7 +660,7 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { ((currentClockHour != 12) && (this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour)))) { this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); this->clockHour = currentClockHour; - this->clockFaceRotationalVelocity = 0; + this->clockFaceAngularVelocity = 0; this->clockFaceRotationTimer = 0; } } @@ -669,19 +669,19 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { // just changed), rotate it until it matches the target. if (this->sunMoonPanelRotation != ObjTokeidai_GetTargetSunMoonPanelRotation()) { if (this->clockHour == 6) { - this->sunMoonPanelRotationalVelocity += 0x222; - this->sunMoonPanelRotation += this->sunMoonPanelRotationalVelocity; + this->sunMoonPanelAngularVelocity += 0x222; + this->sunMoonPanelRotation += this->sunMoonPanelAngularVelocity; if (this->sunMoonPanelRotation > 0x10000) { this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; } } if (this->clockHour == 18) { - this->sunMoonPanelRotationalVelocity += 0x222; - this->sunMoonPanelRotation += this->sunMoonPanelRotationalVelocity; + this->sunMoonPanelAngularVelocity += 0x222; + this->sunMoonPanelRotation += this->sunMoonPanelAngularVelocity; if (this->sunMoonPanelRotation > 0x8000) { this->sunMoonPanelRotation = ObjTokeidai_GetTargetSunMoonPanelRotation(); - this->sunMoonPanelRotationalVelocity = 0; + this->sunMoonPanelAngularVelocity = 0; } } } diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h index 43f424ceb..0ccf84425 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h @@ -28,13 +28,13 @@ typedef struct ObjTokeidai { /* 0x144 */ Gfx* opaDList; /* 0x148 */ Gfx* xluDList; /* 0x14C */ s16 minuteRingOrExteriorGearRotation; - /* 0x14E */ s16 minuteRingOrExteriorGearRotationalVelocity; + /* 0x14E */ s16 minuteRingOrExteriorGearAngularVelocity; /* 0x150 */ s16 minuteRingOrExteriorGearRotationTimer; /* 0x152 */ s16 clockFaceRotation; /* 0x154 */ union { - s16 clockFaceRotationalVelocity; + s16 clockFaceAngularVelocity; s16 settleTimer; - s16 counterweightRotationalVelocity; + s16 counterweightAngularVelocity; s16 openingWaitTimer; s16 slidingClockFaceAngle; }; @@ -46,8 +46,8 @@ typedef struct ObjTokeidai { }; /* 0x158 */ s32 sunMoonPanelRotation; /* 0x15C */ union { - s16 sunMoonPanelRotationalVelocity; - s16 fallingClockFaceRotationalVelocity; + s16 sunMoonPanelAngularVelocity; + s16 fallingClockFaceAngularVelocity; }; /* 0x15E */ s16 yTranslation; /* 0x160 */ s16 xRotation; From 0c7b90cf97f26483c8b6a98ae099a295f61e72ab Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Thu, 14 Sep 2023 08:48:57 -0300 Subject: [PATCH 10/74] document object_fish (#1359) * initial commit of object_fish documentation * spaces after offset * separate categories * extra owner * name changes * forgor the .c * format * changed name of funcit * forgor some OutName --- assets/xml/objects/object_fish.xml | 395 ++++++++++++------ .../actors/ovl_En_Fishing/z_en_fishing.c | 39 +- 2 files changed, 294 insertions(+), 140 deletions(-) diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index 07e0e3d23..b4de27c4e 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -1,162 +1,315 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - + + + + + + + + - + + + + + + + + + + + - + + + + + + + + + + + + + - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + - - + + + + + + + + + - - + + + + + + + + + - + + + + + + + + + + + + + - - - + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 33e49d6e5..1f3964998 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -948,8 +948,8 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->bgCheckFlags |= BGCHECKFLAG_PLAYER_800; // Added in MM if ((thisx->params < 115) || (thisx->params == 200)) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, NULL, NULL, 0); - Animation_MorphToLoop(&this->skelAnime, &gFishingFishAnim, 0.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, NULL, NULL, 0); + Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, NULL, NULL, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); @@ -3931,8 +3931,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { SkelAnime_Free(&this->skelAnime, play); if (this->unk_148 == 0) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, 0, 0, 0); - Animation_MorphToLoop(&this->skelAnime, &gFishingFishAnim, 0.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, 0, 0, 0); + Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, 0, 0, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); @@ -4176,32 +4176,33 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } } -s32 EnFishing_FishOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnFishing_BassOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_FISH_LIMB_0D) { + if (limbIndex == FISHING_BASS_LIMB_JAW) { rot->z -= this->unk_168 - 11000; - } else if ((limbIndex == FISHING_FISH_LIMB_02) || (limbIndex == FISHING_FISH_LIMB_03)) { + } else if ((limbIndex == FISHING_BASS_LIMB_MIDDLE_SEGMENT_ROOT) || + (limbIndex == FISHING_BASS_LIMB_BACK_SEGMENT_ROOT)) { rot->y += this->unk_164; - } else if (limbIndex == FISHING_FISH_LIMB_04) { + } else if (limbIndex == FISHING_BASS_LIMB_END_ROOT) { rot->y += this->unk_16E; - } else if (limbIndex == FISHING_FISH_LIMB_0E) { + } else if (limbIndex == FISHING_BASS_LIMB_RIGHT_PECTORAL_FIN) { rot->y -= this->unk_16A; - } else if (limbIndex == FISHING_FISH_LIMB_0F) { + } else if (limbIndex == FISHING_BASS_LIMB_LEFT_PECTORAL_FIN) { rot->y += this->unk_16A; - } else if (limbIndex == FISHING_FISH_LIMB_08) { + } else if (limbIndex == FISHING_BASS_LIMB_TOP_REAR_FIN) { rot->y += this->unk_16C; - } else if (limbIndex == FISHING_FISH_LIMB_09) { + } else if (limbIndex == FISHING_BASS_LIMB_BOTTOM_REAR_FIN) { rot->y -= this->unk_16C; } return false; } -void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { +void EnFishing_BassPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_FISH_LIMB_0D) { + if (limbIndex == FISHING_BASS_LIMB_JAW) { Matrix_MultVec3f(&sFishMouthOffset, &this->fishMouthPos); } } @@ -4209,11 +4210,11 @@ void EnFishing_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec s32 EnFishing_LoachOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnFishing* this = THIS; - if (limbIndex == FISHING_LOACH_LIMB_03) { + if (limbIndex == FISHING_LOACH_LIMB_MIDDLE_SEGMENT) { rot->y += this->unk_1C4[0]; - } else if (limbIndex == FISHING_LOACH_LIMB_04) { + } else if (limbIndex == FISHING_LOACH_LIMB_LOWER_BACK_FIN) { rot->y += this->unk_1C4[1]; - } else if (limbIndex == FISHING_LOACH_LIMB_05) { + } else if (limbIndex == FISHING_LOACH_LIMB_TAIL_FIN) { rot->y += this->unk_1C4[2]; } @@ -4224,7 +4225,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve static Vec3f sLoachMouthOffset = { 500.0f, 500.0f, 0.0f }; EnFishing* this = THIS; - if (limbIndex == FISHING_LOACH_LIMB_0B) { + if (limbIndex == FISHING_LOACH_LIMB_JAW) { Matrix_MultVec3f(&sLoachMouthOffset, &this->fishMouthPos); } } @@ -4245,7 +4246,7 @@ void EnFishing_DrawFish(Actor* thisx, PlayState* play) { Matrix_Translate(0.0f, 0.0f, this->unk_164 * 10.0f * 0.01f, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, - EnFishing_FishOverrideLimbDraw, EnFishing_FishPostLimbDraw, &this->actor); + EnFishing_BassOverrideLimbDraw, EnFishing_BassPostLimbDraw, &this->actor); } else { Matrix_Translate(0.0f, 0.0f, 3000.0f, MTXMODE_APPLY); Matrix_RotateYF(BINANG_TO_RAD(this->unk_164), MTXMODE_APPLY); From 548ea08838f11a0f3c7f29e014eede6ef784ab7a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 14 Sep 2023 15:33:55 -0700 Subject: [PATCH 11/74] Provide names (and original names) for all Termina Field cutscenes (#1373) * Provide names (and original names) for all Termina Field cutscenes * Respond to Anghelo's review * Respond to isghj's review --- .../xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml b/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml index 3cf73a255..9c1a84c8c 100644 --- a/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml +++ b/assets/xml/scenes/Z2_00KEIKOKU/Z2_00KEIKOKU.xml @@ -2,6 +2,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 99dd8a41f969ace0b9defc1c9cdf0f44f67d53be Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Thu, 14 Sep 2023 19:24:39 -0700 Subject: [PATCH 12/74] Docs namefixer (#1378) --- docs/tutorial/advanced_control_flow.md | 6 +++--- docs/tutorial/documenting.md | 4 ++-- docs/tutorial/introduction.md | 4 ++-- docs/tutorial/other_functions.md | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index 0217cdde2..83d55f7ad 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -94,7 +94,7 @@ void func_80952734(EnMs* this, PlayState* play) { if (this->actor.xzDistToPlayer < 90.0f) { if (ABS_ALT(temp_v1) < 0x2000) { - func_800B8614(&this->actor, play, 90.0f); + Actor_OfferTalk(&this->actor, play, 90.0f); } } } @@ -104,7 +104,7 @@ void func_80952734(EnMs* this, PlayState* play) { void func_809529AC(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); this->actionFunc = func_80952A1C; } else { Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel); @@ -116,7 +116,7 @@ void func_80952A1C(EnMs* this, PlayState* play) { Message_ContinueTextbox(play, 0x936U); this->actionFunc = func_809527F8; } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, -1); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, -1); } } diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index 11d8b3546..9013ab010 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -137,7 +137,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; } else if (Flags_GetSwitch(play, this->actor.params)) { @@ -473,7 +473,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?" } else if (Flags_GetSwitch(play, this->actor.params)) { diff --git a/docs/tutorial/introduction.md b/docs/tutorial/introduction.md index aba8beede..58a74fbb4 100644 --- a/docs/tutorial/introduction.md +++ b/docs/tutorial/introduction.md @@ -16,7 +16,7 @@ glabel func_809529AC /* 0003B0 809529D0 8C860098 */ lw $a2, 0x98($a0) /* 0003B4 809529D4 8C87009C */ lw $a3, 0x9c($a0) /* 0003B8 809529D8 AFA40020 */ sw $a0, 0x20($sp) -/* 0003BC 809529DC 0C02E140 */ jal func_800B8500 +/* 0003BC 809529DC 0C02E140 */ jal Actor_OfferTalkExchange /* 0003C0 809529E0 AFA00010 */ sw $zero, 0x10($sp) /* 0003C4 809529E4 8FA40020 */ lw $a0, 0x20($sp) /* 0003C8 809529E8 3C0E8095 */ lui $t6, %hi(func_80952A1C) @@ -43,7 +43,7 @@ and turn it into compilable C code: void func_809529AC(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); + Actor_OfferTalkExchange(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0); this->actionFunc = func_80952A1C; } else { Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel); diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md index f73902ca5..dd2de5538 100644 --- a/docs/tutorial/other_functions.md +++ b/docs/tutorial/other_functions.md @@ -135,7 +135,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { return; } if (Actor_IsFacingPlayer((Actor *) this, 0x2000) != 0) { - func_800B8614((Actor *) this, play, 60.0f); + Actor_OfferTalk((Actor *) this, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; return; @@ -190,7 +190,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { return; } if (Actor_IsFacingPlayer(&this->actor, 0x2000) != 0) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; return; @@ -226,7 +226,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { func_80C10290(this); } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { - func_800B8614(&this->actor, play, 60.0f); + Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == 2) { this->actor.textId = 0x2367; } else if (Flags_GetSwitch(play, this->actor.params)) { From 57501ed415982ee8cf9788a8b22575c17d718c64 Mon Sep 17 00:00:00 2001 From: AbdooOwd <90041629+AbdooOwd@users.noreply.github.com> Date: Fri, 15 Sep 2023 04:39:21 +0100 Subject: [PATCH 13/74] `z_obj_tokei_tobira` OK undocumented (#1336) * Fixes * `z_obj_tokei_tobira` OK undocumented * Revert "Fixes" This reverts commit b3358254df5e659c0d89b8e3c86ebc2e07fa0196. * Fixes * Data imported + Code Optimization * Formatting * cleaning + fixes * formatting * More fixes * Last fixes * OK undocumented * More fixes * Fixes * Formatting again * I hate Jenkins * Removed a comment * Review apply * Formatting * Applied reviews * Review Applied * Update src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h Co-authored-by: Derek Hensley --------- Co-authored-by: Derek Hensley --- spec | 3 +- .../ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c | 150 ++++++++++++++++-- .../ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h | 22 ++- tools/disasm/functions.txt | 2 +- 4 files changed, 159 insertions(+), 18 deletions(-) diff --git a/spec b/spec index a05eecaa7..90459b036 100644 --- a/spec +++ b/spec @@ -3098,8 +3098,7 @@ beginseg name "ovl_Obj_Tokei_Tobira" compress include "build/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.o" - include "build/data/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira.data.o" - include "build/data/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Tokei_Tobira/ovl_Obj_Tokei_Tobira_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c index 0c81ec028..85b7e9414 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c @@ -5,6 +5,7 @@ */ #include "z_obj_tokei_tobira.h" +#include "objects/object_tokei_tobira/object_tokei_tobira.h" #define FLAGS 0x00000000 @@ -14,8 +15,8 @@ void ObjTokeiTobira_Init(Actor* thisx, PlayState* play); void ObjTokeiTobira_Destroy(Actor* thisx, PlayState* play); void ObjTokeiTobira_Update(Actor* thisx, PlayState* play); void ObjTokeiTobira_Draw(Actor* thisx, PlayState* play); +void ObjTokeiTobira_StartCutscene(ObjTokeiTobira* this); -#if 0 ActorInit Obj_Tokei_Tobira_InitVars = { ACTOR_OBJ_TOKEI_TOBIRA, ACTORCAT_BG, @@ -28,24 +29,153 @@ ActorInit Obj_Tokei_Tobira_InitVars = { (ActorFunc)ObjTokeiTobira_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80ABD750[] = { +static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -#endif +Vec3f D_80ABD760 = { 0.0f, 0.0f, 80.0f }; +s16 D_80ABD76C[] = { + -0x4000, // OBJTOKEITOBIRA_TYPE_0 + 0x4000, // OBJTOKEITOBIRA_TYPE_1 +}; +CollisionHeader* D_80ABD770[] = { + &object_tokei_tobira_Colheader_0012B0, // OBJTOKEITOBIRA_TYPE_0 + &object_tokei_tobira_Colheader_001590, // OBJTOKEITOBIRA_TYPE_1 +}; +f32 D_80ABD778[] = { + 1.0f, // OBJTOKEITOBIRA_TYPE_0 + -1.0f, // OBJTOKEITOBIRA_TYPE_1 +}; +Gfx* D_80ABD780[] = { + object_tokei_tobira_DL_001108, // OBJTOKEITOBIRA_TYPE_0 + object_tokei_tobira_DL_0013E8, // OBJTOKEITOBIRA_TYPE_1 +}; -extern InitChainEntry D_80ABD750[]; +void ObjTokeiTobira_Init(Actor* thisx, PlayState* play) { + ObjTokeiTobira* this = THIS; + s32 pad; + s32 type = OBJTOKEITOBIRA_GET_TYPE(&this->dyna.actor); + Vec3f posOffset; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Init.s") + Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); + DynaPolyActor_LoadMesh(play, &this->dyna, D_80ABD770[type]); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Destroy.s") + if (type == OBJTOKEITOBIRA_TYPE_0) { + Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_OBJ_TOKEI_TOBIRA, + this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, + this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z, + OBJTOKEITOBIRA_PARAMS(OBJTOKEITOBIRA_TYPE_1)); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/func_80ABD3B0.s") + Matrix_RotateYS(D_80ABD76C[type] + this->dyna.actor.shape.rot.y, MTXMODE_NEW); + Matrix_MultVec3f(&D_80ABD760, &posOffset); + this->dyna.actor.world.pos.x += posOffset.x; + this->dyna.actor.world.pos.y += posOffset.y; + this->dyna.actor.world.pos.z += posOffset.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Update.s") + if ((type == OBJTOKEITOBIRA_TYPE_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_04) && + (play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) && (this->dyna.actor.csId > CS_ID_NONE)) { + this->dyna.actor.flags |= ACTOR_FLAG_10; + this->actionFunc = ObjTokeiTobira_StartCutscene; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Tokei_Tobira/ObjTokeiTobira_Draw.s") +void ObjTokeiTobira_Destroy(Actor* thisx, PlayState* play) { + ObjTokeiTobira* this = THIS; + + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} + +void ObjTokeiTobira_StartCutscene(ObjTokeiTobira* this) { + if (CutsceneManager_IsNext(this->dyna.actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); + SET_WEEKEVENTREG(WEEKEVENTREG_59_04); + this->actionFunc = NULL; + this->dyna.actor.flags &= ~ACTOR_FLAG_10; + } else { + CutsceneManager_Queue(this->dyna.actor.csId); + } +} + +void ObjTokeiTobira_Update(Actor* thisx, PlayState* play) { + s32 pad1; + ObjTokeiTobira* this = THIS; + Player* player = GET_PLAYER(play); + s32 pad2; + s32 type = OBJTOKEITOBIRA_GET_TYPE(&this->dyna.actor); + f32 sp48 = D_80ABD778[type]; + s32 pad3; + + if (player->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) { + if (DynaPoly_GetActor(&play->colCtx, player->actor.wallBgId) == &this->dyna) { + f32 sp40; + Vec3f sp34; + + Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp34, &player->actor.world.pos); + sp40 = sp34.x * sp48; + + if (sp40 > 20.0f) { + if (sp34.z > 0.0f) { + this->unk160 += (sp40 - 20.0f) * sp48 * (16.0f / 3.0f); + this->unk168 = 1; + if (this->unk16C <= 0) { + Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_WOOD_GATE_OPEN); + this->unk16C = 80; + } + } + + if (sp40 > 48.0f) { + ObjTokeiTobira* tobira; + + if (type == OBJTOKEITOBIRA_TYPE_0) { + tobira = (ObjTokeiTobira*)this->dyna.actor.child; + } else { + tobira = (ObjTokeiTobira*)this->dyna.actor.parent; + } + + if (tobira != NULL) { + tobira->unk168 = 1; + } + } + } + } + } else if (this->unk168 == 1) { + Vec3f sp24; + + Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp24, &player->actor.world.pos); + + if ((sp24.z > 0.0f) && (sp24.z < 30.0f)) { + this->unk168 = 1; + this->unk160 += sp48 * 290.0f; + } + } + + if (this->unk16C > 0) { + this->unk16C--; + } + + this->unk168 = 0; + this->unk160 *= 0.87f; + this->unk164 += this->unk160; + if ((this->unk164 * sp48) > 14336.0f) { + this->unk160 *= 0.1f; + this->unk164 = 14336.0f * sp48; + } else if ((this->unk164 * sp48) < -1000.0f) { + this->unk160 *= 0.1f; + this->unk164 = -1000.0f * sp48; + } + + this->dyna.actor.shape.rot.y = (s32)this->unk164 + this->dyna.actor.home.rot.y; + + if (this->actionFunc != NULL) { + this->actionFunc(this); + } +} + +void ObjTokeiTobira_Draw(Actor* thisx, PlayState* play) { + Gfx_DrawDListOpa(play, D_80ABD780[OBJTOKEITOBIRA_GET_TYPE(thisx)]); +} diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h index 8f9983995..45264df75 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h +++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h @@ -3,15 +3,27 @@ #include "global.h" +#define OBJTOKEITOBIRA_GET_TYPE(thisx) ((thisx)->params & 1) +#define OBJTOKEITOBIRA_PARAMS(type) (type) + + struct ObjTokeiTobira; -typedef void (*ObjTokeiTobiraActionFunc)(struct ObjTokeiTobira*, PlayState*); +typedef void (*ObjTokeiTobiraActionFunc)(struct ObjTokeiTobira*); + + +typedef enum ObjTokeiTobiraType { + /* 0 */ OBJTOKEITOBIRA_TYPE_0, + /* 1 */ OBJTOKEITOBIRA_TYPE_1 +} ObjTokeiTobiraType; typedef struct ObjTokeiTobira { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x18]; + /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjTokeiTobiraActionFunc actionFunc; - /* 0x160 */ char unk_160[0x10]; -} ObjTokeiTobira; // size = 0x170 + /* 0x160 */ f32 unk160; + /* 0x164 */ f32 unk164; + /* 0x168 */ s32 unk168; + /* 0x16C */ s32 unk16C; +} ObjTokeiTobira; // size = 0x170 #endif // Z_OBJ_TOKEI_TOBIRA_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e146d804d..e3c54b894 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -11830,7 +11830,7 @@ 0x80ABCF0C:("BgHakuginBombwall_Draw",), 0x80ABD1D0:("ObjTokeiTobira_Init",), 0x80ABD37C:("ObjTokeiTobira_Destroy",), - 0x80ABD3B0:("func_80ABD3B0",), + 0x80ABD3B0:("ObjTokeiTobira_StartCutscene",), 0x80ABD424:("ObjTokeiTobira_Update",), 0x80ABD6F0:("ObjTokeiTobira_Draw",), 0x80ABD830:("BgHakuginElvpole_Init",), From 626f09266d264dc994e51d8ce9e57b8da80704d4 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 15 Sep 2023 05:41:51 -0700 Subject: [PATCH 14/74] Flash Headers (#1367) * Move flash stuff * format * Cleanup * format * bss names * Small cleanup * osFlashGetAddr * uintptr_t --- include/PR/os_flash.h | 29 +++++++ include/PR/os_internal_flash.h | 27 ++++++ include/PR/os_pi.h | 6 ++ include/sys_flashrom.h | 20 +++++ include/z64.h | 61 ------------- src/code/sys_flashrom.c | 16 ++-- src/libultra/flash/osFlash.c | 152 +++++++++++++++------------------ 7 files changed, 160 insertions(+), 151 deletions(-) create mode 100644 include/PR/os_internal_flash.h create mode 100644 include/sys_flashrom.h diff --git a/include/PR/os_flash.h b/include/PR/os_flash.h index 36e728c5a..9388a0a98 100644 --- a/include/PR/os_flash.h +++ b/include/PR/os_flash.h @@ -4,6 +4,35 @@ #include "ultratypes.h" #include "os_pi.h" +#define FLASH_START_ADDR 0x08000000 // FRAM Base Address in Cart Memory + +#define FLASH_SIZE 0x20000 + +#define FLASH_LATENCY 0x5 +#define FLASH_PULSE 0x0C +#define FLASH_PAGE_SIZE 0xF +#define FLASH_REL_DURATION 0x2 +#define DEVICE_TYPE_FLASH 8 + +/* OLD_FLASH is MX_PROTO_A, MX_A and MX_C */ +#define OLD_FLASH 0 +/* NEW_FLASH is MX_B_AND_D and MATSUSHITA flash */ +#define NEW_FLASH 1 + +#define FLASH_STATUS_ERASE_BUSY 2 +#define FLASH_STATUS_ERASE_OK 0 +#define FLASH_STATUS_ERASE_ERROR -1 + +#define FLASH_STATUS_WRITE_BUSY 1 +#define FLASH_STATUS_WRITE_OK 0 +#define FLASH_STATUS_WRITE_ERROR -1 + +#define FLASH_VERSION_MX_PROTO_A 0x00C20000 +#define FLASH_VERSION_MX_A 0x00C20001 +#define FLASH_VERSION_MX_C 0x00C2001E +#define FLASH_VERSION_MX_B_AND_D 0x00C2001D +#define FLASH_VERSION_MEI 0x003200F1 + OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); OSPiHandle* osFlashInit(void); diff --git a/include/PR/os_internal_flash.h b/include/PR/os_internal_flash.h new file mode 100644 index 000000000..ef227df99 --- /dev/null +++ b/include/PR/os_internal_flash.h @@ -0,0 +1,27 @@ +#ifndef PR_OS_INTERNAL_FLASH_H +#define PR_OS_INTERNAL_FLASH_H + +#include "os_flash.h" + +#define FLASH_BLOCK_SIZE 128 + +#define FLASH_CMD_REG 0x10000 // Located at 0x08010000 on the Cart + +/* set whole chip erase mode */ +#define FLASH_CMD_CHIP_ERASE 0x3C000000 +/* set sector erase mode */ +#define FLASH_CMD_SECTOR_ERASE 0x4B000000 +/* do erasure */ +#define FLASH_CMD_EXECUTE_ERASE 0x78000000 +/* program selected page */ +#define FLASH_CMD_PROGRAM_PAGE 0xA5000000 +/* set page program mode */ +#define FLASH_CMD_PAGE_PROGRAM 0xB4000000 +/* set status mode */ +#define FLASH_CMD_STATUS 0xD2000000 +/* set silicon id mode */ +#define FLASH_CMD_ID 0xE1000000 +/* set read mode */ +#define FLASH_CMD_READ_ARRAY 0xF0000000 + +#endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 2e67ca840..134b43a93 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -93,6 +93,12 @@ typedef struct { #define OS_MESG_PRI_NORMAL 0 #define OS_MESG_PRI_HIGH 1 +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); diff --git a/include/sys_flashrom.h b/include/sys_flashrom.h new file mode 100644 index 000000000..5fc2821d6 --- /dev/null +++ b/include/sys_flashrom.h @@ -0,0 +1,20 @@ +#ifndef SYS_FLASHROM_H +#define SYS_FLASHROM_H + +#include "ultra64.h" + +typedef struct { + /* 0x00 */ s32 requestType; + /* 0x04 */ OSMesg response; + /* 0x08 */ void* addr; + /* 0x0C */ s32 pageNum; + /* 0x10 */ s32 pageCount; + /* 0x14 */ OSMesgQueue messageQueue; +} FlashromRequest; // size = 0x2C + +#define FLASHROM_REQUEST_WRITE 1 +#define FLASHROM_REQUEST_READ 2 + +#define FLASH_TYPE_MAGIC 0x11118001 + +#endif diff --git a/include/z64.h b/include/z64.h index 69e7e01f2..ca9748509 100644 --- a/include/z64.h +++ b/include/z64.h @@ -63,15 +63,6 @@ #include "z64view.h" #include "regs.h" -typedef struct { - /* 0x00 */ s32 requestType; - /* 0x04 */ OSMesg response; - /* 0x08 */ void* addr; - /* 0x0C */ s32 pageNum; - /* 0x10 */ s32 pageCount; - /* 0x14 */ OSMesgQueue messageQueue; -} FlashromRequest; // size = 0x2C - typedef struct { /* 0x000 */ View view; /* 0x168 */ u8* iconItemSegment; @@ -393,56 +384,4 @@ typedef struct { /* 0x10 */ Color_RGBA8_u32 envColor; } Struct_80140E80; // size = 0x14 -// TODO: Dedicated Header? -#define FRAM_BASE_ADDRESS 0x08000000 // FRAM Base Address in Cart Memory -#define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory -#define FRAM_COMMAND_REGISTER 0x10000 // Located at 0x08010000 on the Cart - -#define FLASH_VERSION_MX_PROTO_A 0x00C20000 -#define FLASH_VERSION_MX_A 0x00C20001 -#define FLASH_VERSION_MX_C 0x00C2001E -#define FLASH_VERSION_MX_B_AND_D 0x00C2001D -#define FLASH_VERSION_MEI 0x003200F1 - -#define FLASH_TYPE_MAGIC 0x11118001 - -#define FLASH_PAGE_SIZE 128 - -#define FLASHROM_REQUEST_WRITE 1 -#define FLASHROM_REQUEST_READ 2 - -typedef enum FramCommand { - /* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS - Initializes fram to 0xFF in FRAM_MODE_ERASE - Writes Contents in FLASHRAM_MODE_WRITE - After execution, sets FRAM_MODE to FRAM_MODE_NOP */ - FRAM_COMMAND_EXECUTE = 0xD2000000, - /* flashram->erase_offset = (command & 0xFFFF) * 128; */ - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET = 0x4B000000, - /* flashram->mode = FLASHRAM_MODE_ERASE; - flashram->status = 0x1111800800C20000LL; */ - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS = 0x78000000, - /* flashram->erase_offset = (command & 0xFFFF) * 128; - flashram->status = 0x1111800400C20000LL; */ - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET_AND_STATUS = 0xA5000000, - /* flashram->mode = FLASHRAM_MODE_WRITE; */ - FRAM_COMMAND_SET_MODE_WRITE = 0xB4000000, - /* flashram->mode = FLASHRAM_MODE_STATUS; - flashram->status = 0x1111800100C20000LL; */ - FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS = 0xE1000000, - /* flashram->mode = FLASHRAM_MODE_READ; - flashram->status = 0x11118004F0000000LL; */ - FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, - /* unk */ - FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -} FramCommand; - -typedef enum FramMode { - /* 0 */ FRAM_MODE_NOP, - /* 1 */ FRAM_MODE_ERASE, - /* 2 */ FRAM_MODE_WRITE, - /* 3 */ FRAM_MODE_READ, - /* 4 */ FRAM_MODE_STATUS -} FramMode; - #endif diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index 0f4e9f748..6666a26db 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -5,6 +5,8 @@ #include "stackcheck.h" #include "system_malloc.h" #include "z64thread.h" +#include "sys_flashrom.h" +#include "PR/os_internal_flash.h" OSMesgQueue sFlashromMesgQueue; OSMesg sFlashromMesg[1]; @@ -81,7 +83,7 @@ s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE); + osInvalDCache(addr, pageCount * FLASH_BLOCK_SIZE); osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue); osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); return 0; @@ -103,12 +105,12 @@ s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) { return -1; } // Ensure the page is always aligned to a sector boundary. - if ((pageNum % FLASH_PAGE_SIZE) != 0) { + if ((pageNum % FLASH_BLOCK_SIZE) != 0) { Fault_AddHungupAndCrash("../sys_flashrom.c", 275); } - osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE); for (i = 0; i < pageCount; i++) { - osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue); + osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_BLOCK_SIZE, &sFlashromMesgQueue); osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); result = osFlashWriteArray(i + pageNum); if (result != 0) { @@ -125,7 +127,7 @@ s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE); i = 0; failRetry: result = SysFlashrom_EraseSector(pageNum); @@ -153,7 +155,7 @@ s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) { u32 size; u32 i; - for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) { + for (i = 0; i < pageCount * FLASH_BLOCK_SIZE; i += 4) { if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) { return false; } @@ -169,7 +171,7 @@ s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) { if (!SysFlashrom_IsInit()) { return -1; } - size = pageCount * FLASH_PAGE_SIZE; + size = pageCount * FLASH_BLOCK_SIZE; data = SystemArena_Malloc(size); if (data == NULL) { ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 139c1526d..6a744a95e 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,41 +1,38 @@ #include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" +#include "PR/os_internal_flash.h" -s32 framDeviceInfo[4]; -OSIoMesg framDeviceInfoQuery; +u32 __osFlashID[4]; +OSIoMesg __osFlashMsg; OSMesgQueue __osFlashMessageQ; OSPiHandle __osFlashHandler; -OSMesg __osFlashMsgBuf; +OSMesg __osFlashMsgBuf[1]; s32 __osFlashVersion; -UNK_TYPE1 D_801FD0FC[0x14]; +static s32 sBssPad[5]; -typedef enum { - /* 0 */ FLASH_OLD, - /* 1 */ FLASH_NEW -} FlashVersion; - -u32 osFlashGetAddr(u32 pageNum) { - s32 addr = (__osFlashVersion == FLASH_OLD) ? pageNum << 6 : pageNum << 7; +uintptr_t osFlashGetAddr(u32 pageNum) { + // Account for hadware bug in old flash where the address bits are shifted 1-off where they should be + uintptr_t addr = (__osFlashVersion == OLD_FLASH) ? pageNum * (FLASH_BLOCK_SIZE >> 1) : pageNum * FLASH_BLOCK_SIZE; return addr; } OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start) { - __osFlashHandler.baseAddress = RDRAM_UNCACHED | start; + __osFlashHandler.baseAddress = PHYS_TO_K1(start); __osFlashHandler.type++; __osFlashHandler.latency = latency; __osFlashHandler.pulse = pulse; __osFlashHandler.pageSize = pageSize; __osFlashHandler.relDuration = relDuration; - __osFlashHandler.domain = 1; + __osFlashHandler.domain = PI_DOMAIN2; return &__osFlashHandler; } void osFlashChange(u32 flashNum) { - __osFlashHandler.baseAddress = RDRAM_UNCACHED | (FRAM_STATUS_REGISTER + (flashNum << 17)); - __osFlashHandler.type = 8 + flashNum; + __osFlashHandler.baseAddress = PHYS_TO_K1(FLASH_START_ADDR + (flashNum * FLASH_SIZE)); + __osFlashHandler.type = DEVICE_TYPE_FLASH + flashNum; return; } @@ -44,29 +41,31 @@ OSPiHandle* osFlashInit(void) { u32 flashType; u32 flashVendor; - osCreateMesgQueue(&__osFlashMessageQ, &__osFlashMsgBuf, 1); + osCreateMesgQueue(&__osFlashMessageQ, __osFlashMsgBuf, ARRAY_COUNT(__osFlashMsgBuf)); - if (__osFlashHandler.baseAddress == (RDRAM_UNCACHED | FRAM_BASE_ADDRESS)) { + if (__osFlashHandler.baseAddress == PHYS_TO_K1(FLASH_START_ADDR)) { return &__osFlashHandler; } - __osFlashHandler.type = 8; - __osFlashHandler.baseAddress = (RDRAM_UNCACHED | FRAM_BASE_ADDRESS); - __osFlashHandler.latency = 5; - __osFlashHandler.pulse = 12; - __osFlashHandler.pageSize = 15; - __osFlashHandler.relDuration = 2; - __osFlashHandler.domain = 1; + __osFlashHandler.type = DEVICE_TYPE_FLASH; + __osFlashHandler.baseAddress = PHYS_TO_K1(FLASH_START_ADDR); + __osFlashHandler.latency = FLASH_LATENCY; + __osFlashHandler.pulse = FLASH_PULSE; + __osFlashHandler.pageSize = FLASH_PAGE_SIZE; + __osFlashHandler.relDuration = FLASH_REL_DURATION; + __osFlashHandler.domain = PI_DOMAIN2; __osFlashHandler.speed = 0; + bzero(&__osFlashHandler.transferInfo, sizeof(__OSTranxInfo)); osEPiLinkHandle(&__osFlashHandler); osFlashReadId(&flashType, &flashVendor); - if (flashVendor == 0x00C2001E || flashVendor == 0x00C20001 || flashVendor == 0x00C20000) { - __osFlashVersion = FLASH_OLD; + if ((flashVendor == FLASH_VERSION_MX_C) || (flashVendor == FLASH_VERSION_MX_A) || + (flashVendor == FLASH_VERSION_MX_PROTO_A)) { + __osFlashVersion = OLD_FLASH; } else { - __osFlashVersion = FLASH_NEW; + __osFlashVersion = NEW_FLASH; } return &__osFlashHandler; @@ -75,12 +74,12 @@ OSPiHandle* osFlashInit(void) { void osFlashReadStatus(u8* flashStatus) { u32 outFlashStatus; - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); // read status using IO osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &outFlashStatus); // why twice ? - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &outFlashStatus); *flashStatus = outFlashStatus & 0xFF; @@ -95,29 +94,28 @@ void osFlashReadId(u32* flashType, u32* flashVendor) { osFlashReadStatus(&flashStatus); // select silicon id read mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_ID); // read silicon id using DMA - framDeviceInfoQuery.hdr.pri = 0; - framDeviceInfoQuery.hdr.retQueue = &__osFlashMessageQ; - framDeviceInfoQuery.dramAddr = framDeviceInfo; - framDeviceInfoQuery.devAddr = 0; - framDeviceInfoQuery.size = 8; + __osFlashMsg.hdr.pri = OS_MESG_PRI_NORMAL; + __osFlashMsg.hdr.retQueue = &__osFlashMessageQ; + __osFlashMsg.dramAddr = __osFlashID; + __osFlashMsg.devAddr = 0; + __osFlashMsg.size = 2 * sizeof(u32); - osInvalDCache(framDeviceInfo, sizeof(framDeviceInfo)); - osEPiStartDma(&__osFlashHandler, &framDeviceInfoQuery, OS_READ); + osInvalDCache(__osFlashID, sizeof(__osFlashID)); + osEPiStartDma(&__osFlashHandler, &__osFlashMsg, OS_READ); osRecvMesg(&__osFlashMessageQ, NULL, OS_MESG_BLOCK); - *flashType = framDeviceInfo[0]; - *flashVendor = framDeviceInfo[1]; + *flashType = __osFlashID[0]; + *flashVendor = __osFlashID[1]; return; } void osFlashClearStatus(void) { // select status mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_EXECUTE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS); // clear status osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress, 0); @@ -131,10 +129,8 @@ s32 osFlashAllErase(void) { OSMesg msg; // start chip erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_UNK_ERASE_OPERATION); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_CHIP_ERASE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); // wait for completion by polling erase-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -142,25 +138,23 @@ s32 osFlashAllErase(void) { osSetTimer(&timer, OS_USEC_TO_CYCLES(15000), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 2) == 2); + } while ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY); // check erase operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } void osFlashAllEraseThrough(void) { // start chip erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_UNK_ERASE_OPERATION); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_CHIP_ERASE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); } s32 osFlashCheckEraseEnd(void) { @@ -168,8 +162,8 @@ s32 osFlashCheckEraseEnd(void) { // check if erase operation is completed osFlashReadStatus(&status); - if ((status & 0x02) == 0x02) { - return 2; // busy + if ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY) { + return FLASH_STATUS_ERASE_BUSY; } else { // check erase operation status, clear status osFlashReadStatus(&status); @@ -177,9 +171,9 @@ s32 osFlashCheckEraseEnd(void) { osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } @@ -190,10 +184,8 @@ s32 osFlashSectorErase(u32 pageNum) { OSMesg msg; // start sector erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET | pageNum); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_SECTOR_ERASE | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); // wait for completion by polling erase-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -201,39 +193,37 @@ s32 osFlashSectorErase(u32 pageNum) { osSetTimer(&timer, OS_USEC_TO_CYCLES(12500), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 2) == 2); + } while ((status & FLASH_STATUS_ERASE_BUSY) == FLASH_STATUS_ERASE_BUSY); // check erase operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x08) || ((status & 0xFF) == 0x48) || ((status & 0x08) == 0x08)) { - return 0; + return FLASH_STATUS_ERASE_OK; } else { - return -1; + return FLASH_STATUS_ERASE_ERROR; } } void osFlashSectorEraseThrough(u32 pageNum) { // start sector erase operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET | pageNum); - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_ERASE_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_SECTOR_ERASE | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_EXECUTE_ERASE); } s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue* mq) { s32 ret; // select load page mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, FRAM_COMMAND_SET_MODE_WRITE); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM); // DMA 128-byte page mb->hdr.pri = priority; mb->hdr.retQueue = mq; mb->dramAddr = dramAddr; mb->devAddr = 0; - mb->size = 0x80; + mb->size = FLASH_BLOCK_SIZE; ret = osEPiStartDma(&__osFlashHandler, mb, OS_WRITE); @@ -247,14 +237,12 @@ s32 osFlashWriteArray(u32 pageNum) { OSMesg msg; // only needed for new flash ? - if (__osFlashVersion == FLASH_NEW) { - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_WRITE); + if (__osFlashVersion == NEW_FLASH) { + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PAGE_PROGRAM); } // start program page operation - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_ERASE_SECTOR_OFFSET_AND_STATUS | pageNum); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_PROGRAM_PAGE | pageNum); // wait for completion by polling write-busy flag osCreateMesgQueue(&mq, &msg, 1); @@ -262,16 +250,16 @@ s32 osFlashWriteArray(u32 pageNum) { osSetTimer(&timer, OS_USEC_TO_CYCLES(200), 0, &mq, &msg); osRecvMesg(&mq, &msg, OS_MESG_BLOCK); osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); - } while ((status & 0x01) == 0x01); + } while ((status & FLASH_STATUS_WRITE_BUSY) == FLASH_STATUS_WRITE_BUSY); // check program operation status, clear status osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status); osFlashClearStatus(); if (((status & 0xFF) == 0x04) || ((status & 0xFF) == 0x44) || ((status & 0x04) == 0x04)) { - return 0; + return FLASH_STATUS_WRITE_OK; } else { - return -1; + return FLASH_STATUS_WRITE_ERROR; } } @@ -282,8 +270,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 u32 pages; // select read array mode - osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FRAM_COMMAND_REGISTER, - FRAM_COMMAND_SET_MODE_READ_AND_STATUS); + osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_READ_ARRAY); // dummy read to initiate "fast-page" reads ? osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &dummy); @@ -296,10 +283,9 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 last_page = pageNum + pageCount - 1; if ((last_page & 0xF00) != (pageNum & 0xF00)) { - pages = 256 - (pageNum & 0xFF); pageCount -= pages; - mb->size = pages << 7; + mb->size = pages * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); osEPiStartDma(&__osFlashHandler, mb, OS_READ); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -310,7 +296,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 while (pageCount > 256) { pages = 256; pageCount -= 256; - mb->size = pages << 7; + mb->size = pages * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); osEPiStartDma(&__osFlashHandler, mb, OS_READ); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -318,7 +304,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u3 mb->dramAddr = (void*)((uintptr_t)mb->dramAddr + mb->size); } - mb->size = pageCount << 7; + mb->size = pageCount * FLASH_BLOCK_SIZE; mb->devAddr = osFlashGetAddr(pageNum); ret = osEPiStartDma(&__osFlashHandler, mb, OS_READ); From 4b30f1a6549c99eff5344a815b12f54e69d689e9 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Fri, 15 Sep 2023 11:02:27 -0300 Subject: [PATCH 15/74] Move libultra variables to their respective headers (#1369) * internal_rsp; move size_t and NULL to ultratypes.h * guint.h * Move system variables to os_system.h * controller, pi and vi * osint.h * piint.h * siint, ucode, viint, voiceinternal * Remove remaining variables from variables.h * format * final renames * bss * review * review --- include/PR/controller.h | 7 +- include/PR/guint.h | 23 ++++ include/PR/os_internal.h | 3 +- include/PR/os_internal_rsp.h | 2 - include/PR/os_pi.h | 5 +- include/PR/os_system.h | 27 ++++ include/PR/os_vi.h | 11 +- include/PR/osint.h | 15 +++ include/PR/piint.h | 10 +- include/PR/siint.h | 1 + include/PR/ucode.h | 5 - include/PR/ultratypes.h | 6 + include/PR/viint.h | 2 + include/PR/voice_internal.h | 8 ++ include/fault.h | 4 +- include/libc/math.h | 15 --- include/libc/stddef.h | 6 - include/macros.h | 2 - include/ultra64.h | 1 + include/variables.h | 124 ------------------ include/z64actor.h | 1 + include/z64animation.h | 1 + src/boot/fault.c | 1 + src/boot/idle.c | 1 + src/code/padmgr.c | 2 + src/code/z_actor.c | 3 +- src/code/z_camera.c | 1 + src/code/z_collision_check.c | 1 - src/code/z_nmi_buff.c | 2 +- src/code/z_parameter.c | 1 + src/code/z_room.c | 1 + src/libultra/io/cartrominit.c | 30 ++--- src/libultra/io/contramread.c | 1 + src/libultra/io/contramwrite.c | 1 + src/libultra/io/controller.c | 12 +- src/libultra/io/piacs.c | 6 +- src/libultra/io/pimgr.c | 14 +- src/libultra/io/pirawdma.c | 2 +- src/libultra/io/siint.h | 4 - src/libultra/io/vi.c | 12 +- src/libultra/io/vimgr.c | 12 +- src/libultra/os/initialize.c | 50 +++---- src/libultra/os/seteventmesg.c | 7 +- src/libultra/os/thread.c | 5 +- src/libultra/os/timerintr.c | 4 +- src/libultra/voice/voicecontread2.c | 1 + src/libultra/voice/voicecontread36.c | 1 + src/libultra/voice/voicecontwrite20.c | 1 + src/libultra/voice/voicecontwrite4.c | 1 + src/libultra/voice/voicesetadconverter.c | 1 + src/overlays/actors/ovl_Boss_03/z_boss_03.c | 1 - .../actors/ovl_En_Fishing/z_en_fishing.c | 1 + .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 1 + .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1 + tools/disasm/variables.txt | 37 +++--- undefined_syms.txt | 2 +- 56 files changed, 226 insertions(+), 274 deletions(-) create mode 100644 include/PR/guint.h create mode 100644 include/PR/voice_internal.h delete mode 100644 src/libultra/io/siint.h diff --git a/include/PR/controller.h b/include/PR/controller.h index 40dc48b8d..8f5f35fe6 100644 --- a/include/PR/controller.h +++ b/include/PR/controller.h @@ -4,6 +4,7 @@ #include "ultratypes.h" #include "os_cont.h" #include "os_pfs.h" +#include "rcp.h" #define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) @@ -199,10 +200,10 @@ s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel); s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); extern OSPifRam __osContPifRam; -// extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; extern u8 __osMaxControllers; -// extern OSMesgQueue D_8009CF38; -// extern OSMesg D_8009CF50; +extern OSMesgQueue __osEepromTimerQ; +extern OSMesg __osEepromTimerMsg[]; +extern OSPifRam __osPfsPifRam; #endif diff --git a/include/PR/guint.h b/include/PR/guint.h new file mode 100644 index 000000000..e93909446 --- /dev/null +++ b/include/PR/guint.h @@ -0,0 +1,23 @@ +#ifndef PR_GUINT_H +#define PR_GUINT_H + +#include "ultratypes.h" + +typedef union { + f64 d; + struct { + u32 hi; + u32 lo; + } word; +} du; + +typedef union { + u32 i; + f32 f; +} fu; + +#define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) + +extern f32 __libm_qnan_f; + +#endif diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index 944edfabf..58e660801 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -6,8 +6,7 @@ #include "os_pi.h" #include "os_internal_rsp.h" - -typedef struct { +typedef struct __osHwInt { /* 0x00 */ OSMesgQueue* queue; /* 0x04 */ OSMesg msg; } __osHwInt; // size = 0x08 diff --git a/include/PR/os_internal_rsp.h b/include/PR/os_internal_rsp.h index d7b73096c..ce72a146b 100644 --- a/include/PR/os_internal_rsp.h +++ b/include/PR/os_internal_rsp.h @@ -2,12 +2,10 @@ #define PR_OS_INTERNAL_RSP_H #include "ultratypes.h" -#include "libc/stddef.h" u32 __osSpGetStatus(void); void __osSpSetStatus(u32 data); s32 __osSpSetPc(void* pc); s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size); - #endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 134b43a93..7959ac7b3 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -60,8 +60,8 @@ typedef struct { /* 0x14 */ OSPiHandle* piHandle; } OSIoMesg; // size = 0x88 -typedef struct { - /* 0x00 */ s32 active; // u32 maybe? need to check +typedef struct OSDevMgr { + /* 0x00 */ s32 active; /* 0x04 */ OSThread* thread; /* 0x08 */ OSMesgQueue* cmdQueue; /* 0x0C */ OSMesgQueue* evtQueue; @@ -99,6 +99,7 @@ typedef struct { #define PI_DOMAIN1 0 #define PI_DOMAIN2 1 +extern OSPiHandle* __osPiTable; void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt); diff --git a/include/PR/os_system.h b/include/PR/os_system.h index 21f06f164..b55ca11a1 100644 --- a/include/PR/os_system.h +++ b/include/PR/os_system.h @@ -3,6 +3,33 @@ #include "ultratypes.h" +/* + * Values for osTvType + */ +#define OS_TV_PAL 0 +#define OS_TV_NTSC 1 +#define OS_TV_MPAL 2 + +/* + * Size of buffer the retains contents after NMI + */ +#define OS_APP_NMI_BUFSIZE 64 + + +extern s32 osTvType; +extern s32 osRomType; +extern void* osRomBase; +extern s32 osResetType; +extern s32 osCicId; +extern s32 osVersion; +extern u32 osMemSize; +extern s32 osAppNMIBuffer[]; + +extern u64 osClockRate; + +extern s32 osViClock; + +extern u32 __OSGlobalIntMask; u32 osGetMemSize(void); s32 osAfterPreNMI(void); diff --git a/include/PR/os_vi.h b/include/PR/os_vi.h index e4098e97e..d2872962b 100644 --- a/include/PR/os_vi.h +++ b/include/PR/os_vi.h @@ -113,12 +113,16 @@ typedef struct { #define OS_VI_FPAL_HPN2 54 #define OS_VI_FPAL_HPF2 55 -#define OS_TV_PAL 0 -#define OS_TV_NTSC 1 -#define OS_TV_MPAL 2 #define OS_VI_UNK28 28 +extern OSViMode osViModeNtscHpf1; +extern OSViMode osViModePalLan1; +extern OSViMode osViModeNtscHpn1; +extern OSViMode osViModeNtscLan1; +extern OSViMode osViModeMpalLan1; +extern OSViMode osViModeFpalLan1; + void* osViGetCurrentFramebuffer(void); void* osViGetNextFramebuffer(void); void osViSetXScale(f32 value); @@ -131,5 +135,4 @@ void osViSwapBuffer(void* frameBufPtr); void osViBlack(u8 active); void osCreateViManager(OSPri pri); - #endif diff --git a/include/PR/osint.h b/include/PR/osint.h index c2e1a2b90..f472a35f5 100644 --- a/include/PR/osint.h +++ b/include/PR/osint.h @@ -34,5 +34,20 @@ void __osTimerServicesInit(void); extern __osHwInt __osHwIntTable[]; extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; +extern __OSThreadTail __osThreadTail; +extern OSThread* __osRunQueue; +extern OSThread* __osActiveQueue; +extern OSThread* __osRunningThread; +extern OSThread* __osFaultedThread; + +extern u32 __osShutdown; + +extern OSTimer* __osTimerList; + +extern OSTimer __osBaseTimer; +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 __osViIntrCount; +extern u32 __osTimerCounter; #endif diff --git a/include/PR/piint.h b/include/PR/piint.h index 0ca1f0d2e..91d966706 100644 --- a/include/PR/piint.h +++ b/include/PR/piint.h @@ -6,6 +6,15 @@ #include "libc/stdint.h" +extern OSDevMgr __osPiDevMgr; +extern OSPiHandle* __osCurrentHandle[]; +extern u32 __osPiAccessQueueEnabled; + +extern OSPiHandle __Dom1SpeedParam; +extern OSPiHandle __Dom2SpeedParam; + +extern OSMesgQueue __osPiAccessQueue; + void __osDevMgrMain(void* arg); void __osPiCreateAccessQueue(void); void __osPiRelAccess(void); @@ -16,5 +25,4 @@ s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size); OSMesgQueue* osPiGetCmdQueue(void); - #endif diff --git a/include/PR/siint.h b/include/PR/siint.h index a6d16323e..ec9b451a8 100644 --- a/include/PR/siint.h +++ b/include/PR/siint.h @@ -3,6 +3,7 @@ #include "ultratypes.h" +extern u8 __osPfsInodeCacheBank; void __osSiGetAccess(void); void __osSiRelAccess(void); diff --git a/include/PR/ucode.h b/include/PR/ucode.h index 2314222ba..848983ebe 100644 --- a/include/PR/ucode.h +++ b/include/PR/ucode.h @@ -23,9 +23,4 @@ extern u64 gspF3DZEX2_NoN_PosLight_fifoTextEnd[]; extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[]; extern u64 gspF3DZEX2_NoN_PosLight_fifoDataEnd[]; -extern u64 gspS2DEX2_fifoTextStart[]; -extern u64 gspS2DEX2_fifoTextEnd[]; -extern u64 gspS2DEX2_fifoDataStart[]; -extern u64 gspS2DEX2_fifoDataEnd[]; - #endif diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h index 530f30755..76afdf6a0 100644 --- a/include/PR/ultratypes.h +++ b/include/PR/ultratypes.h @@ -22,6 +22,12 @@ typedef volatile s64 vs64; typedef float f32; typedef double f64; +typedef u32 size_t; + +#ifndef NULL +#define NULL (void*)0 +#endif + // TODO: move this somewhere else typedef void* TexturePtr; diff --git a/include/PR/viint.h b/include/PR/viint.h index 29d4fffc6..bc9ce2335 100644 --- a/include/PR/viint.h +++ b/include/PR/viint.h @@ -63,6 +63,8 @@ typedef struct { /* 0x24 */ __OSViScale y; } __OSViContext; // size = 0x30 +extern OSDevMgr __osViDevMgr; + void __osViSwapContext(void); extern __OSViContext* __osViCurr; extern __OSViContext* __osViNext; diff --git a/include/PR/voice_internal.h b/include/PR/voice_internal.h new file mode 100644 index 000000000..b7d6b7e85 --- /dev/null +++ b/include/PR/voice_internal.h @@ -0,0 +1,8 @@ +#ifndef PR_VOICE_INTERNAL_H +#define PR_VOICE_INTERNAL_H + +#include "ultratypes.h" + +extern s32 __osPfsLastChannel; + +#endif diff --git a/include/fault.h b/include/fault.h index 8affde4ae..efdb2c513 100644 --- a/include/fault.h +++ b/include/fault.h @@ -103,7 +103,7 @@ typedef struct FaultMgr { /* 0x844 */ void* fb; } FaultMgr; // size = 0x848 -extern FaultMgr gFaultMgr; - +// TODO: Commented out to try to avoid bss reorder in fault.c +// extern FaultMgr gFaultMgr; #endif diff --git a/include/libc/math.h b/include/libc/math.h index 618ab52b5..fd32cf199 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -10,21 +10,6 @@ #define SHT_MAX 32767.0f #define SHT_MINV (1.0f / SHT_MAX) -typedef union { - f64 d; - struct { - u32 hi; - u32 lo; - } word; -} du; - -typedef union { - u32 i; - f32 f; -} fu; - -extern f32 __libm_qnan_f; - float fabsf(float f); #pragma intrinsic(fabsf) #ifdef __GNUC__ diff --git a/include/libc/stddef.h b/include/libc/stddef.h index e867d8e2a..d75339614 100644 --- a/include/libc/stddef.h +++ b/include/libc/stddef.h @@ -3,14 +3,8 @@ #include "PR/ultratypes.h" -typedef u32 size_t; - typedef s32 ptrdiff_t; -#ifndef NULL -#define NULL (void*)0 -#endif - #ifdef __GNUC__ #define offsetof(structure, member) __builtin_offsetof (structure, member) #else diff --git a/include/macros.h b/include/macros.h index ff764f644..46932a0a6 100644 --- a/include/macros.h +++ b/include/macros.h @@ -95,8 +95,6 @@ #define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x)) #define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x)) -#define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) - #define SWAP(type, a, b) \ { \ type _temp = (a); \ diff --git a/include/ultra64.h b/include/ultra64.h index 58431bde8..9f810a733 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -5,6 +5,7 @@ #include "PR/gbi.h" #include "PR/gu.h" +#include "PR/guint.h" #include "PR/controller_voice.h" #include "PR/hardware.h" #include "PR/os.h" diff --git a/include/variables.h b/include/variables.h index 0f499fde4..fdc9e91b0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -6,14 +6,6 @@ #include "macros.h" // pre-boot variables -extern u32 osTvType; -extern u32 osRomType; -extern uintptr_t osRomBase; -extern u32 osResetType; -extern u32 osCicId; -extern u32 osVersion; -extern size_t osMemSize; -extern s32 osAppNmiBuffer[0x10]; extern u16 gFramebuffer1[SCREEN_HEIGHT][SCREEN_WIDTH]; // at 0x80000500 extern u8 D_80025D00[]; @@ -31,103 +23,7 @@ extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE1 sGfxPrintFontData; // extern UNK_TYPE4 D_80097524; // extern u32 sRandInt; -extern OSViMode osViModeNtscHpf1; -extern OSViMode osViModePalLan1; -extern s16 sintable[0x400]; -// extern UNK_TYPE1 D_80097DE4; -// extern UNK_TYPE4 D_80097E08; -extern OSThread* __osThreadTail; -extern OSThread* __osRunQueue; -extern OSThread* __osActiveQueue; -extern OSThread* __osRunningThread; -extern OSThread* __osFaultedThread; -extern u32 __osSiAccessQueueEnabled; -extern UNK_TYPE4 D_80097E40; -extern u64 osClockRate; -extern s32 osViClock; -extern UNK_TYPE4 __osShutdown; -extern UNK_TYPE4 __OSGlobalIntMask; -extern OSDevMgr __osPiDevMgr; -extern OSPiHandle* __osPiTable; -extern OSPiHandle* __osCurrentHandle[]; -extern UNK_TYPE4 __osPiAccessQueueEnabled; -extern OSViMode osViModeNtscHpn1; -extern s32 __osPfsInodeCacheChannel; -extern u8 __osPfsInodeCacheBank; -extern UNK_TYPE4 D_80097F10; -extern char spaces[]; -extern char zeroes[]; -extern OSTimer* __osTimerList; -extern s32 __osPfsLastChannel; -extern OSViMode osViModeNtscLan1; -extern OSViMode osViModeMpalLan1; -// extern __OSViContext D_80098060[2]; -// extern UNK_TYPE4 sCartRomNeedsInit; -extern OSViMode osViModeFpalLan1; -// extern u8 ldigs[]; -// extern u8 udigs[]; -// extern OSDevMgr __osViDevMgr; - -extern char bootThreadName[]; -extern char idleThreadName[]; -extern char irqmgrThreadName[]; -extern char mainThreadName[]; -extern f32 D_800981B0; -extern char D_800981C0[]; -extern const char dmamgrString800981C4[]; -extern const char dmamgrString800981D4[]; -extern const char dmamgrString800981E4[]; -extern const char dmamgrString800981F4[]; -extern const char dmamgrThreadName[]; -extern char D_80098210[]; -extern char yaz0String80098220[]; -extern char yaz0String8009823C[]; -extern char D_80098280[]; -extern char D_80098290[]; -extern char D_800982A4[]; - -extern char D_800990B0[]; -extern f32 D_800990C0[9]; -extern f32 D_800990E4; -extern f32 D_800990E8; -extern f32 D_800990EC; -extern f32 D_800990F0; -extern f32 D_800990F4; -extern f32 D_800990F8; -extern f32 D_800990FC; -extern f32 D_80099100; -extern f32 D_80099104; -extern f32 D_80099108; -extern f32 D_8009910C; -extern u16 D_800991A0[64]; -extern du P[5]; -extern du rpi; -extern du pihi; -extern du pilo; -extern fu zero; -// extern UNK_TYPE1 D_80099270; -extern UNK_PTR __osIntTable; -extern f64 D_800992C0; -extern f64 D_800992F0; -extern f64 D_800992F8; -extern char D_80099300[]; -extern char D_80099304[]; -extern unsigned int D_8009930C[6]; -extern f32 D_80099400; -extern f64 D_80099428; -extern f64 D_80099430; -extern f64 D_80099438; -// extern UNK_TYPE4 D_80099440; -extern f32 __libm_qnan_f; -extern f64 D_80099460[9]; -extern char D_800994A8[]; -extern char D_800994AC[]; -extern char D_800994B0[]; -// extern UNK_TYPE1 D_800994B1; -extern f64 D_800994B8; -extern f64 D_800994C0; -extern f64 D_800994C8; extern char gBuildTeam[]; extern char gBuildDate[]; extern char gBuildMakeOption[]; @@ -145,29 +41,9 @@ extern void* gYaz0DecompressDstEnd; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; // extern UNK_TYPE4 sArenaLockMsg; -extern OSTask tmp_task; - -extern OSMesg siAccessBuf[1]; -extern OSMesgQueue __osSiAccessQueue; - -extern OSThread __osThreadSave; -extern OSPiHandle D_8009D130; -extern OSPiHandle D_8009D1A8; - -extern OSMesg D_8009E3F0[1]; -extern OSMesgQueue __osPiAccessQueue; -extern __OSInode __osPfsInodeCache; -extern OSTimer D_8009E590; -extern OSTime __osCurrentTime; -extern u32 __osBaseCounter; -extern u32 __osViIntrCount; -extern u32 __osTimerCounter; -extern OSPifRam __osPfsPifRam; -extern OSPiHandle CartRomHandle; extern DmaEntry dmadata[1568]; // extern UNK_TYPE1 D_80186028; -extern u64 aspMainTextStart[]; extern u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; extern u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; diff --git a/include/z64actor.h b/include/z64actor.h index 5f0ea59ad..1b6c37072 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -2,6 +2,7 @@ #define Z64ACTOR_H #include "PR/ultratypes.h" +#include "color.h" #include "padutils.h" #include "z64math.h" #include "z64animation.h" diff --git a/include/z64animation.h b/include/z64animation.h index 25cbea1f2..3ee160c00 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -6,6 +6,7 @@ #include "z64dma.h" #include "z64math.h" +struct GameState; struct PlayState; struct Actor; struct SkelAnime; diff --git a/src/boot/fault.c b/src/boot/fault.c index f62dfb8b7..26b579850 100644 --- a/src/boot/fault.c +++ b/src/boot/fault.c @@ -42,6 +42,7 @@ #include "fault_internal.h" #include "fault.h" +#include "prevent_bss_reordering2.h" #include "global.h" #include "vt.h" #include "PR/osint.h" diff --git a/src/boot/idle.c b/src/boot/idle.c index ccdf98695..0bd07813f 100644 --- a/src/boot/idle.c +++ b/src/boot/idle.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "irqmgr.h" #include "main.h" #include "stack.h" diff --git a/src/code/padmgr.c b/src/code/padmgr.c index ae40fc1a4..1b75721cb 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -36,6 +36,8 @@ #include "PR/os_motor.h" #include "fault.h" +extern FaultMgr gFaultMgr; + #define PADMGR_RETRACE_MSG (1 << 0) #define PADMGR_PRE_NMI_MSG (1 << 1) #define PADMGR_NMI_MSG (1 << 2) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index f88f511b5..cef3c89da 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3,8 +3,7 @@ * Description: */ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "z64actor.h" #include "fault.h" #include "sys_cfb.h" #include "loadfragment.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index c2e00e206..a9477231c 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -43,6 +43,7 @@ * */ +#include "prevent_bss_reordering.h" #include "global.h" #include "libc/string.h" #include "z64quake.h" diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index af1f4ad6c..39b57cbd0 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64collision_check.h" diff --git a/src/code/z_nmi_buff.c b/src/code/z_nmi_buff.c index eacfc5f46..840345932 100644 --- a/src/code/z_nmi_buff.c +++ b/src/code/z_nmi_buff.c @@ -13,7 +13,7 @@ typedef struct { NmiBuff* gNMIBuffer; void Nmi_Init(void) { - gNMIBuffer = (NmiBuff*)osAppNmiBuffer; + gNMIBuffer = (NmiBuff*)osAppNMIBuffer; gNMIBuffer->resetting = false; if (osResetType == COLD_RESET) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 3ba6a9e99..a3dc07aaf 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" #include "sys_cfb.h" #include "z64snap.h" #include "z64view.h" diff --git a/src/code/z_room.c b/src/code/z_room.c index 28a297499..b8de6caec 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/gs2dex.h" #include "debug.h" void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3) { diff --git a/src/libultra/io/cartrominit.c b/src/libultra/io/cartrominit.c index 518be6624..39de77260 100644 --- a/src/libultra/io/cartrominit.c +++ b/src/libultra/io/cartrominit.c @@ -1,6 +1,6 @@ #include "global.h" -OSPiHandle CartRomHandle; +OSPiHandle __CartRomHandle; OSPiHandle* osCartRomInit(void) { register u32 initialConfig; @@ -17,15 +17,15 @@ OSPiHandle* osCartRomInit(void) { if (!sCartRomNeedsInit) { __osPiRelAccess(); - return &CartRomHandle; + return &__CartRomHandle; } sCartRomNeedsInit = false; - CartRomHandle.type = DEVICE_TYPE_CART; - CartRomHandle.baseAddress = 0xB0000000; - CartRomHandle.domain = 0; - CartRomHandle.speed = 0; - bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); + __CartRomHandle.type = DEVICE_TYPE_CART; + __CartRomHandle.baseAddress = 0xB0000000; + __CartRomHandle.domain = 0; + __CartRomHandle.speed = 0; + bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); /* Uses `status & PI_STATUS_ERROR` in OoT */ while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) { @@ -42,11 +42,11 @@ OSPiHandle* osCartRomInit(void) { HW_REG(PI_BSD_DOM1_RLS_REG, u32) = 3; HW_REG(PI_BSD_DOM1_PWD_REG, u32) = 0xFF; - initialConfig = HW_REG(CartRomHandle.baseAddress, u32); - CartRomHandle.latency = initialConfig & 0xFF; - CartRomHandle.pageSize = (initialConfig >> 0x10) & 0xF; - CartRomHandle.relDuration = (initialConfig >> 0x14) & 0xF; - CartRomHandle.pulse = (initialConfig >> 8) & 0xFF; + initialConfig = HW_REG(__CartRomHandle.baseAddress, u32); + __CartRomHandle.latency = initialConfig & 0xFF; + __CartRomHandle.pageSize = (initialConfig >> 0x10) & 0xF; + __CartRomHandle.relDuration = (initialConfig >> 0x14) & 0xF; + __CartRomHandle.pulse = (initialConfig >> 8) & 0xFF; HW_REG(PI_BSD_DOM1_LAT_REG, u32) = lastLatency; HW_REG(PI_BSD_DOM1_PGS_REG, u32) = lastPageSize; @@ -54,10 +54,10 @@ OSPiHandle* osCartRomInit(void) { HW_REG(PI_BSD_DOM1_PWD_REG, u32) = lastPulse; prevInt = __osDisableInt(); - CartRomHandle.next = __osPiTable; - __osPiTable = &CartRomHandle; + __CartRomHandle.next = __osPiTable; + __osPiTable = &__CartRomHandle; __osRestoreInt(prevInt); __osPiRelAccess(); - return &CartRomHandle; + return &__CartRomHandle; } diff --git a/src/libultra/io/contramread.c b/src/libultra/io/contramread.c index d993b47d7..06def61ba 100644 --- a/src/libultra/io/contramread.c +++ b/src/libultra/io/contramread.c @@ -1,4 +1,5 @@ #include "global.h" +#include "PR/voice_internal.h" #define BLOCKSIZE 32 diff --git a/src/libultra/io/contramwrite.c b/src/libultra/io/contramwrite.c index b2157a2a5..507fbb1e8 100644 --- a/src/libultra/io/contramwrite.c +++ b/src/libultra/io/contramwrite.c @@ -1,4 +1,5 @@ #include "ultra64.h" +#include "PR/voice_internal.h" #include "global.h" s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force) { diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 19be9281a..30cb4c1d9 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -1,14 +1,14 @@ #include "global.h" -UNK_TYPE4 D_80097E40 = 0; +s32 __osContinitialized = false; OSPifRam __osContPifRam; u8 __osContLastPoll; u8 __osMaxControllers; OSTimer __osEepromTimer; -OSMesgQueue D_8009CF38; -OSMesg D_8009CF50[1]; +OSMesgQueue __osEepromTimerQ; +OSMesg __osEepromTimerMsg[1]; s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { OSMesg dummy; @@ -17,11 +17,11 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { OSTimer mytimer; OSMesgQueue timerMesgQueue; - if (D_80097E40 != 0) { + if (__osContinitialized) { return 0; } - D_80097E40 = 1; + __osContinitialized = true; t = osGetTime(); if (t < 0x165A0BC) { @@ -43,7 +43,7 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { __osContGetInitData(bitpattern, data); __osContLastPoll = 0; __osSiCreateAccessQueue(); - osCreateMesgQueue(&D_8009CF38, D_8009CF50, ARRAY_COUNT(D_8009CF50)); + osCreateMesgQueue(&__osEepromTimerQ, __osEepromTimerMsg, ARRAY_COUNT(__osEepromTimerMsg)); return ret; } diff --git a/src/libultra/io/piacs.c b/src/libultra/io/piacs.c index 532b149e2..f1107b758 100644 --- a/src/libultra/io/piacs.c +++ b/src/libultra/io/piacs.c @@ -1,13 +1,13 @@ #include "global.h" -UNK_TYPE4 __osPiAccessQueueEnabled = 0; +u32 __osPiAccessQueueEnabled = 0; -OSMesg D_8009E3F0[1]; +OSMesg piAccessBuf[1]; OSMesgQueue __osPiAccessQueue; void __osPiCreateAccessQueue(void) { __osPiAccessQueueEnabled = 1; - osCreateMesgQueue(&__osPiAccessQueue, D_8009E3F0, ARRAY_COUNT(D_8009E3F0)); + osCreateMesgQueue(&__osPiAccessQueue, piAccessBuf, ARRAY_COUNT(piAccessBuf)); osSendMesg(&__osPiAccessQueue, NULL, OS_MESG_NOBLOCK); } diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index 63cc7ba66..b6e1fea13 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -1,12 +1,12 @@ #include "global.h" #include "stack.h" -OSPiHandle D_8009D130; -OSPiHandle D_8009D1A8; +OSPiHandle __Dom1SpeedParam; +OSPiHandle __Dom2SpeedParam; OSThread sPiMgrThread; STACK(sPiMgrStack, 0x1000); -OSMesgQueue D_8009E3D0; -OSMesg D_8009E3E8[1]; +OSMesgQueue piEventQueue; +OSMesg piEventBuf[1]; void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) { u32 savedMask; @@ -15,11 +15,11 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC if (!__osPiDevMgr.active) { osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); - osCreateMesgQueue(&D_8009E3D0, D_8009E3E8, ARRAY_COUNT(D_8009E3E8)); + osCreateMesgQueue(&piEventQueue, piEventBuf, ARRAY_COUNT(piEventBuf)); if (!__osPiAccessQueueEnabled) { __osPiCreateAccessQueue(); } - osSetEventMesg(OS_EVENT_PI, &D_8009E3D0, (OSMesg)0x22222222); + osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222); oldPri = -1; myPri = osGetThreadPri(NULL); if (myPri < pri) { @@ -30,7 +30,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC __osPiDevMgr.active = 1; __osPiDevMgr.thread = &sPiMgrThread; __osPiDevMgr.cmdQueue = cmdQ; - __osPiDevMgr.evtQueue = &D_8009E3D0; + __osPiDevMgr.evtQueue = &piEventQueue; __osPiDevMgr.acsQueue = &__osPiAccessQueue; __osPiDevMgr.piDmaCallback = __osPiRawStartDma; __osPiDevMgr.epiDmaCallback = __osEPiRawStartDma; diff --git a/src/libultra/io/pirawdma.c b/src/libultra/io/pirawdma.c index 90847c4be..b33afddfc 100644 --- a/src/libultra/io/pirawdma.c +++ b/src/libultra/io/pirawdma.c @@ -9,7 +9,7 @@ s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t s HW_REG(PI_DRAM_ADDR_REG, u32) = osVirtualToPhysical(dramAddr); - HW_REG(PI_CART_ADDR_REG, u32) = ((osRomBase | devAddr) & 0x1FFFFFFF); + HW_REG(PI_CART_ADDR_REG, u32) = (((uintptr_t)osRomBase | devAddr) & 0x1FFFFFFF); switch (direction) { case OS_READ: diff --git a/src/libultra/io/siint.h b/src/libultra/io/siint.h deleted file mode 100644 index 5fe725844..000000000 --- a/src/libultra/io/siint.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _SIINT_H_ -#define _SIINT_H_ - -#endif diff --git a/src/libultra/io/vi.c b/src/libultra/io/vi.c index ec0b1de70..a1e3e77c4 100644 --- a/src/libultra/io/vi.c +++ b/src/libultra/io/vi.c @@ -1,13 +1,13 @@ #include "global.h" -__OSViContext D_80098060[2] = { 0 }; -__OSViContext* __osViCurr = &D_80098060[0]; -__OSViContext* __osViNext = &D_80098060[1]; +static __OSViContext vi[2] = { 0 }; +__OSViContext* __osViCurr = &vi[0]; +__OSViContext* __osViNext = &vi[1]; void __osViInit(void) { - bzero(D_80098060, sizeof(D_80098060)); - __osViCurr = &D_80098060[0]; - __osViNext = &D_80098060[1]; + bzero(vi, sizeof(vi)); + __osViCurr = &vi[0]; + __osViNext = &vi[1]; __osViNext->retraceCount = 1; __osViCurr->retraceCount = 1; __osViNext->buffer = (void*)0x80000000; diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index f38974b8a..7bdb3ac51 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -9,7 +9,7 @@ OSMesgQueue viEventQueue; OSMesg viEventBuf[6]; OSIoMesg viRetraceMsg; OSIoMesg viCounterMsg; -OSMgrArgs __osViDevMgr = { 0 }; +OSDevMgr __osViDevMgr = { 0 }; u32 __additional_scanline = 0; void viMgrMain(void*); @@ -19,7 +19,7 @@ void osCreateViManager(OSPri pri) { OSPri newPri; OSPri currentPri; - if (!__osViDevMgr.initialized) { + if (!__osViDevMgr.active) { __osTimerServicesInit(); __additional_scanline = 0; osCreateMesgQueue(&viEventQueue, viEventBuf, ARRAY_COUNT(viEventBuf) - 1); @@ -39,11 +39,11 @@ void osCreateViManager(OSPri pri) { } prevInt = __osDisableInt(); - __osViDevMgr.initialized = true; - __osViDevMgr.mgrThread = &viThread; + __osViDevMgr.active = true; + __osViDevMgr.thread = &viThread; __osViDevMgr.cmdQueue = &viEventQueue; - __osViDevMgr.eventQueue = &viEventQueue; - __osViDevMgr.accessQueue = NULL; + __osViDevMgr.evtQueue = &viEventQueue; + __osViDevMgr.acsQueue = NULL; __osViDevMgr.piDmaCallback = NULL; __osViDevMgr.epiDmaCallback = NULL; diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 8eb97c28c..458aa55b9 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -3,39 +3,39 @@ #define COLD_RESET 0 typedef struct { - /* 0x0 */ u32 ins_00; // lui k0, 0x8000 - /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 - /* 0x8 */ u32 ins_08; // jr k0 ; __osException - /* 0xC */ u32 ins_0C; // nop -} struct_exceptionPreamble; // size = 0x10 + /* 0x0 */ u32 ins_00; // lui k0, 0x8000 + /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 + /* 0x8 */ u32 ins_08; // jr k0 ; __osException + /* 0xC */ u32 ins_0C; // nop +} __osExceptionVector; // size = 0x10 -extern struct_exceptionPreamble __osExceptionPreamble; +extern __osExceptionVector __osExceptionPreamble; u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; -UNK_TYPE4 __osShutdown = 0; -UNK_TYPE4 __OSGlobalIntMask = 0x003FFF01; +u32 __osShutdown = 0; +u32 __OSGlobalIntMask = 0x003FFF01; -UNK_TYPE4 D_8009CF70; +u32 __osFinalrom; void __createSpeedParam(void) { - D_8009D130.type = DEVICE_TYPE_INIT; - D_8009D130.latency = HW_REG(PI_BSD_DOM1_LAT_REG, u32); - D_8009D130.pulse = HW_REG(PI_BSD_DOM1_PWD_REG, u32); - D_8009D130.pageSize = HW_REG(PI_BSD_DOM1_PGS_REG, u32); - D_8009D130.relDuration = HW_REG(PI_BSD_DOM1_RLS_REG, u32); + __Dom1SpeedParam.type = DEVICE_TYPE_INIT; + __Dom1SpeedParam.latency = HW_REG(PI_BSD_DOM1_LAT_REG, u32); + __Dom1SpeedParam.pulse = HW_REG(PI_BSD_DOM1_PWD_REG, u32); + __Dom1SpeedParam.pageSize = HW_REG(PI_BSD_DOM1_PGS_REG, u32); + __Dom1SpeedParam.relDuration = HW_REG(PI_BSD_DOM1_RLS_REG, u32); - D_8009D1A8.type = DEVICE_TYPE_INIT; - D_8009D1A8.latency = HW_REG(PI_BSD_DOM2_LAT_REG, u32); - D_8009D1A8.pulse = HW_REG(PI_BSD_DOM2_PWD_REG, u32); - D_8009D1A8.pageSize = HW_REG(PI_BSD_DOM2_PGS_REG, u32); - D_8009D1A8.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); + __Dom2SpeedParam.type = DEVICE_TYPE_INIT; + __Dom2SpeedParam.latency = HW_REG(PI_BSD_DOM2_LAT_REG, u32); + __Dom2SpeedParam.pulse = HW_REG(PI_BSD_DOM2_PWD_REG, u32); + __Dom2SpeedParam.pageSize = HW_REG(PI_BSD_DOM2_PGS_REG, u32); + __Dom2SpeedParam.relDuration = HW_REG(PI_BSD_DOM2_RLS_REG, u32); } void __osInitialize_common(void) { u32 pifdata; - D_8009CF70 = 1; + __osFinalrom = 1; __osSetSR(__osGetSR() | 0x20000000); __osSetFpcCsr(0x01000800); @@ -45,10 +45,10 @@ void __osInitialize_common(void) { while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {} - *(struct_exceptionPreamble*)0x80000000 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000080 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000100 = __osExceptionPreamble; - *(struct_exceptionPreamble*)0x80000180 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000000 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000080 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000100 = __osExceptionPreamble; + *(__osExceptionVector*)0x80000180 = __osExceptionPreamble; osWritebackDCache(0x80000000, 400); osInvalICache(0x80000000, 400); @@ -59,7 +59,7 @@ void __osInitialize_common(void) { osClockRate = (u64)((osClockRate * 3LL) / 4ULL); if (osResetType == COLD_RESET) { - bzero(osAppNmiBuffer, 64); + bzero(osAppNMIBuffer, 64); } if (osTvType == OS_TV_PAL) { diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index d5c8407f4..74258517f 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -1,7 +1,8 @@ #include "global.h" #include "PR/osint.h" +#include "libc/stdbool.h" -UNK_TYPE4 D_80097F10 = 0; +u32 __osPreNMI = false; __OSEventState __osEventStateTab[OS_NUM_EVENTS]; @@ -17,10 +18,10 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { es->message = m; if (e == 14) { - if ((__osShutdown != 0) && (D_80097F10 == 0)) { + if (__osShutdown && !__osPreNMI) { osSendMesg(mq, m, OS_MESG_NOBLOCK); } - D_80097F10 = 1; + __osPreNMI = true; } __osRestoreInt(saveMask); diff --git a/src/libultra/os/thread.c b/src/libultra/os/thread.c index ec655d64a..98d04ab54 100644 --- a/src/libultra/os/thread.c +++ b/src/libultra/os/thread.c @@ -1,7 +1,6 @@ #include "global.h" -OSThread* __osThreadTail = NULL; -UNK_TYPE D_80097E14 = -1; +__OSThreadTail __osThreadTail = { NULL, OS_PRIORITY_THREADTAIL }; OSThread* __osRunQueue = (OSThread*)&__osThreadTail; OSThread* __osActiveQueue = (OSThread*)&__osThreadTail; OSThread* __osRunningThread = NULL; @@ -11,7 +10,7 @@ void __osDequeueThread(OSThread** queue, OSThread* t) { register OSThread* pred; register OSThread* succ; - pred = (OSThread*)queue; //! This seems questionable, but the function matches... + pred = (OSThread*)queue; succ = pred->next; while (succ != NULL) { if (succ == t) { diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c index 6b112e952..69ac931e1 100644 --- a/src/libultra/os/timerintr.c +++ b/src/libultra/os/timerintr.c @@ -1,6 +1,6 @@ #include "global.h" -OSTimer D_8009E590; +OSTimer __osBaseTimer; OSTime __osCurrentTime; u32 __osBaseCounter; u32 __osViIntrCount; @@ -8,7 +8,7 @@ u32 __osTimerCounter; s32 D_8009E5C8[2]; // dummy bss padding required OSPifRam __osPfsPifRam; -OSTimer* __osTimerList = &D_8009E590; +OSTimer* __osTimerList = &__osBaseTimer; void __osTimerServicesInit(void) { __osCurrentTime = 0; diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c index 0f39ee308..ba60a64c3 100644 --- a/src/libultra/voice/voicecontread2.c +++ b/src/libultra/voice/voicecontread2.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c index 9f23bf979..248360b00 100644 --- a/src/libultra/voice/voicecontread36.c +++ b/src/libultra/voice/voicecontread36.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c index dd9d7e07f..a346294bd 100644 --- a/src/libultra/voice/voicecontwrite20.c +++ b/src/libultra/voice/voicecontwrite20.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c index 103d3e798..e828fc4c6 100644 --- a/src/libultra/voice/voicecontwrite4.c +++ b/src/libultra/voice/voicecontwrite4.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c index 55403dae6..1b3d87cd5 100644 --- a/src/libultra/voice/voicesetadconverter.c +++ b/src/libultra/voice/voicesetadconverter.c @@ -3,6 +3,7 @@ */ #include "PR/controller_voice.h" +#include "PR/voice_internal.h" #include "PR/controller.h" #include "functions.h" #include "variables.h" diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 168da5368..20a25036f 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -49,7 +49,6 @@ * - Seaweed */ -#include "prevent_bss_reordering.h" #include "z_boss_03.h" #include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h" #include "overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h" diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 1f3964998..4ae5482bf 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -4,6 +4,7 @@ * Description: Fishing Pond Elements (Owner, Fish, Props, Effects...) */ +#include "prevent_bss_reordering.h" #include "z_en_fishing.h" #include "z64rumble.h" #include "z64shrink_window.h" diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index b34dc30d2..ee8aa689f 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -5,6 +5,7 @@ */ #include "global.h" +#include "PR/gs2dex.h" #include "sys_cfb.h" #include "z_fbdemo_wipe5.h" diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 04567cf9d..6b451b506 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -4,6 +4,7 @@ * Description: Pause Menu */ +#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "z64view.h" #include "overlays/gamestates/ovl_opening/z_opening.h" diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index fc49a3b43..2da44bc71 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -7,7 +7,7 @@ 0x80000310:("osCicId","UNK_TYPE","",0x4), 0x80000314:("osVersion","UNK_TYPE","",0x4), 0x80000318:("osMemSize","UNK_TYPE","",0x4), - 0x8000031C:("osAppNmiBuffer","s32","[0x10]",0x40), + 0x8000031C:("osAppNMIBuffer","s32","[0x10]",0x40), 0x80000500:("gFramebuffer1","u16","[SCREEN_HEIGHT][SCREEN_WIDTH]",0x25800), 0x80025D00:("D_80025D00","u8","[]",0x1), # TODO size 0x800969C0:("rspbootTextStart","u64","[]",0x160), @@ -47,13 +47,13 @@ 0x800975E0:("sintable","s16","[1024]",0x800), 0x80097DE0:("__osHwIntTable","__osHwInt","[]",0x28), 0x80097E08:("__osPiIntTable","__osHwInt","[]",0x28), - 0x80097E10:("__osThreadTail","OSThread*","",0x4), + 0x80097E10:("__osThreadTail","__OSThreadTail","",0x8), 0x80097E18:("__osRunQueue","OSThread*","",0x4), 0x80097E1C:("__osActiveQueue","OSThread*","",0x4), 0x80097E20:("__osRunningThread","OSThread*","",0x4), 0x80097E24:("__osFaultedThread","OSThread*","",0x4), 0x80097E30:("__osSiAccessQueueEnabled","u32","",0x4), - 0x80097E40:("D_80097E40","UNK_TYPE4","",0x4), + 0x80097E40:("__osContinitialized","UNK_TYPE4","",0x4), 0x80097E50:("osClockRate","u64","",0x8), 0x80097E58:("osViClock","s32","",0x4), 0x80097E5C:("__osShutdown","UNK_TYPE4","",0x4), @@ -65,7 +65,7 @@ 0x80097EB0:("osViModeNtscHpn1","OSViMode","",0x50), 0x80097F00:("__osPfsInodeCacheChannel","s32","",0x4), 0x80097F04:("__osPfsInodeCacheBank","u8","",0x1), - 0x80097F10:("D_80097F10","UNK_TYPE4","",0x4), + 0x80097F10:("__osPreNMI","UNK_TYPE4","",0x4), 0x80097F20:("spaces","char","[]",0x21), 0x80097F44:("zeroes","char","[]",0x24), 0x80097F70:("__osTimerList","OSTimer*","",0x4), @@ -75,7 +75,7 @@ 0x80097FB0:("__osPfsLastChannel","s32","",0x4), 0x80097FC0:("osViModeNtscLan1","OSViMode","",0x50), 0x80098010:("osViModeMpalLan1","OSViMode","",0x50), - 0x80098060:("D_80098060","__OSViContext","[2]",0x60), + 0x80098060:("vi","__OSViContext","[2]",0x60), 0x800980C0:("__osViCurr","__OSViContext*","",0x4), 0x800980C4:("__osViNext","__OSViContext*","",0x4), 0x800980D0:("sCartRomNeedsInit","UNK_TYPE4","",0x4), @@ -251,14 +251,14 @@ 0x80099128:("D_80099128","char","[]",0x1), 0x8009915C:("D_8009915C","char","[]",0x1), 0x80099178:("D_80099178","char","[]",0x1), - 0x800991A0:("D_800991A0","u16","[64]",0x80), + 0x800991A0:("__osRcpImTable","u16","[64]",0x80), 0x80099220:("P","du","[5]",0x28), 0x80099248:("rpi","du","",0x8), 0x80099250:("pihi","du","",0x8), 0x80099258:("pilo","du","",0x8), 0x80099260:("zero","fu","",0x4), - 0x80099270:("D_80099270","UNK_TYPE1","",0x1), - 0x80099290:("__osIntTable","UNK_PTR","",0x4), + 0x80099270:("__osIntOffTable","u8","",0x20), + 0x80099290:("__osIntTable","UNK_PTR","",0x30), 0x800992C0:("D_800992C0","f64","",0x8), 0x800992D0:("jtbl_800992D0","UNK_PTR","",0x4), 0x800992F0:("D_800992F0","f64","",0x8), @@ -330,32 +330,31 @@ 0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4), 0x8009CEB8:("__osSiAccessQueue","OSMesgQueue","",0x18), 0x8009CED0:("__osContPifRam","OSPifRam","",0x40), - 0x8009CF0C:("D_8009CF0C","UNK_TYPE1","",0x1), 0x8009CF10:("__osContLastPoll","u8","",0x1), 0x8009CF11:("__osMaxControllers","u8","",0x1), 0x8009CF18:("__osEepromTimer","OSTimer","",0x20), - 0x8009CF38:("D_8009CF38","OSMesgQueue","",0x18), - 0x8009CF50:("D_8009CF50","OSMesg","",0x4), + 0x8009CF38:("__osEepromTimerQ","OSMesgQueue","",0x18), + 0x8009CF50:("__osEepromTimerMsg","OSMesg","",0x4), 0x8009CF60:("sHandleStatus","UNK_TYPE1","",0x1), - 0x8009CF70:("D_8009CF70","UNK_TYPE4","",0x4), + 0x8009CF70:("__osFinalrom","UNK_TYPE4","",0x4), 0x8009CF80:("__osThreadSave","OSThread","",0x1b0), - 0x8009D130:("D_8009D130","OSPiHandle","",0x74), - 0x8009D1A8:("D_8009D1A8","OSPiHandle","",0x74), + 0x8009D130:("__Dom1SpeedParam","OSPiHandle","",0x74), + 0x8009D1A8:("__Dom2SpeedParam","OSPiHandle","",0x74), 0x8009D220:("sPiMgrThread","OSThread","",0x1b0), 0x8009D3D0:("sPiMgrStack","u8","[4096]",0x1000), - 0x8009E3D0:("D_8009E3D0","OSMesgQueue","",0x18), - 0x8009E3E8:("D_8009E3E8","OSMesg","[1]",0x4), - 0x8009E3F0:("D_8009E3F0","OSMesg","[1]",0x4), + 0x8009E3D0:("piEventQueue","OSMesgQueue","",0x18), + 0x8009E3E8:("piEventBuf","OSMesg","[1]",0x4), + 0x8009E3F0:("piAccessBuf","OSMesg","[1]",0x4), 0x8009E3F8:("__osPiAccessQueue","OSMesgQueue","",0x18), 0x8009E410:("__osPfsInodeCache","__OSInode","",0x100), 0x8009E510:("__osEventStateTab","__OSEventState","[16]",0x80), - 0x8009E590:("D_8009E590","OSTimer","",0x20), + 0x8009E590:("__osBaseTimer","OSTimer","",0x20), 0x8009E5B0:("__osCurrentTime","OSTime","",0x8), 0x8009E5B8:("__osBaseCounter","u32","",0x4), 0x8009E5BC:("__osViIntrCount","u32","",0x4), 0x8009E5C0:("__osTimerCounter","u32","",0x4), 0x8009E5D0:("__osPfsPifRam","OSPifRam","",0x40), - 0x8009E610:("CartRomHandle","OSPiHandle","",0x74), + 0x8009E610:("__CartRomHandle","OSPiHandle","",0x74), 0x8009E690:("viThread","OSThread","",0x1b0), 0x8009E840:("sViStack","u8","[4096]",0x1000), 0x8009F840:("viEventQueue","OSMesgQueue","",0x18), diff --git a/undefined_syms.txt b/undefined_syms.txt index a6a5bc8ae..45307fc87 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -14,7 +14,7 @@ osResetType = 0x8000030C; osCicId = 0x80000310; osVersion = 0x80000314; osMemSize = 0x80000318; -osAppNmiBuffer = 0x8000031C; +osAppNMIBuffer = 0x8000031C; /// OS hardware registers From df800c74aecfb6b89ee976df8a2f11451f295e37 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 16 Sep 2023 08:34:16 +1000 Subject: [PATCH 16/74] PreRender.c OK (#1320) * begin prerender * match func_801716C4 * copy more docs from OoT * begin func_801720FC * improve func_801720FC * match func_801720FC * background 2D * merge master * func_801717F8 attempt * z64prerender.h * import bss * non-equivalent * document func_801716C4 * cleanup comments * import tharo docs * minor improvement on PreRender_DivotFilter * Match PreRender_DivotFilter * Remove fakes * format * Fix comment about RM_VISCVG in PreRender_FetchFbufCoverage * PreRender cleanup * PR Review * review * listalloc.h * bss * capitalization --------- Co-authored-by: angie Co-authored-by: Derek Hensley --- include/functions.h | 32 - include/listalloc.h | 16 + include/z64.h | 48 +- include/z64prerender.h | 73 ++ spec | 1 - src/code/PreRender.c | 706 ++++++++++++++---- src/code/listalloc.c | 2 +- src/code/z_actor.c | 2 +- src/code/z_lifemeter.c | 1 - src/code/z_play.c | 10 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 1 + tools/disasm/functions.txt | 28 +- tools/disasm/variables.txt | 2 +- tools/sizes/code_functions.csv | 28 +- 14 files changed, 671 insertions(+), 279 deletions(-) create mode 100644 include/listalloc.h create mode 100644 include/z64prerender.h diff --git a/include/functions.h b/include/functions.h index 4c6c74cef..31ebb9c20 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1160,34 +1160,6 @@ void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId); void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha); void Play_Init(GameState* thisx); -void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); -void PreRender_Init(PreRender* this); -void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); -void PreRender_Destroy(PreRender* this); -void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 arg4); -void func_8016FF70(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA); -void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8017023C(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); -void func_8017057C(PreRender* this, Gfx** gfxp); -void func_801705B4(PreRender* this, Gfx** gfxp); -void func_801705EC(PreRender* this, Gfx** gfxp); -void func_80170730(PreRender* this, Gfx** gfxp); -void func_80170774(PreRender* this, Gfx** gfxp); -void func_80170798(PreRender* this, Gfx** gfxp); -void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha); -void func_80170B28(PreRender* this, Gfx** gfxp); -void PreRender_AntiAliasAlgorithm(PreRender* this, s32 x, s32 y); -void PreRender_ApplyAntiAliasingFilter(PreRender* this); -u32 func_801716C4(u8* arg0, u8* arg1, u8* arg2); -void func_801717F8(PreRender* this); -void PreRender_ApplyFilters(PreRender* this); -void PreRender_ApplyFiltersSlowlyInit(PreRender* this); -void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this); -void func_801720C4(PreRender* this); -void func_801720FC(PreRenderParams* params, Gfx** gfxp); -void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags); - void GameAlloc_Log(GameAlloc* this); void* GameAlloc_Malloc(GameAlloc* this, size_t size); void GameAlloc_Free(GameAlloc* this, void* data); @@ -1208,10 +1180,6 @@ void Graph_ThreadEntry(void* arg); Gfx* Graph_GfxPlusOne(Gfx* gfx); Gfx* Graph_BranchDlist(Gfx* gfx, Gfx* dst); void* Graph_DlistAlloc(Gfx** gfx, size_t size); -ListAlloc* ListAlloc_Init(ListAlloc* this); -// void ListAlloc_Alloc(void); -// void ListAlloc_Free(void); -void ListAlloc_FreeAll(ListAlloc* this); void Sched_SwapFramebuffer(CfbInfo* cfbInfo); void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo); diff --git a/include/listalloc.h b/include/listalloc.h new file mode 100644 index 000000000..e4ca07f07 --- /dev/null +++ b/include/listalloc.h @@ -0,0 +1,16 @@ +#ifndef LISTALLOC_H +#define LISTALLOC_H + +#include "ultra64.h" + +typedef struct ListAlloc { + /* 0x0 */ struct ListAlloc* prev; + /* 0x4 */ struct ListAlloc* next; +} ListAlloc; // size = 0x8 + +ListAlloc* ListAlloc_Init(ListAlloc* this); +void* ListAlloc_Alloc(ListAlloc* this, size_t size); +void ListAlloc_Free(ListAlloc* this, void* data); +void ListAlloc_FreeAll(ListAlloc* this); + +#endif diff --git a/include/z64.h b/include/z64.h index ca9748509..63aec32ef 100644 --- a/include/z64.h +++ b/include/z64.h @@ -52,6 +52,7 @@ #include "z64object.h" #include "z64ocarina.h" #include "z64player.h" +#include "z64prerender.h" #include "z64save.h" #include "z64scene.h" #include "z64schedule.h" @@ -222,53 +223,6 @@ typedef struct { /* 0xFA */ u8 unk_FA[4]; } EnvironmentContext; // size = 0x100 -typedef struct ListAlloc { - /* 0x0 */ struct ListAlloc* prev; - /* 0x4 */ struct ListAlloc* next; -} ListAlloc; // size = 0x8 - -typedef struct { - /* 0x00 */ u16 width; - /* 0x02 */ u16 height; - /* 0x04 */ u16 widthSave; - /* 0x06 */ u16 heightSave; - /* 0x08 */ char unk_8[8]; - /* 0x10 */ u16* fbuf; - /* 0x14 */ u16* fbufSave; - /* 0x18 */ u8* cvgSave; - /* 0x1C */ u16* zbuf; - /* 0x20 */ u16* zbufSave; - /* 0x24 */ u16 ulxSave; - /* 0x26 */ u16 ulySave; - /* 0x28 */ u16 lrxSave; - /* 0x2A */ u16 lrySave; - /* 0x2C */ u16 ulx; - /* 0x2E */ u16 uly; - /* 0x30 */ u16 lrx; - /* 0x32 */ u16 lry; - /* 0x34 */ char unk_34[16]; - /* 0x44 */ ListAlloc alloc; - /* 0x4C */ u8 unk_4C; - /* 0x4D */ u8 unk_4D; - /* 0x4E */ char unk_4E[2]; -} PreRender; // size = 0x50 - -typedef struct { - /* 0x00 */ void* timg; - /* 0x04 */ void* tlut; - /* 0x08 */ u16 width; - /* 0x0A */ u16 height; - /* 0x0C */ u8 fmt; - /* 0x0D */ u8 siz; - /* 0x0E */ u16 tt; - /* 0x10 */ u16 unk_10; - /* 0x14 */ f32 x; - /* 0x18 */ f32 y; - /* 0x1C */ f32 xScale; - /* 0x20 */ f32 yScale; - /* 0x24 */ u32 flags; -} PreRenderParams; // size = 0x28 - struct PlayState; typedef struct { diff --git a/include/z64prerender.h b/include/z64prerender.h new file mode 100644 index 000000000..813f6827a --- /dev/null +++ b/include/z64prerender.h @@ -0,0 +1,73 @@ +#ifndef Z64_PRERENDER_H +#define Z64_PRERENDER_H + +#include "ultra64.h" +#include "listalloc.h" +#include "unk.h" + +#define BG2D_FLAGS_1 (1 << 0) +#define BG2D_FLAGS_2 (1 << 1) +#define BG2D_FLAGS_AC_THRESHOLD (1 << 2) +#define BG2D_FLAGS_LOAD_S2DEX2 (1 << 3) +#define BG2D_FLAGS_COPY (1 << 4) + +typedef enum PrerenderFilterState { + /* 0 */ PRERENDER_FILTER_STATE_NONE, + /* 1 */ PRERENDER_FILTER_STATE_PROCESS, + /* 2 */ PRERENDER_FILTER_STATE_DONE +} PrerenderFilterState; + +typedef struct PreRender { + /* 0x00 */ u16 width; + /* 0x02 */ u16 height; + /* 0x04 */ u16 widthSave; + /* 0x06 */ u16 heightSave; + /* 0x08 */ UNK_TYPE1 unk_08[0x8]; + /* 0x10 */ u16* fbuf; + /* 0x14 */ u16* fbufSave; + /* 0x18 */ u8* cvgSave; + /* 0x1C */ u16* zbuf; + /* 0x20 */ u16* zbufSave; + /* 0x24 */ u16 ulxSave; + /* 0x26 */ u16 ulySave; + /* 0x28 */ u16 lrxSave; + /* 0x2A */ u16 lrySave; + /* 0x2C */ u16 ulx; + /* 0x2E */ u16 uly; + /* 0x30 */ u16 lrx; + /* 0x32 */ u16 lry; + /* 0x34 */ UNK_TYPE1 unk_34[0x10]; + /* 0x44 */ ListAlloc alloc; + /* 0x4C */ u8 unk_4C; + /* 0x4D */ u8 filterState; // See `PrerenderFilterState` +} PreRender; // size = 0x50 + + +void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); +void PreRender_Init(PreRender* this); +void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); +void PreRender_Destroy(PreRender* this); +void PreRender_CopyImage(PreRender* this, Gfx** gfxp, void* img, void* imgDst, u32 useThresholdAlphaCompare); +void PreRender_RestoreBuffer(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); +void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA); +void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave); +void PreRender_CoverageRgba16ToI8(PreRender* this, Gfx** gfxp, void* img, void* cvgDst); +void PreRender_SaveZBuffer(PreRender* this, Gfx** gfxp); +void PreRender_SaveFramebuffer(PreRender* this, Gfx** gfxp); +void PreRender_FetchFbufCoverage(PreRender* this, Gfx** gfxp); +void PreRender_DrawCoverage(PreRender* this, Gfx** gfxp); +void PreRender_RestoreZBuffer(PreRender* this, Gfx** gfxp); +void func_80170798(PreRender* this, Gfx** gfxp); +void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha); +void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxp); +void PreRender_AntiAliasFilterPixel(PreRender* this, s32 x, s32 y); +void PreRender_AntiAliasFilter(PreRender* this); +u32 PreRender_Get5bMedian9(u8* px1, u8* px2, u8* px3); +void PreRender_DivotFilter(PreRender* this); +void PreRender_ApplyFilters(PreRender* this); +void PreRender_ApplyFiltersSlowlyInit(PreRender* this); +void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this); +void func_801720C4(PreRender* this); +void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 tlutCount, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags); + +#endif diff --git a/spec b/spec index 90459b036..295af646b 100644 --- a/spec +++ b/spec @@ -547,7 +547,6 @@ beginseg include "build/src/code/z_play.o" include "build/src/code/z_play_hireso.o" include "build/src/code/PreRender.o" - include "build/data/code/PreRender.bss.o" include "build/src/code/TwoHeadGfxArena.o" include "build/src/code/TwoHeadArena.o" include "build/src/code/audio_stop_all_sfx.o" diff --git a/src/code/PreRender.c b/src/code/PreRender.c index c9f279e75..d058fded3 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -1,4 +1,18 @@ +/** + * @file PreRender.c + * + * This file implements various routines important to framebuffer effects, such as RDP accelerated color and depth + * buffer copies and coverage drawing. Also contains software implementations of the Video Interface anti-aliasing and + * divot filters. + */ + +#include "z64prerender.h" #include "global.h" +#include "PR/gs2dex.h" +#include "libc/alloca.h" +#include "libc/stdbool.h" +#include "color.h" +#include "macros.h" #include "slowly.h" #include "stack.h" #include "stackcheck.h" @@ -41,20 +55,20 @@ void PreRender_Destroy(PreRender* this) { ListAlloc_FreeAll(&this->alloc); } -void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 arg4) { +void PreRender_CopyImage(PreRender* this, Gfx** gfxp, void* img, void* imgDst, u32 useThresholdAlphaCompare) { Gfx* gfx = *gfxp; u32 flags; gDPPipeSync(gfx++); - gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, bufSave); + gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, imgDst); gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); - flags = 0x18; - if (arg4 == true) { - flags = 0x1C; + flags = BG2D_FLAGS_LOAD_S2DEX2 | BG2D_FLAGS_COPY; + if (useThresholdAlphaCompare == true) { + flags |= BG2D_FLAGS_AC_THRESHOLD; } - Prerender_DrawBackground2D(&gfx, buf, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, + Prerender_DrawBackground2D(&gfx, img, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, 0.0f, 1.0f, 1.0f, flags); gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); @@ -62,8 +76,8 @@ void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 ar *gfxp = gfx; } -void func_8016FF70(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { - func_8016FDB8(this, gfxp, buf, bufSave, false); +void PreRender_RestoreBuffer(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { + PreRender_CopyImage(this, gfxp, buf, bufSave, false); } void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 envR, s32 envG, s32 envB, s32 envA) { @@ -91,7 +105,7 @@ void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 en gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); Prerender_DrawBackground2D(&gfx, buf, 0, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, - 0.0f, 1.0f, 1.0f, 0xB); + 0.0f, 1.0f, 1.0f, BG2D_FLAGS_1 | BG2D_FLAGS_2 | BG2D_FLAGS_LOAD_S2DEX2); gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); @@ -102,103 +116,174 @@ void func_80170200(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { func_8016FF90(this, gfxp, buf, bufSave, 255, 255, 255, 255); } -#ifdef NON_MATCHING -// just regalloc -void func_8017023C(PreRender* this, Gfx** gfxp, void* buf, void* bufSave) { +/** + * Reads the coverage values stored in the RGBA16 format `img` with dimensions `this->width`, `this->height` and + * converts it to an 8-bpp intensity image. + * + * @param gfxp Display list pointer + * @param img Image to read coverage from + * @param cvgDst Buffer to store coverage into + */ +void PreRender_CoverageRgba16ToI8(PreRender* this, Gfx** gfxp, void* img, void* cvgDst) { Gfx* gfx = *gfxp; - s32 x; - s32 x2; - s32 dx; + s32 rowsRemaining; + s32 curRow; + s32 nRows; gDPPipeSync(gfx++); gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | G_RM_PASS | G_RM_OPA_CI2); + + // Set the combiner to draw the texture as-is, discarding alpha channel gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 0, 0, 0, 0, 0, 0, 0, TEXEL0, 0, 0, 0, 0); - gDPSetColorImage(gfx++, G_IM_FMT_I, G_IM_SIZ_8b, this->width, bufSave); + // Set the destination color image to the provided address + gDPSetColorImage(gfx++, G_IM_FMT_I, G_IM_SIZ_8b, this->width, cvgDst); + // Set up a scissor based on the source image gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); - dx = 0x1000 / (this->width * 2); - x = this->height; - x2 = 0; + // Calculate the max number of rows that can fit into TMEM at once + nRows = TMEM_SIZE / (this->width * G_IM_SIZ_16b_BYTES); - while (x > 0) { + // Set up the number of remaining rows + rowsRemaining = this->height; + curRow = 0; + while (rowsRemaining > 0) { s32 uls = 0; s32 lrs = this->width - 1; s32 ult; s32 lrt; - dx = CLAMP_MAX(dx, x); - ult = x2; - lrt = x2 + dx - 1; + // Make sure that we don't load past the end of the source image + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } - gDPLoadTextureTile(gfx++, buf, G_IM_FMT_IA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 0, + // Determine the upper and lower bounds of the rect to draw + ult = curRow; + lrt = curRow + nRows - 1; + + // Load a horizontal strip of the source image in IA16 format. Since the source image is stored in memory as + // RGBA16, the bits are reinterpreted into IA16: + // + // r g b a + // 11111 111 11 11111 1 + // i a + // 11111 111 11 11111 1 + // + // I = (r << 3) | (g >> 2) + // A = (g << 6) | (b << 1) | a + // + // Since it is expected that r = g = b = cvg in the source image, this results in + // I = (cvg << 3) | (cvg >> 2) + // This expands the 5-bit coverage into an 8-bit value + gDPLoadTextureTile(gfx++, img, G_IM_FMT_IA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + // Draw that horizontal strip to the destination image. With the combiner and blender configuration set above, + // the intensity (I) channel of the loaded IA16 texture will be written as-is to the I8 color image, each pixel + // in the final image is + // I = (cvg << 3) | (cvg >> 2) gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, ult << 5, 1 << 10, 1 << 10); - x2 += dx; - x -= dx; + // Update the number of rows remaining and index of the row being drawn + curRow += nRows; + rowsRemaining -= nRows; } + // Reset the color image to the current framebuffer gDPPipeSync(gfx++); gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf); *gfxp = gfx; } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_8017023C.s") -#endif -void func_8017057C(PreRender* this, Gfx** gfxp) { +/** + * Saves zbuf to zbufSave + */ +void PreRender_SaveZBuffer(PreRender* this, Gfx** gfxp) { if ((this->zbufSave != NULL) && (this->zbuf != NULL)) { - func_8016FF70(this, gfxp, this->zbuf, this->zbufSave); + PreRender_RestoreBuffer(this, gfxp, this->zbuf, this->zbufSave); } } -void func_801705B4(PreRender* this, Gfx** gfxp) { +/** + * Saves fbuf to fbufSave + */ +void PreRender_SaveFramebuffer(PreRender* this, Gfx** gfxp) { if ((this->fbufSave != NULL) && (this->fbuf != NULL)) { func_80170200(this, gfxp, this->fbuf, this->fbufSave); } } -void func_801705EC(PreRender* this, Gfx** gfxp) { +/** + * Fetches the coverage of the current framebuffer into an image of the same format as the current color image, storing + * it over the framebuffer in memory. + */ +void PreRender_FetchFbufCoverage(PreRender* this, Gfx** gfxp) { Gfx* gfx = *gfxp; gDPPipeSync(gfx++); + // Set the blend color to full white and set maximum depth gDPSetBlendColor(gfx++, 255, 255, 255, 8); - gDPSetPrimDepth(gfx++, -1, -1); + gDPSetPrimDepth(gfx++, 0xFFFF, 0xFFFF); + + // Uses G_RM_VISCVG to blit the coverage values to the framebuffer + // + // G_RM_VISCVG is the following special render mode: + // IM_RD : Allow read-modify-write operations on the framebuffer + // FORCE_BL : Apply the blender to all pixels rather than just edges, skip the division step of the blend formula + // (G_BL_CLR_IN * G_BL_0 + G_BL_CLR_BL * G_BL_A_MEM) = G_BL_CLR_BL * G_BL_A_MEM + // + // G_BL_A_MEM ("memory alpha") is coverage, therefore this blender configuration emits only the coverage (up to a + // constant factor determined by blend color) and discards any pixel colors. For an RGBA16 framebuffer, each of the + // three color channels r,g,b will receive the coverage value individually. + // + // Also disables other modes such as alpha compare and texture perspective correction gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | G_RM_VISCVG | G_RM_VISCVG2); + // Set up a scissor with the same dimensions as the framebuffer gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height); + // Fill rectangle to obtain the coverage values as an RGBA16 image gDPFillRectangle(gfx++, 0, 0, this->width, this->height); gDPPipeSync(gfx++); *gfxp = gfx; } -void func_80170730(PreRender* this, Gfx** gfxp) { - func_801705EC(this, gfxp); +/** + * Draws the coverage of the current framebuffer `this->fbuf` to an I8 image at `this->cvgSave`. Overwrites + * `this->fbuf` in the process. + */ +void PreRender_DrawCoverage(PreRender* this, Gfx** gfxp) { + PreRender_FetchFbufCoverage(this, gfxp); if (this->cvgSave != NULL) { - func_8017023C(this, gfxp, this->fbuf, this->cvgSave); + PreRender_CoverageRgba16ToI8(this, gfxp, this->fbuf, this->cvgSave); } } -void func_80170774(PreRender* this, Gfx** gfxp) { - func_8016FF70(this, gfxp, this->zbufSave, this->zbuf); +/** + * Restores zbufSave to zbuf + */ +void PreRender_RestoreZBuffer(PreRender* this, Gfx** gfxp) { + PreRender_RestoreBuffer(this, gfxp, this->zbufSave, this->zbuf); } +/** + * Draws a full-screen image to the current framebuffer, that sources the rgb channel from `this->fbufSave` and + * the alpha channel from `this->cvgSave` modulated by environment color. + */ void func_80170798(PreRender* this, Gfx** gfxp) { Gfx* gfx; - s32 y; - s32 y2; - s32 dy; + s32 rowsRemaining; + s32 curRow; + s32 nRows; s32 rtile = 1; if (this->cvgSave != NULL) { @@ -206,43 +291,55 @@ void func_80170798(PreRender* this, Gfx** gfxp) { gDPPipeSync(gfx++); gDPSetEnvColor(gfx++, 255, 255, 255, 32); + // Effectively disable blending in both cycles. It's 2-cycle so that TEXEL1 can be used to point to a different + // texture tile. gDPSetOtherMode(gfx++, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | AA_EN | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)); + + // Set up the color combiner: first cycle: TEXEL0, TEXEL1 + ENVIRONMENT; second cycle: G_CC_PASS2 gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 1, 0, TEXEL1, ENVIRONMENT, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); - dy = (this->width > 320) ? 2 : 4; - y = this->height; - y2 = 0; + nRows = (this->width > SCREEN_WIDTH) ? 2 : 4; - while (y > 0) { + rowsRemaining = this->height; + curRow = 0; + + while (rowsRemaining > 0) { s32 uls = 0; s32 lrs = this->width - 1; s32 ult; s32 lrt; - dy = CLAMP_MAX(dy, y); + // Make sure that we don't load past the end of the source image + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } - ult = y2; - lrt = (y2 + dy - 1); + // Determine the upper and lower bounds of the rect to draw + ult = curRow; + lrt = curRow + nRows - 1; + // Load the frame buffer line gDPLoadMultiTile(gfx++, this->fbufSave, 0x0000, G_TX_RENDERTILE, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + // Load the coverage line gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height, uls, ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - //! FAKE - if (1) {} - if (1) {} + + // Draw a texture for which the rgb channels come from the framebuffer and the alpha channel comes from + // coverage, modulated by env color gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, ult << 5, 1 << 10, 1 << 10); - y2 += dy; - y -= dy; + curRow += nRows; + rowsRemaining -= nRows; } gDPPipeSync(gfx++); @@ -254,134 +351,186 @@ void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha) { func_8016FF90(this, gfxp, this->fbufSave, this->fbuf, 255, 255, 255, alpha); } -void func_80170B28(PreRender* this, Gfx** gfxp) { - func_8016FF70(this, gfxp, this->fbufSave, this->fbuf); +/** + * Copies fbufSave to fbuf + */ +void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxp) { + PreRender_RestoreBuffer(this, gfxp, this->fbufSave, this->fbuf); } /** - * Applies an anti-alias filter where the middle pixel (index 7) correspond to (x, y) in this 3x5 rectangle - * _ _ _ _ _ - * | 0 1 2 3 4 | - * | 5 6 7 8 9 | - * | A B C D E | - * ‾ ‾ ‾ ‾ ‾ + * Applies the Video Interface anti-aliasing of silhouette edges to an image. + * + * This filter performs a linear interpolation on partially covered pixels between the current pixel color (called + * foreground color) and a "background" pixel color obtained by sampling fully covered pixels at the six highlighted + * points in the following 5x3 neighborhood: + * _ _ _ _ _ + * | o o | + * | o X o | + * | o o | + * ‾ ‾ ‾ ‾ ‾ + * Whether a pixel is partially covered is determined by reading the coverage values associated with the image. + * Coverage is a measure of how many subpixels the last drawn primitive covered. A fully covered pixel is one with a + * full coverage value, the entire pixel was covered by the primitive. + * The background color is calculated as the average of the "penultimate" minimum and maximum colors in the 5x3 + * neighborhood. + * + * The final color is calculated by interpolating the foreground and background color weighted by the coverage: + * OutputColor = cvg * ForeGround + (1.0 - cvg) * BackGround + * + * This is a software implementation of the same algorithm used in the Video Interface hardware when Anti-Aliasing is + * enabled in the VI Control Register. + * + * Patent describing the algorithm: + * + * Gossett, C. P., & van Hook, T. J. (Filed 1995, Published 1998) + * Antialiasing of silhouette edges (USOO5742277A) + * U.S. Patent and Trademark Office + * Expired 2015-10-06 + * https://patents.google.com/patent/US5742277A/en + * + * @param this PreRender instance + * @param x Center pixel x + * @param y Center pixel y */ -void PreRender_AntiAliasAlgorithm(PreRender* this, s32 x, s32 y) { +void PreRender_AntiAliasFilterPixel(PreRender* this, s32 x, s32 y) { s32 i; s32 j; - s32 buffA[3 * 5]; + s32 buffCvg[3 * 5]; s32 buffR[3 * 5]; s32 buffG[3 * 5]; s32 buffB[3 * 5]; - s32 x1; - s32 y1; - s32 pad; - s32 pxR; - s32 pxG; - s32 pxB; - s32 pxR2; - s32 pxG2; - s32 pxB2; + s32 xi; + s32 yi; + s32 temp; + s32 pmaxR; + s32 pmaxG; + s32 pmaxB; + s32 pminR; + s32 pminG; + s32 pminB; Color_RGBA16 pxIn; Color_RGBA16 pxOut; - u32 pxR3; - u32 pxG3; - u32 pxB3; + u32 outR; + u32 outG; + u32 outB; - for (i = 0; i < 3 * 5; i++) { - x1 = (i % 5) + x - 2; - y1 = (i / 5) + y - 1; + // Extract pixels in the 5x3 neighborhood + for (i = 0; i < 5 * 3; i++) { + xi = x + (i % 5) - 2; + yi = y + (i / 5) - 1; - if (x1 < 0) { - x1 = 0; - } else if (x1 > (this->width - 1)) { - x1 = this->width - 1; + // Clamp coordinates to the edges of the image + if (xi < 0) { + xi = 0; + } else if (xi > (this->width - 1)) { + xi = this->width - 1; } - if (y1 < 0) { - y1 = 0; - } else if (y1 > (this->height - 1)) { - y1 = this->height - 1; + if (yi < 0) { + yi = 0; + } else if (yi > (this->height - 1)) { + yi = this->height - 1; } - pxIn.rgba = this->fbufSave[x1 + y1 * this->width]; + // Extract color channels for each pixel, convert 5-bit color channels to 8-bit + pxIn.rgba = this->fbufSave[xi + yi * this->width]; buffR[i] = (pxIn.r << 3) | (pxIn.r >> 2); buffG[i] = (pxIn.g << 3) | (pxIn.g >> 2); buffB[i] = (pxIn.b << 3) | (pxIn.b >> 2); - buffA[i] = this->cvgSave[x1 + y1 * this->width] >> 5; + buffCvg[i] = this->cvgSave[xi + yi * this->width] >> 5; } - pxR = pxR2 = buffR[7]; - pxG = pxG2 = buffG[7]; - pxB = pxB2 = buffB[7]; + pmaxR = pminR = buffR[7]; + pmaxG = pminG = buffG[7]; + pmaxB = pminB = buffB[7]; - for (i = 1; i < 3 * 5; i += 2) { - if (buffA[i] == 7) { - if (pxR < buffR[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffR[j] >= buffR[i]) && (buffA[j] == 7)) { - pxR = buffR[i]; + // For each neighbor + for (i = 1; i < 5 * 3; i += 2) { + // Only sample fully covered pixels + if (buffCvg[i] == 7) { + // Determine "Penultimate Maximum" Value + + // If current maximum is less than this neighbor + if (pmaxR < buffR[i]) { + // For each neighbor (again) + for (j = 1; j < 5 * 3; j += 2) { + // If not the neighbor we were at before, and this neighbor has a larger value and this pixel is + // fully covered, that means the neighbor at `i` is the "penultimate maximum" + if ((i != j) && (buffR[j] >= buffR[i]) && (buffCvg[j] == 7)) { + pmaxR = buffR[i]; } } } - if (pxG < buffG[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffG[j] >= buffG[i]) && (buffA[j] == 7)) { - pxG = buffG[i]; + if (pmaxG < buffG[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffG[j] >= buffG[i]) && (buffCvg[j] == 7)) { + pmaxG = buffG[i]; } } } - if (pxB < buffB[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffB[j] >= buffB[i]) && (buffA[j] == 7)) { - pxB = buffB[i]; + if (pmaxB < buffB[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffB[j] >= buffB[i]) && (buffCvg[j] == 7)) { + pmaxB = buffB[i]; } } } + if (1) {} - if (pxR2 > buffR[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffR[j] <= buffR[i]) && (buffA[j] == 7)) { - pxR2 = buffR[i]; + + // Determine "Penultimate Minimum" Value + + // Same as above with inverted conditions + if (pminR > buffR[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffR[j] <= buffR[i]) && (buffCvg[j] == 7)) { + pminR = buffR[i]; } } } - if (pxG2 > buffG[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffG[j] <= buffG[i]) && (buffA[j] == 7)) { - pxG2 = buffG[i]; + if (pminG > buffG[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffG[j] <= buffG[i]) && (buffCvg[j] == 7)) { + pminG = buffG[i]; } } } - if (pxB2 > buffB[i]) { - for (j = 1; j < 15; j += 2) { - if ((i != j) && (buffB[j] <= buffB[i]) && (buffA[j] == 7)) { - pxB2 = buffB[i]; + if (pminB > buffB[i]) { + for (j = 1; j < 5 * 3; j += 2) { + if ((i != j) && (buffB[j] <= buffB[i]) && (buffCvg[j] == 7)) { + pminB = buffB[i]; } } } } } - pad = 7 - buffA[7]; - pxR3 = buffR[7] + (((s32)((pad * ((pxR + pxR2) - (buffR[7] << 1))) + 4)) >> 3); - pxG3 = buffG[7] + (((s32)((pad * ((pxG + pxG2) - (buffG[7] << 1))) + 4)) >> 3); - pxB3 = buffB[7] + (((s32)((pad * ((pxB + pxB2) - (buffB[7] << 1))) + 4)) >> 3); + // The background color is determined by averaging the penultimate minimum and maximum pixels, and subtracting the + // Foreground color: + // BackGround = (pMax + pMin) - (ForeGround) * 2 - pxOut.r = pxR3 >> 3; - pxOut.g = pxG3 >> 3; - pxOut.b = pxB3 >> 3; + // OutputColor = cvg * ForeGround + (1.0 - cvg) * BackGround + temp = 7 - buffCvg[7]; + outR = buffR[7] + ((s32)(temp * (pmaxR + pminR - (buffR[7] * 2)) + 4) >> 3); + outG = buffG[7] + ((s32)(temp * (pmaxG + pminG - (buffG[7] * 2)) + 4) >> 3); + outB = buffB[7] + ((s32)(temp * (pmaxB + pminB - (buffB[7] * 2)) + 4) >> 3); + + pxOut.r = outR >> 3; + pxOut.g = outG >> 3; + pxOut.b = outB >> 3; pxOut.a = 1; this->fbufSave[x + y * this->width] = pxOut.rgba; } /** - * Applies an anti-alias filter to the current prerender + * Applies the Video Interface anti-aliasing filter to `this->fbufSave` using `this->cvgSave` */ -void PreRender_ApplyAntiAliasingFilter(PreRender* this) { +void PreRender_AntiAliasFilter(PreRender* this) { s32 x; s32 y; s32 cvg; + // Apply AA filter for (y = 0; y < this->height; y++) { for (x = 0; x < this->width; x++) { cvg = this->cvgSave[x + y * this->width]; @@ -389,49 +538,187 @@ void PreRender_ApplyAntiAliasingFilter(PreRender* this) { cvg++; if (cvg != 8) { - PreRender_AntiAliasAlgorithm(this, x, y); + // If this pixel has only partial coverage, perform the Video Filter interpolation on it + PreRender_AntiAliasFilterPixel(this, x, y); } } } } -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801716C4.s") +/** + * Selects the median value from 9 different 5-bit pixels: + * px1[0], px1[1], px1[2], px2[0], px2[1], px2[2], px3[0], px3[1], px3[2] + * all args are expected to be an array of 3 different 5-bit values + */ +u32 PreRender_Get5bMedian9(u8* px1, u8* px2, u8* px3) { + u8 pxValCount[32]; // Stores the count for each of the possible 32 5-bit pixel values + u32 pxCount; // Pixel count + s32 pxMed; // Pixel median value -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801717F8.s") + // Initialize count to 0 in groups of 4 bits + *(s32*)(&pxValCount[0]) = 0; + *(s32*)(&pxValCount[4]) = 0; + *(s32*)(&pxValCount[8]) = 0; + *(s32*)(&pxValCount[12]) = 0; + *(s32*)(&pxValCount[16]) = 0; + *(s32*)(&pxValCount[20]) = 0; + *(s32*)(&pxValCount[24]) = 0; + *(s32*)(&pxValCount[28]) = 0; + + // Increment the count that contains the pixel values + pxValCount[px1[0]]++; + pxValCount[px1[1]]++; + pxValCount[px1[2]]++; + + pxValCount[px2[0]]++; + pxValCount[px2[1]]++; + pxValCount[px2[2]]++; + + pxValCount[px3[0]]++; + pxValCount[px3[1]]++; + pxValCount[px3[2]]++; + + // Loop through the 32 bits until 5 values are found, then return that bit value. + // Note that the median of 9 is the 5th sequential value. + pxCount = 0; + pxMed = 0; + while (true) { + pxCount += pxValCount[pxMed]; + if (pxCount >= 5) { + // the median is found + break; + } + pxMed++; + } + + return pxMed; +} + +// Despite the name, this function doesn't seem like an hardware-accurate divot filter +void PreRender_DivotFilter(PreRender* this) { + u32 width = this->width; + u32 height = this->height; + u8* buffer = alloca(width * 10); + u8* redRow[3]; + u8* greenRow[3]; + u8* blueRow[3]; + u8* cvgFull; + Color_RGBA16 inPx; + Color_RGBA16 outPx; + u32 x; + u32 y; + s32 pad; + + redRow[0] = &buffer[width * 0]; + redRow[1] = &buffer[width * 1]; + redRow[2] = &buffer[width * 2]; + + greenRow[0] = &buffer[width * 3]; + greenRow[1] = &buffer[width * 4]; + greenRow[2] = &buffer[width * 5]; + + blueRow[0] = &buffer[width * 6]; + blueRow[1] = &buffer[width * 7]; + blueRow[2] = &buffer[width * 8]; + + cvgFull = &buffer[width * 9]; + + // Fill line buffers for first 2 rows + for (y = 0; y < 2; y++) { + for (x = 0; x < width; x++) { + inPx.rgba = this->fbufSave[x + y * this->width]; + + redRow[y][x] = inPx.r; + greenRow[y][x] = inPx.g; + blueRow[y][x] = inPx.b; + } + } + + // For each row in the image, except first and last + for (y = 1; y < height - 1; y++) { + // Find start of pixels and coverage for current line (bug? this should probably be fetching the NEXT line, but + // really the divot filter only cares about individual lines so it's already wrong) + u8* redRow2 = redRow[2]; + u8* greenRow2 = greenRow[2]; + u8* blueRow2 = blueRow[2]; + u8* lineCvg = &this->cvgSave[width * y]; + u16* linePx = &this->fbufSave[width * y]; + + // Obtain next row from current line, current line becomes the bottom row?? (weird, you would expect this to + // sample the NEXT line?) + for (x = 0; x < width; x++) { + inPx.rgba = linePx[x]; + + redRow2[x] = inPx.r; + greenRow2[x] = inPx.g; + blueRow2[x] = inPx.b; + + // checking for full coverage + cvgFull[x] = (lineCvg[x] >> 5) == 7; + } + + for (x = 1; x < width - 1; x++) { + // if the coverage of the three adjacent pixels on the current line are not all fully covered + if (cvgFull[x - 1] && cvgFull[x] && cvgFull[x + 1]) { + continue; + } + + // find median value in 3x3 square for each (r,g,b), replaces the pixel marked by X: + // * * * + // * * * + // * X * + outPx.r = PreRender_Get5bMedian9(&redRow[0][x - 1], &redRow[1][x - 1], &redRow[2][x - 1]); + outPx.g = PreRender_Get5bMedian9(&greenRow[0][x - 1], &greenRow[1][x - 1], &greenRow[2][x - 1]); + outPx.b = PreRender_Get5bMedian9(&blueRow[0][x - 1], &blueRow[1][x - 1], &blueRow[2][x - 1]); + outPx.a = 1; + + this->fbufSave[x + y * this->width] = outPx.rgba; + } + + // Shuffle row 1 -> 0 + redRow[0] = redRow[1]; + greenRow[0] = greenRow[1]; + blueRow[0] = blueRow[1]; + // Shuffle row 2 -> 1 + redRow[1] = redRow[2]; + greenRow[1] = greenRow[2]; + blueRow[1] = blueRow[2]; + } +} /** * Applies filters to the framebuffer prerender to make it look smoother */ void PreRender_ApplyFilters(PreRender* this) { if ((this->cvgSave == NULL) || (this->fbufSave == NULL)) { - this->unk_4D = 0; + this->filterState = PRERENDER_FILTER_STATE_NONE; } else { - this->unk_4D = 1; - PreRender_ApplyAntiAliasingFilter(this); - func_801717F8(this); - this->unk_4D = 2; + this->filterState = PRERENDER_FILTER_STATE_PROCESS; + PreRender_AntiAliasFilter(this); + PreRender_DivotFilter(this); + this->filterState = PRERENDER_FILTER_STATE_DONE; } } -extern SlowlyMgr sSlowlyMgr; -extern s32 D_801F6FC0; -extern StackEntry sSlowlyStackInfo; -extern STACK(sSlowlyStack, 0x1000); +SlowlyMgr sSlowlyMgr; +s32 sSlowlyRunning; +StackEntry sSlowlyStackInfo; +STACK(sSlowlyStack, 0x1000); /** * Initializes `PreRender_ApplyFilters` onto a new "slowly" thread */ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { if ((this->cvgSave != NULL) && (this->fbufSave != NULL)) { - if (D_801F6FC0) { + if (sSlowlyRunning) { StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Destroy(&sSlowlyMgr); } - this->unk_4D = 1; + this->filterState = PRERENDER_FILTER_STATE_PROCESS; StackCheck_Init(&sSlowlyStackInfo, sSlowlyStack, STACK_TOP(sSlowlyStack), 0, 0x100, "slowly"); Slowly_Init(&sSlowlyMgr, STACK_TOP(sSlowlyStack), (void*)PreRender_ApplyFilters, this, NULL); - D_801F6FC0 = true; + sSlowlyRunning = true; } } @@ -439,10 +726,10 @@ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { * Destroys the "slowly" thread */ void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this) { - if (D_801F6FC0) { + if (sSlowlyRunning) { StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Destroy(&sSlowlyMgr); - D_801F6FC0 = false; + sSlowlyRunning = false; } } @@ -453,26 +740,121 @@ void func_801720C4(PreRender* this) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801720FC.s") +typedef struct { + /* 0x00 */ void* timg; + /* 0x04 */ void* tlut; + /* 0x08 */ u16 width; + /* 0x0A */ u16 height; + /* 0x0C */ u8 fmt; + /* 0x0D */ u8 siz; + /* 0x0E */ u16 tt; + /* 0x10 */ u16 tlutCount; + /* 0x14 */ f32 x; + /* 0x18 */ f32 y; + /* 0x1C */ f32 xScale; + /* 0x20 */ f32 yScale; + /* 0x24 */ u32 flags; +} PreRenderBackground2DParams; // size = 0x28 + +void Prerender_DrawBackground2DImpl(PreRenderBackground2DParams* bg2D, Gfx** gfxp) { + Gfx* gfx; + uObjBg* bg; + u32 alphaCompare; + Gfx* gfxTemp; + u32 loadS2DEX2; + + loadS2DEX2 = (bg2D->flags & BG2D_FLAGS_LOAD_S2DEX2) != 0; + alphaCompare = (bg2D->flags & BG2D_FLAGS_AC_THRESHOLD) ? G_AC_THRESHOLD : G_AC_NONE; + + gfxTemp = *gfxp; + bg = Graph_DlistAlloc(&gfxTemp, sizeof(uObjBg)); + gfx = gfxTemp; + + bg->b.imageX = 0; + bg->b.imageW = (bg2D->width * (1 << 2)) + 1; + bg->b.frameX = bg2D->x * (1 << 2); + + bg->b.imageY = 0; + bg->b.imageH = (bg2D->height * (1 << 2)) + 1; + bg->b.frameY = bg2D->y * (1 << 2); + + bg->b.imagePtr = bg2D->timg; + bg->b.imageLoad = G_BGLT_LOADTILE; + bg->b.imageFmt = bg2D->fmt; + bg->b.imageSiz = bg2D->siz; + bg->b.imagePal = 0; + bg->b.imageFlip = 0; + + if (loadS2DEX2) { + gSPLoadUcodeL(gfx++, gspS2DEX2_fifo); + } + + if ((bg2D->fmt == G_IM_FMT_CI) && (bg2D->tlut != NULL)) { + gDPLoadTLUT(gfx++, bg2D->tlutCount, 256, bg2D->tlut); + } else { + gDPPipeSync(gfx++); + } + + if (bg2D->flags & BG2D_FLAGS_COPY) { + bg->b.frameW = bg2D->width * (1 << 2); + bg->b.frameH = bg2D->height * (1 << 2); + + guS2DInitBg(bg); + + if (!(bg2D->flags & BG2D_FLAGS_1)) { + gDPSetOtherMode(gfx++, bg2D->tt | G_CYC_COPY, alphaCompare); + } + + gSPBgRectCopy(gfx++, bg); + } else { + bg->b.frameW = (u32)(bg2D->width * (1 << 2)) * bg2D->xScale; + bg->b.frameH = (u32)(bg2D->height * (1 << 2)) * bg2D->yScale; + bg->b.tmemW = (1 << 10) / bg2D->xScale; + bg->b.tmemH = (1 << 10) / bg2D->yScale; + bg->s.imageYorig = bg->b.imageY; + + if (!(bg2D->flags & BG2D_FLAGS_1)) { + gDPSetOtherMode(gfx++, bg2D->tt | G_AD_DISABLE | G_CD_DISABLE | G_TC_FILT, + AA_EN | CVG_X_ALPHA | ALPHA_CVG_SEL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_BL, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_BL, G_BL_1MA) | alphaCompare); + } + + if (!(bg2D->flags & BG2D_FLAGS_2)) { + gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 0, 0, 0, 1, 0, 0, 0, TEXEL0, 0, 0, 0, 1); + } + + gSPObjRenderMode(gfx++, G_OBJRM_ANTIALIAS | G_OBJRM_BILERP); + gSPBgRect1Cyc(gfx++, bg); + } + + gDPPipeSync(gfx++); + + if (loadS2DEX2) { + gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); + } + + *gfxp = gfx; +} void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, - u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags) { - PreRenderParams params; - PreRenderParams* paramsp = ¶ms; + u16 tlutCount, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags) { + PreRenderBackground2DParams bg2D; + PreRenderBackground2DParams* bg2DPtr = &bg2D; - params.timg = timg; - params.tlut = tlut; - params.width = width; - params.height = height; - params.fmt = fmt; - params.siz = siz; - params.tt = tt; - params.unk_10 = arg8; - params.x = x; - params.y = y; - params.xScale = xScale; - params.yScale = yScale; - params.flags = flags; + bg2D.timg = timg; + bg2D.tlut = tlut; + bg2D.width = width; + bg2D.height = height; + bg2D.fmt = fmt; + bg2D.siz = siz; + bg2D.tt = tt; + bg2D.tlutCount = tlutCount; + bg2D.x = x; + bg2D.y = y; + bg2D.xScale = xScale; + bg2D.yScale = yScale; + bg2D.flags = flags; - func_801720FC(paramsp, gfxp); + Prerender_DrawBackground2DImpl(bg2DPtr, gfxp); } diff --git a/src/code/listalloc.c b/src/code/listalloc.c index 33f9989ba..ba346d954 100644 --- a/src/code/listalloc.c +++ b/src/code/listalloc.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "listalloc.h" #include "system_malloc.h" ListAlloc* ListAlloc_Init(ListAlloc* this) { diff --git a/src/code/z_actor.c b/src/code/z_actor.c index cef3c89da..a69dada41 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2892,7 +2892,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors play->pauseBgPreRender.fbuf); gfxTemp = gfx; - func_8016FDB8(&play->pauseBgPreRender, &gfxTemp, spA4, zbuffer, 1); + PreRender_CopyImage(&play->pauseBgPreRender, &gfxTemp, spA4, zbuffer, true); gfx = gfxTemp; } diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index d9abe151d..5d1299bbf 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #include "interface/parameter_static/parameter_static.h" diff --git a/src/code/z_play.c b/src/code/z_play.c index 48fbb1f2d..9bb8d5817 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -83,7 +83,7 @@ void Play_DrawMotionBlur(PlayState* this) { sMotionBlurStatus = MOTION_BLUR_PROCESS; } - func_801705B4(&this->pauseBgPreRender, &gfx); + PreRender_SaveFramebuffer(&this->pauseBgPreRender, &gfx); gSPEndDisplayList(gfx++); @@ -1267,8 +1267,8 @@ void Play_DrawMain(PlayState* this) { if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { Gfx* sp8C = POLY_OPA_DISP; - if (this->pauseBgPreRender.unk_4D == 2) { - func_80170B28(&this->pauseBgPreRender, &sp8C); + if (this->pauseBgPreRender.filterState == PRERENDER_FILTER_STATE_DONE) { + PreRender_RestoreFramebuffer(&this->pauseBgPreRender, &sp8C); } else { func_80170798(&this->pauseBgPreRender, &sp8C); } @@ -1405,10 +1405,10 @@ void Play_DrawMain(PlayState* this) { this->pauseBgPreRender.cvgSave = NULL; } - func_801705B4(&this->pauseBgPreRender, &sp74); + PreRender_SaveFramebuffer(&this->pauseBgPreRender, &sp74); if (this->pauseBgPreRender.cvgSave != NULL) { - func_80170730(&this->pauseBgPreRender, &sp74); + PreRender_DrawCoverage(&this->pauseBgPreRender, &sp74); } gSPEndDisplayList(sp74++); diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index f31b6d308..764b00224 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -4,6 +4,7 @@ * Description: Woodfall scene objects (temple, water, walls, etc) */ +#include "prevent_bss_reordering.h" #include "z_dm_char01.h" #include "objects/object_mtoride/object_mtoride.h" #include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e3c54b894..3f8a338d0 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3057,28 +3057,28 @@ 0x8016FD2C:("PreRender_Init",), 0x8016FD60:("PreRender_SetValues",), 0x8016FD94:("PreRender_Destroy",), - 0x8016FDB8:("func_8016FDB8",), - 0x8016FF70:("func_8016FF70",), + 0x8016FDB8:("PreRender_CopyImage",), + 0x8016FF70:("PreRender_RestoreBuffer",), 0x8016FF90:("func_8016FF90",), 0x80170200:("func_80170200",), - 0x8017023C:("func_8017023C",), - 0x8017057C:("func_8017057C",), - 0x801705B4:("func_801705B4",), - 0x801705EC:("func_801705EC",), - 0x80170730:("func_80170730",), - 0x80170774:("func_80170774",), + 0x8017023C:("PreRender_CoverageRgba16ToI8",), + 0x8017057C:("PreRender_SaveZBuffer",), + 0x801705B4:("PreRender_SaveFramebuffer",), + 0x801705EC:("PreRender_FetchFbufCoverage",), + 0x80170730:("PreRender_DrawCoverage",), + 0x80170774:("PreRender_RestoreZBuffer",), 0x80170798:("func_80170798",), 0x80170AE0:("func_80170AE0",), - 0x80170B28:("func_80170B28",), - 0x80170B4C:("PreRender_AntiAliasAlgorithm",), - 0x8017160C:("PreRender_ApplyAntiAliasingFilter",), - 0x801716C4:("func_801716C4",), - 0x801717F8:("func_801717F8",), + 0x80170B28:("PreRender_RestoreFramebuffer",), + 0x80170B4C:("PreRender_AntiAliasFilterPixel",), + 0x8017160C:("PreRender_AntiAliasFilter",), + 0x801716C4:("PreRender_Get5bMedian9",), + 0x801717F8:("PreRender_DivotFilter",), 0x80171F4C:("PreRender_ApplyFilters",), 0x80171FA8:("PreRender_ApplyFiltersSlowlyInit",), 0x80172078:("PreRender_ApplyFiltersSlowlyDestroy",), 0x801720C4:("func_801720C4",), - 0x801720FC:("func_801720FC",), + 0x801720FC:("Prerender_DrawBackground2DImpl",), 0x80172758:("Prerender_DrawBackground2D",), 0x801727F0:("THGA_Init",), 0x80172810:("THGA_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 2da44bc71..ba2889d54 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4021,7 +4021,7 @@ 0x801F6DFC:("sBombersNotebookOpen","u8","",0x1), 0x801F6DFD:("sMotionBlurStatus","UNK_TYPE1","",0x1), 0x801F6E00:("sSlowlyMgr","SlowlyMgr","",0x1c0), - 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), + 0x801F6FC0:("sSlowlyRunning","UNK_TYPE1","",0x1), 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c), 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), 0x801F7FF0:("sGameSpeedMeter","SpeedMeter","", 0x20), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index ba509ef78..929ae61a7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2571,28 +2571,28 @@ asm/non_matchings/code/PreRender/PreRender_SetValuesSave.s,PreRender_SetValuesSa asm/non_matchings/code/PreRender/PreRender_Init.s,PreRender_Init,0x8016FD2C,0xD asm/non_matchings/code/PreRender/PreRender_SetValues.s,PreRender_SetValues,0x8016FD60,0xD asm/non_matchings/code/PreRender/PreRender_Destroy.s,PreRender_Destroy,0x8016FD94,0x9 -asm/non_matchings/code/PreRender/func_8016FDB8.s,func_8016FDB8,0x8016FDB8,0x6E -asm/non_matchings/code/PreRender/func_8016FF70.s,func_8016FF70,0x8016FF70,0x8 +asm/non_matchings/code/PreRender/PreRender_CopyImage.s,PreRender_CopyImage,0x8016FDB8,0x6E +asm/non_matchings/code/PreRender/PreRender_RestoreBuffer.s,PreRender_RestoreBuffer,0x8016FF70,0x8 asm/non_matchings/code/PreRender/func_8016FF90.s,func_8016FF90,0x8016FF90,0x9C asm/non_matchings/code/PreRender/func_80170200.s,func_80170200,0x80170200,0xF -asm/non_matchings/code/PreRender/func_8017023C.s,func_8017023C,0x8017023C,0xD0 -asm/non_matchings/code/PreRender/func_8017057C.s,func_8017057C,0x8017057C,0xE -asm/non_matchings/code/PreRender/func_801705B4.s,func_801705B4,0x801705B4,0xE -asm/non_matchings/code/PreRender/func_801705EC.s,func_801705EC,0x801705EC,0x51 -asm/non_matchings/code/PreRender/func_80170730.s,func_80170730,0x80170730,0x11 -asm/non_matchings/code/PreRender/func_80170774.s,func_80170774,0x80170774,0x9 +asm/non_matchings/code/PreRender/PreRender_CoverageRgba16ToI8.s,PreRender_CoverageRgba16ToI8,0x8017023C,0xD0 +asm/non_matchings/code/PreRender/PreRender_SaveZBuffer.s,PreRender_SaveZBuffer,0x8017057C,0xE +asm/non_matchings/code/PreRender/PreRender_SaveFramebuffer.s,PreRender_SaveFramebuffer,0x801705B4,0xE +asm/non_matchings/code/PreRender/PreRender_FetchFbufCoverage.s,PreRender_FetchFbufCoverage,0x801705EC,0x51 +asm/non_matchings/code/PreRender/PreRender_DrawCoverage.s,PreRender_DrawCoverage,0x80170730,0x11 +asm/non_matchings/code/PreRender/PreRender_RestoreZBuffer.s,PreRender_RestoreZBuffer,0x80170774,0x9 asm/non_matchings/code/PreRender/func_80170798.s,func_80170798,0x80170798,0xD2 asm/non_matchings/code/PreRender/func_80170AE0.s,func_80170AE0,0x80170AE0,0x12 -asm/non_matchings/code/PreRender/func_80170B28.s,func_80170B28,0x80170B28,0x9 -asm/non_matchings/code/PreRender/PreRender_AntiAliasAlgorithm.s,PreRender_AntiAliasAlgorithm,0x80170B4C,0x2B0 -asm/non_matchings/code/PreRender/PreRender_ApplyAntiAliasingFilter.s,PreRender_ApplyAntiAliasingFilter,0x8017160C,0x2E -asm/non_matchings/code/PreRender/func_801716C4.s,func_801716C4,0x801716C4,0x4D -asm/non_matchings/code/PreRender/func_801717F8.s,func_801717F8,0x801717F8,0x1D5 +asm/non_matchings/code/PreRender/PreRender_RestoreFramebuffer.s,PreRender_RestoreFramebuffer,0x80170B28,0x9 +asm/non_matchings/code/PreRender/PreRender_AntiAliasFilterPixel.s,PreRender_AntiAliasFilterPixel,0x80170B4C,0x2B0 +asm/non_matchings/code/PreRender/PreRender_AntiAliasFilter.s,PreRender_AntiAliasFilter,0x8017160C,0x2E +asm/non_matchings/code/PreRender/PreRender_Get5bMedian9.s,PreRender_Get5bMedian9,0x801716C4,0x4D +asm/non_matchings/code/PreRender/PreRender_DivotFilter.s,PreRender_DivotFilter,0x801717F8,0x1D5 asm/non_matchings/code/PreRender/PreRender_ApplyFilters.s,PreRender_ApplyFilters,0x80171F4C,0x17 asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyInit.s,PreRender_ApplyFiltersSlowlyInit,0x80171FA8,0x34 asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyDestroy.s,PreRender_ApplyFiltersSlowlyDestroy,0x80172078,0x13 asm/non_matchings/code/PreRender/func_801720C4.s,func_801720C4,0x801720C4,0xE -asm/non_matchings/code/PreRender/func_801720FC.s,func_801720FC,0x801720FC,0x197 +asm/non_matchings/code/PreRender/Prerender_DrawBackground2DImpl.s,Prerender_DrawBackground2DImpl,0x801720FC,0x197 asm/non_matchings/code/PreRender/Prerender_DrawBackground2D.s,Prerender_DrawBackground2D,0x80172758,0x26 asm/non_matchings/code/TwoHeadGfxArena/THGA_Init.s,THGA_Init,0x801727F0,0x8 asm/non_matchings/code/TwoHeadGfxArena/THGA_Destroy.s,THGA_Destroy,0x80172810,0x8 From fa71fbeaab8631bcd2bfd8d68e1b73f1b4d1801e Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Tue, 19 Sep 2023 07:04:23 +0200 Subject: [PATCH 17/74] Stone Tower Smoke (#1382) * funen xml * description * outname --- assets/xml/objects/object_funen.xml | 5 +++-- src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/xml/objects/object_funen.xml b/assets/xml/objects/object_funen.xml index 7a0410008..0f9d0a484 100644 --- a/assets/xml/objects/object_funen.xml +++ b/assets/xml/objects/object_funen.xml @@ -1,6 +1,7 @@  + - - + + 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 409cbd837..a75a43cda 100644 --- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c +++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c @@ -43,6 +43,6 @@ void ObjFunen_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, temp, 0x20, 0x20, 1, 0, temp, 0x20, 0x20)); - gSPDisplayList(POLY_XLU_DISP++, object_funen_DL_0000D0); + gSPDisplayList(POLY_XLU_DISP++, gStoneTowerSmokeDL); CLOSE_DISPS(play->state.gfxCtx); } From d353e56be6201e0a981c4573145d5a8885fbb41d Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:28:00 +0200 Subject: [PATCH 18/74] removed TransformUpdateIndex in z_demo_tre_lgt.c (#1386) --- src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index fdfcd67de..6ca5da41f 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -47,7 +47,7 @@ ActorInit Demo_Tre_Lgt_InitVars = { (ActorFunc)DemoTreLgt_Draw, }; -static TransformUpdateIndex* sBoxLightAnimations[] = { +static CurveAnimationHeader* sBoxLightAnimations[] = { &gBoxLightAdultCurveAnim, &gBoxLightChildCurveAnim, }; From 19a605c2e7313ff4227527fcd6753684c49ba9eb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 22 Sep 2023 08:57:21 -0700 Subject: [PATCH 19/74] master to main rename (#1379) * master -> main * Missed some instances of master --- Jenkinsfile | 4 ++-- README.md | 4 ++-- docs/CONTRIBUTING.md | 12 ++++++------ docs/REVIEWING.md | 2 +- docs/tutorial/beginning_decomp.md | 4 ++-- docs/tutorial/data.md | 2 +- docs/tutorial/diff_and_permuter.md | 2 +- docs/tutorial/draw_functions.md | 2 +- docs/tutorial/intro_to_git.md | 8 ++++---- docs/tutorial/merging.md | 6 +++--- docs/tutorial/object_decomp.md | 4 ++-- 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index a627ead7c..15a40c7eb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -84,7 +84,7 @@ pipeline { } stage('Report Progress') { when { - branch 'master' + branch 'main' } steps { sh 'mkdir reports' @@ -96,7 +96,7 @@ pipeline { } stage('Update Progress') { when { - branch 'master' + branch 'main' } agent{ label 'zeldaret_website' diff --git a/README.md b/README.md index d94b47950..89d651dbd 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Build Status][jenkins-badge]][jenkins] [![Decompilation Progress][progress-badge]][progress] [![Contributors][contributors-badge]][contributors] [![Discord Channel][discord-badge]][discord] -[jenkins]: https://jenkins.deco.mp/job/MM/job/master -[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.deco.mp%2Fjob%2FMM%2Fjob%2Fmaster +[jenkins]: https://jenkins.deco.mp/job/MM/job/main +[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.deco.mp%2Fjob%2FMM%2Fjob%2Fmain [progress]: https://zelda64.dev/games/mm [progress-badge]: https://img.shields.io/endpoint?url=https://zelda64.dev/assets/csv/progress-mm-shield.json diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 2a5578e4e..f5a042846 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -4,19 +4,19 @@ Thanks for helping us reverse engineer *The Legend of Zelda: Majora's Mask* for All contributions are welcome. This is a group effort, and even small contributions can make a difference. Some tasks also don't require much knowledge to get started. This document is meant to be a set of tips and guidelines for contributing to the project. -For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/master/README.md). +For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/main/README.md). Most discussions happen on our [Discord Server](https://discord.zelda64.dev) where you are welcome to ask if you need help getting started, or if you have any questions regarding this project and other decompilation projects. ## Useful Links -- [Installation guide](https://github.com/zeldaret/mm/blob/master/README.md#installation) - Instructions for getting this repository set up and built on your machine. +- [Installation guide](https://github.com/zeldaret/mm/blob/main/README.md#installation) - Instructions for getting this repository set up and built on your machine. - [Style Guide](STYLE.md) - Description of the project style that we ask contributors to adhere to. - [Code Review Guidelines](REVIEWING.md) - These are the guidelines that reviewers will be using when reviewing your code. Good to be familiar with these before submitting your code. - [Zelda 64 Reverse Engineering Website](https://zelda64.dev/games/mm) - Our homepage, with FAQ and progress graph :chart_with_upwards_trend:. - [MM decomp tutorial](tutorial/contents.md) Detailed tutorial for learning in general how decomp works and how to decompile a small, simple file. -- [Introduction to OOT decomp](https://github.com/zeldaret/oot/blob/master/docs/tutorial/contents.md) - The tutorial the MM one was based on. For OOT, but largely applicable to MM as well. Covers slightly different topics, including how to get your data OK with `vbindiff`. +- [Introduction to OOT decomp](https://github.com/zeldaret/oot/blob/main/docs/tutorial/contents.md) - The tutorial the MM one was based on. For OOT, but largely applicable to MM as well. Covers slightly different topics, including how to get your data OK with `vbindiff`. - The `#resources` channel on the Discord contains many more links on specific details of decompiling IDO MIPS code. ## Getting Started @@ -37,7 +37,7 @@ This project only uses *publicly available code*. ### Environment Setup -Get started by following the [installation guide in the readme](https://github.com/zeldaret/mm/blob/master/README.md#installation). +Get started by following the [installation guide in the readme](https://github.com/zeldaret/mm/blob/main/README.md#installation). You should be able to build a matching ROM before you start making any changes. ### First Contribution @@ -142,8 +142,8 @@ Project leads are responsible for ensuring that these conventions are followed. ### Some git notes -- You should work on a branch on your fork separate from your copy of master: it is always useful to have a clean master branch around if you need to fix something. -- When a PR is merged into master, it may conflict with your work. While your branch is private (in particular, not used for a PR), you can rebase, but when your branch is public/used for a PR always merge master instead of rebasing: it makes it much easier for people to understand what you changed since the last review. +- You should work on a branch on your fork separate from your copy of main: it is always useful to have a clean main branch around if you need to fix something. +- When a PR is merged into main, it may conflict with your work. While your branch is private (in particular, not used for a PR), you can rebase, but when your branch is public/used for a PR always merge main instead of rebasing: it makes it much easier for people to understand what you changed since the last review. - We squash commits when merging, so your commit history does not have to be completely spotless. Throughout the PR process, you (the author) should update the rows on the appropriate Google Sheets with the appropriate information as the decompilation process progresses. diff --git a/docs/REVIEWING.md b/docs/REVIEWING.md index b7f97bdea..3fc160729 100644 --- a/docs/REVIEWING.md +++ b/docs/REVIEWING.md @@ -5,7 +5,7 @@ We encourage all contributors to participate in code review: this is your codeba Every review submitted helps us keep code quality high and code merged in more quickly. This document is meant to be a set of tips and guidelines for reviewers of pull requests to the project. -For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/master/README.md). +For general information about the project, see [our readme](https://github.com/zeldaret/mm/blob/main/README.md). Most discussions happen on our [Discord Server](https://discord.zelda64.dev) where you are welcome to ask if you need help getting started, or if you have any questions regarding this project and other decompilation projects. diff --git a/docs/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md index 591f12a2b..2685f9276 100644 --- a/docs/tutorial/beginning_decomp.md +++ b/docs/tutorial/beginning_decomp.md @@ -175,7 +175,7 @@ The Init function sets up the various components of the actor when it is first l The first stage of decompilation is done by a program called mips_to_c, often referred to as mips2c, which constructs a C interpretation of the assembly code based on reading it very literally. This means that considerable cleanup will be required to turn it into something that firstly compiles at all, and secondly looks like a human wrote it, let alone a Zelda developer from the late '90s. -The web version of mips2c can be found [here](https://simonsoftware.se/other/mips_to_c.py). This was [covered in the OoT tutorial](https://github.com/zeldaret/oot/blob/master/docs/tutorial/beginning_decomp.md). We shall instead use the repository. Clone [the mips_to_c repository](https://github.com/matt-kempster/mips_to_c) into a separate directory (we will assume on the same level as the `mm/` directory). Since it's Python, we don't have to do any compilation or anything in the mips_to_c directory. +The web version of mips2c can be found [here](https://simonsoftware.se/other/mips_to_c.py). This was [covered in the OoT tutorial](https://github.com/zeldaret/oot/blob/main/docs/tutorial/beginning_decomp.md). We shall instead use the repository. Clone [the mips_to_c repository](https://github.com/matt-kempster/mips_to_c) into a separate directory (we will assume on the same level as the `mm/` directory). Since it's Python, we don't have to do any compilation or anything in the mips_to_c directory. Since the actor depends on the rest of the codebase, we can't expect to get much intelligible out of mips2c without giving it some context. We make this using a Python script in the `tools` directory called `m2ctx.py`, so run @@ -686,7 +686,7 @@ as our first guess. This doesn't look unreasonable... the question is, does it m Once preliminary cleanup and struct filling is done, most time spent matching functions is done by comparing the original code with the code you have compiled. This is aided by a program called `diff.py`. -In order to use `diff.py` with the symbol names, we need a copy of the code to compare against. In MM this is done as part of `make init`, and you can regenerate the `expected` directory (which is simply a known-good copy of `build` directory) by running `make diff-init`, which will check for an OK ROM and copy the build directory over. (Of course you need an OK ROM to do this; worst-case, you can checkout master and do a complete rebuild to get it). (You need to remake `expected` if you want to diff a function you have renamed: `diff.py` looks in the mapfiles for the function name, which won't work if the name has changed!) +In order to use `diff.py` with the symbol names, we need a copy of the code to compare against. In MM this is done as part of `make init`, and you can regenerate the `expected` directory (which is simply a known-good copy of `build` directory) by running `make diff-init`, which will check for an OK ROM and copy the build directory over. (Of course you need an OK ROM to do this; worst-case, you can checkout main and do a complete rebuild to get it). (You need to remake `expected` if you want to diff a function you have renamed: `diff.py` looks in the mapfiles for the function name, which won't work if the name has changed!) Now, we run diff on the function name: in the main directory, diff --git a/docs/tutorial/data.md b/docs/tutorial/data.md index 6884ebb12..07ea8cfac 100644 --- a/docs/tutorial/data.md +++ b/docs/tutorial/data.md @@ -27,7 +27,7 @@ Both approaches have their advantages and disadvantages. ## Data first -This way is good for smaller actors with little data. The OoT tutorial [covers this in plenty of detail](https://github.com/zeldaret/oot/blob/master/docs/tutorial/data.md), and the process in MM is essentially identical, so we won't go over it here. +This way is good for smaller actors with little data. The OoT tutorial [covers this in plenty of detail](https://github.com/zeldaret/oot/blob/main/docs/tutorial/data.md), and the process in MM is essentially identical, so we won't go over it here. ## Extern and data last diff --git a/docs/tutorial/diff_and_permuter.md b/docs/tutorial/diff_and_permuter.md index 2b5d41e30..e8d0f59f7 100644 --- a/docs/tutorial/diff_and_permuter.md +++ b/docs/tutorial/diff_and_permuter.md @@ -2,7 +2,7 @@ This document is intended as a step-by-step demonstration of matching a reasonably complex function using the diff script `diff.py` and the decomp permuter, both included in the repo. For general information on both see [the tools documentation](../tools.md). -Until such time as someone finds a suitable function, you can look at the OoT tutorial: [here for diff.py](https://github.com/zeldaret/oot/blob/master/docs/tutorial/beginning_decomp.md#diff) and [here for the permuter](https://github.com/zeldaret/oot/blob/master/docs/tutorial/other_functions.md#the-permuter). +Until such time as someone finds a suitable function, you can look at the OoT tutorial: [here for diff.py](https://github.com/zeldaret/oot/blob/main/docs/tutorial/beginning_decomp.md#diff) and [here for the permuter](https://github.com/zeldaret/oot/blob/main/docs/tutorial/other_functions.md#the-permuter). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index 5f8c616e5..233a9605c 100644 --- a/spec +++ b/spec @@ -2057,8 +2057,7 @@ beginseg name "ovl_En_Ge3" compress include "build/src/overlays/actors/ovl_En_Ge3/z_en_ge3.o" - include "build/data/ovl_En_Ge3/ovl_En_Ge3.data.o" - include "build/data/ovl_En_Ge3/ovl_En_Ge3.reloc.o" + include "build/src/overlays/actors/ovl_En_Ge3/ovl_En_Ge3_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index 8baf9c0a3..e55d0746e 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -1,7 +1,7 @@ /* * File: z_en_ge3.c * Overlay: ovl_En_Ge3 - * Description: Aviel + * Description: Aviel, leader of the Gerudo Pirates */ #include "z_en_ge3.h" @@ -15,7 +15,26 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play); void EnGe3_Update(Actor* thisx, PlayState* play); void EnGe3_Draw(Actor* thisx, PlayState* play); -#if 0 +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe3_SetupPath(EnGe3* this, PlayState* play); +void EnGe3_Idle(EnGe3* this, PlayState* play); +void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play); +s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx); + +typedef enum GerudoAveilAnimation { + /* -1 */ GERUDO_AVEIL_ANIM_NONE = -1, + /* 0 */ GERUDO_AVEIL_ANIM_STAND, + /* 1 */ GERUDO_AVEIL_ANIM_WALK, + /* 2 */ GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, + /* 3 */ GERUDO_AVEIL_ANIM_TURN_HEAD, + /* 4 */ GERUDO_AVEIL_ANIM_WAIT, + /* 5 */ GERUDO_AVEIL_ANIM_DEMAND, + /* 6 */ GERUDO_AVEIL_ANIM_DISMISS, + /* 7 */ GERUDO_AVEIL_ANIM_BEG, + /* 8 */ GERUDO_AVEIL_ANIM_RUN_AWAY, + /* 9 */ GERUDO_AVEIL_ANIM_MAX +} GerudoAveilAnimation; + ActorInit En_Ge3_InitVars = { ACTOR_EN_GE3, ACTORCAT_NPC, @@ -28,49 +47,386 @@ ActorInit En_Ge3_InitVars = { (ActorFunc)EnGe3_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_809A0DA0 = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000222, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0x01000222, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 20, 50, 0, { 0, 0, 0 } }, }; -#endif +void EnGe3_Init(Actor* thisx, PlayState* play) { + s32 pad; + EnGe3* this = THIS; -extern ColliderCylinderInit D_809A0DA0; + ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoRedSkel, NULL, this->jointTable, this->morphTable, + GERUDO_RED_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gGerudoRedHandOnHipWaitAnim); + Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); + this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE; + Actor_SetScale(&this->picto.actor, 0.01f); -extern UNK_TYPE D_0600A808; + this->animIndex = GERUDO_AVEIL_ANIM_NONE; + this->cueId = GERUDO_AVEIL_CUEID_NONE; + this->picto.validationFunc = EnGe3_ValidatePictograph; + EnGe3_SetupPath(this, play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Init.s") + if (GERUDO_AVEIL_GET_TYPE(&this->picto.actor) == GERUDO_AVEIL_TYPE_AVEILS_CHAMBER) { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f); + this->actionFunc = EnGe3_AveilsChamberIdle; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Destroy.s") + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) { + Actor_Kill(&this->picto.actor); + return; + } + } else { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WALK, ANIMMODE_LOOP, 0.0f); + this->actionFunc = EnGe3_Idle; + this->picto.actor.speed = 1.5f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0070.s") + this->stateFlags = 0; + this->picto.actor.targetMode = 6; + this->picto.actor.terminalVelocity = -4.0f; + this->picto.actor.gravity = -1.0f; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A00F8.s") +void EnGe3_Destroy(Actor* thisx, PlayState* play) { + EnGe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A020C.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A024C.s") +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { + static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = { + &gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND + &gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK + &gGerudoRedHandOnHipWaitAnim, // GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT + &gGerudoRedTurnHeadAnim, // GERUDO_AVEIL_ANIM_TURN_HEAD + &gGerudoRedWaitAnim, // GERUDO_AVEIL_ANIM_WAIT + &gGerudoRedDemandAnim, // GERUDO_AVEIL_ANIM_DEMAND + &gGerudoRedDismissAnim, // GERUDO_AVEIL_ANIM_DISMISS + &gGerudoRedBegAnim, // GERUDO_AVEIL_ANIM_BEG + &gGerudoRedRunAwayAnim, // GERUDO_AVEIL_ANIM_RUN_AWAY + }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0350.s") + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + this->animIndex = animIndex; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03AC.s") +void EnGe3_LookAtPlayer(EnGe3* this, PlayState* play) { + s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A03FC.s") + if ((ABS_ALT(yawDiff) <= 0x2300) && (this->picto.actor.xzDistToPlayer < 100.0f)) { + Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos); + } else { + Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->torsoRot.x, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->torsoRot.y, 0, 6, 0x1838, 0x64); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A04D0.s") +void EnGe3_SetupPath(EnGe3* this, PlayState* play) { + this->curPointIndex = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0820.s") + if (GERUDO_AVEIL_GET_PATH(&this->picto.actor) != GERUDO_AVEIL_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_AVEIL_GET_PATH(&this->picto.actor)]; + } else { + this->path = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A08A4.s") +/** + * @return true if no path or reached end of path + */ +s32 EnGe3_FollowPath(EnGe3* this) { + Path* path = this->path; + Vec3s* curPoint; + f32 diffX; + f32 diffZ; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Update.s") + if (path == NULL) { + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A096C.s") + curPoint = Lib_SegmentedToVirtual(path->points); + curPoint += this->curPointIndex; + diffX = curPoint->x - this->picto.actor.world.pos.x; + diffZ = curPoint->z - this->picto.actor.world.pos.z; + this->picto.actor.world.rot.y = Math_Atan2S(diffX, diffZ); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0x7D0, 0xC8); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0A14.s") + if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) { + this->curPointIndex++; + if (this->curPointIndex >= path->count) { + return true; + } + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/func_809A0C60.s") +void EnGe3_Scream(EnGe3* this) { + if ((s32)Rand_ZeroFloat(2.0f) == 0) { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00); + } else { + Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge3/EnGe3_Draw.s") +void EnGe3_Idle(EnGe3* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + EnGe3_LookAtPlayer(this, play); + + if (EnGe3_FollowPath(this)) { + EnGe3_SetupPath(this, play); + } +} + +void EnGe3_ThrowPlayerOut(EnGe3* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100); + + if (this->actionTimer > 0) { + this->actionTimer--; + } else if (play->nextEntrance != play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]) { + play->nextEntrance = play->setupExitList[GERUDO_AVEIL_GET_EXIT(&this->picto.actor)]; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_38; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_80_08); + } +} + +void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play) { + if (SkelAnime_Update(&this->skelAnime) && (this->cueId == GERUDO_AVEIL_CUEID_INSTRUCT)) { + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_WAIT, ANIMMODE_ONCE, 0.0f); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_108)) { + s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)]->id; + + if (this->cueId != GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) { + Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_108)); + } + + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + // Both cutscenes + case GERUDO_AVEIL_CUEID_WAIT: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT, ANIMMODE_LOOP, 0.0f); + break; + + // Instructing expedition leader cutscene + case GERUDO_AVEIL_CUEID_PAUSE: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f); + this->skelAnime.playSpeed = 0.0f; + break; + + case GERUDO_AVEIL_CUEID_INSTRUCT: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_TURN_HEAD, ANIMMODE_ONCE, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_DEMAND: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DEMAND, ANIMMODE_LOOP, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_DISMISS: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_DISMISS, ANIMMODE_ONCE, 0.0f); + break; + + case GERUDO_AVEIL_CUEID_BEG: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_BEG, ANIMMODE_LOOP, 0.0f); + break; + + // Fleeing from bees cutscene + case GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY: + EnGe3_ChangeAnim(this, GERUDO_AVEIL_ANIM_RUN_AWAY, ANIMMODE_LOOP, 0.0f); + this->picto.actor.speed = 5.0f; + this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); + break; + + case GERUDO_AVEIL_CUEID_BEEHIVE_VANISH: + Actor_Kill(&this->picto.actor); + break; + + default: + break; + } + + SkelAnime_Update(&this->skelAnime); + } + } else if ((this->picto.actor.xzDistToPlayer < 700.0f) && (fabsf(this->picto.actor.playerHeightRel) < 100.0f) && + !Play_InCsMode(play)) { + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_26); + Lib_PlaySfx(NA_SE_SY_FOUND); + + if (Player_GetMask(play) == PLAYER_MASK_STONE) { // Not fooled by Stone Mask + Message_StartTextbox(play, 0x11AF, &this->picto.actor); + } else { + Message_StartTextbox(play, 0x11AE, &this->picto.actor); + } + + this->actionFunc = EnGe3_ThrowPlayerOut; + this->actionTimer = 50; + SET_WEEKEVENTREG(WEEKEVENTREG_80_08); + } + + if (this->cueId == GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY) { + this->picto.actor.speed = 5.0f; + EnGe3_FollowPath(this); + + if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) { + Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK); + } + + if (this->screamTimer > 0) { + this->screamTimer--; + } else { + this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); + EnGe3_Scream(this); + } + } +} + +void EnGe3_UpdateColliderAndMove(Actor* thisx, PlayState* play) { + s32 pad; + EnGe3* this = THIS; + + Collider_UpdateCylinder(&this->picto.actor, &this->collider); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + Actor_MoveWithGravity(&this->picto.actor); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); +} + +void EnGe3_Blink(EnGe3* this, PlayState* play) { + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); + } + + this->eyeIndex = this->blinkTimer; + + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; + } +} + +void EnGe3_Update(Actor* thisx, PlayState* play) { + EnGe3* this = THIS; + + EnGe3_UpdateColliderAndMove(&this->picto.actor, play); + this->actionFunc(this, play); + EnGe3_Blink(this, play); +} + +s32 EnGe3_ValidatePictograph(PlayState* play, Actor* thisx) { + s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + 400.0f, -1); + + ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + 1200.0f, -1); + + return ret; +} + +s32 EnGe3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnGe3* this = THIS; + + switch (limbIndex) { + case GERUDO_RED_LIMB_VEIL: + case GERUDO_RED_LIMB_RIGHT_SWORD: + case GERUDO_RED_LIMB_LEFT_SWORD: + *dList = NULL; + return false; + + case GERUDO_RED_LIMB_HEAD: + rot->x += this->headRot.y; + // fallthrough + default: + // This is required since EnGe3 shares a skeleton with EnKaizoku; it avoids stale colours being used in the + // displaylists. + OPEN_DISPS(play->state.gfxCtx); + + switch (limbIndex) { + case GERUDO_RED_LIMB_NECK: + break; + + case GERUDO_RED_LIMB_HEAD: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 80, 60, 10, 255); + break; + + case GERUDO_RED_LIMB_RIGHT_SWORD: + case GERUDO_RED_LIMB_LEFT_SWORD: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 140, 170, 230, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + break; + + default: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 140, 0, 0, 255); + break; + } + + CLOSE_DISPS(play->state.gfxCtx); + + if (this->animIndex == GERUDO_AVEIL_ANIM_HAND_ON_HIP_WAIT) { + // Fidget + if ((limbIndex == GERUDO_RED_LIMB_RIGHT_FOREARM) || (limbIndex == GERUDO_RED_LIMB_LEFT_FOREARM) || + (limbIndex == GERUDO_RED_LIMB_TORSO)) { + s32 temp = limbIndex * 50; + + // required to match + rot->y = rot->y + (s32)(Math_SinS(play->state.frames * (temp + 0x814)) * 200.0f); + rot->z = rot->z + (s32)(Math_CosS(play->state.frames * (temp + 0x940)) * 200.0f); + } + } + break; + } + return false; +} + +void EnGe3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnGe3* this = THIS; + Vec3f sFocusOffset = { 600.0f, 700.0f, 0.0f }; + + if (limbIndex == GERUDO_RED_LIMB_HEAD) { + Matrix_MultVec3f(&sFocusOffset, &this->picto.actor.focus.pos); + } +} + +void EnGe3_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sEyeTextures[] = { + gGerudoRedEyeOpenTex, + gGerudoRedEyeHalfTex, + gGerudoRedEyeClosedTex, + }; + s32 pad; + EnGe3* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL37_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); + func_800B8050(&this->picto.actor, play, 0); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnGe3_OverrideLimbDraw, EnGe3_PostLimbDraw, &this->picto.actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h index 909ed7599..f2611e408 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h @@ -2,14 +2,54 @@ #define Z_EN_GE3_H #include "global.h" +#include "z64snap.h" +#include "objects/object_geldb/object_geldb.h" struct EnGe3; typedef void (*EnGe3ActionFunc)(struct EnGe3*, PlayState*); +#define GERUDO_AVEIL_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define GERUDO_AVEIL_GET_EXIT(thisx) (((thisx)->params & 0x1F0) >> 4) +#define GERUDO_AVEIL_GET_TYPE(thisx) ((thisx)->params & 1) + +#define GERUDO_AVEIL_PATH_INDEX_NONE 0x3F + +typedef enum GerudoAveilType { + /* 0 */ GERUDO_AVEIL_TYPE_0, // Unused, just walks forwards + /* 1 */ GERUDO_AVEIL_TYPE_AVEILS_CHAMBER +} GerudoAveilType; + +typedef enum GerudoAveilCueId { + /* -1 */ GERUDO_AVEIL_CUEID_NONE = -1, + /* 0 */ GERUDO_AVEIL_CUEID_0, // Unused + /* 1 */ GERUDO_AVEIL_CUEID_WAIT, + /* 2 */ GERUDO_AVEIL_CUEID_PAUSE, + /* 3 */ GERUDO_AVEIL_CUEID_INSTRUCT, + /* 4 */ GERUDO_AVEIL_CUEID_DEMAND, + /* 5 */ GERUDO_AVEIL_CUEID_DISMISS, + /* 6 */ GERUDO_AVEIL_CUEID_BEG, + /* 7 */ GERUDO_AVEIL_CUEID_BEEHIVE_RUN_AWAY, + /* 8 */ GERUDO_AVEIL_CUEID_BEEHIVE_VANISH +} GerudoAveilCueId; + typedef struct EnGe3 { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x1D8]; + /* 0x000 */ PictoActor picto; + /* 0x148 */ ColliderCylinder collider; + /* 0x194 */ SkelAnime skelAnime; + /* 0x1D8 */ Vec3s jointTable[GERUDO_RED_LIMB_MAX]; + /* 0x268 */ Vec3s morphTable[GERUDO_RED_LIMB_MAX]; + /* 0x2F8 */ s16 eyeIndex; + /* 0x2FA */ s16 blinkTimer; + /* 0x2FC */ Path* path; + /* 0x300 */ s32 curPointIndex; + /* 0x304 */ Vec3s headRot; + /* 0x30A */ Vec3s torsoRot; + /* 0x310 */ s16 stateFlags; // Set and not used, named based on OoT use + /* 0x312 */ s16 animIndex; + /* 0x314 */ s16 cueId; + /* 0x316 */ s16 actionTimer; + /* 0x318 */ s16 screamTimer; /* 0x31C */ EnGe3ActionFunc actionFunc; } EnGe3; // size = 0x320 diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 56d3bc2a2..46c14cb0e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8641,20 +8641,20 @@ 0x8099FD7C:("func_8099FD7C",), 0x8099FEB0:("EnGe3_Init",), 0x809A0044:("EnGe3_Destroy",), - 0x809A0070:("func_809A0070",), - 0x809A00F8:("func_809A00F8",), - 0x809A020C:("func_809A020C",), - 0x809A024C:("func_809A024C",), - 0x809A0350:("func_809A0350",), - 0x809A03AC:("func_809A03AC",), - 0x809A03FC:("func_809A03FC",), - 0x809A04D0:("func_809A04D0",), - 0x809A0820:("func_809A0820",), - 0x809A08A4:("func_809A08A4",), + 0x809A0070:("EnGe3_ChangeAnim",), + 0x809A00F8:("EnGe3_LookAtPlayer",), + 0x809A020C:("EnGe3_SetupPath",), + 0x809A024C:("EnGe3_FollowPath",), + 0x809A0350:("EnGe3_Scream",), + 0x809A03AC:("EnGe3_Idle",), + 0x809A03FC:("EnGe3_ThrowPlayerOut",), + 0x809A04D0:("EnGe3_AveilsChamberIdle",), + 0x809A0820:("EnGe3_UpdateColliderAndMove",), + 0x809A08A4:("EnGe3_Blink",), 0x809A0920:("EnGe3_Update",), - 0x809A096C:("func_809A096C",), - 0x809A0A14:("func_809A0A14",), - 0x809A0C60:("func_809A0C60",), + 0x809A096C:("EnGe3_ValidatePictograph",), + 0x809A0A14:("EnGe3_OverrideLimbDraw",), + 0x809A0C60:("EnGe3_PostLimbDraw",), 0x809A0CBC:("EnGe3_Draw",), 0x809A0F20:("func_809A0F20",), 0x809A0F78:("func_809A0F78",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b1b5b726b..ba29f8d91 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9342,10 +9342,10 @@ 0x8099FE3C:("D_8099FE3C","UNK_TYPE1","",0x1), 0x8099FE50:("D_8099FE50","UNK_TYPE1","",0x1), 0x809A0D80:("En_Ge3_InitVars","UNK_TYPE1","",0x1), - 0x809A0DA0:("D_809A0DA0","UNK_TYPE1","",0x1), - 0x809A0DCC:("D_809A0DCC","UNK_TYPE1","",0x1), - 0x809A0DF0:("D_809A0DF0","UNK_TYPE4","",0x4), - 0x809A0DFC:("D_809A0DFC","UNK_TYPE1","",0x1), + 0x809A0DA0:("sCylinderInit","ColliderCylinderInit","",0x2C), + 0x809A0DCC:("sAnimations","AnimationHeader*","[9]",0x24), + 0x809A0DF0:("sFocusOffset","Vec3f","",0xC), + 0x809A0DFC:("sEyeTextures","TexturePtr","[3]",0xC), 0x809A0E10:("jtbl_809A0E10","UNK_PTR","",0x4), 0x809A1A80:("Obj_Hamishi_InitVars","UNK_TYPE1","",0x1), 0x809A1AA0:("D_809A1AA0","UNK_TYPE1","",0x1), From 20f8470ea06f3a1721cbb8706fa590075a4f9a4f Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sun, 24 Sep 2023 04:42:11 +0200 Subject: [PATCH 23/74] En_Snowwd documentation (#1387) * documentation * improvements * improvements --- .../actors/ovl_En_Snowwd/z_en_snowwd.c | 62 +++++++++---------- .../actors/ovl_En_Snowwd/z_en_snowwd.h | 5 +- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c index 5823e728f..b99673197 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c @@ -16,7 +16,7 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play); void EnSnowwd_Update(Actor* thisx, PlayState* play); void EnSnowwd_Draw(Actor* thisx, PlayState* play); -void func_80AF76F0(EnSnowwd* this, PlayState* play); +void EnSnowwd_Idle(EnSnowwd* this, PlayState* play); ActorInit En_Snowwd_InitVars = { ACTOR_EN_SNOWWD, @@ -50,26 +50,18 @@ static ColliderCylinderInit sCylinderInit = { { 18, 60, 0, { 0, 0, 0 } }, }; -Vec3f D_80AF7ABC = { 0.0f, 0.0f, 0.0f }; - -Vec3f D_80AF7AC8 = { 0.0f, -4.0f, 0.0f }; - -Color_RGBA8 D_80AF7AD4 = { 255, 255, 255, 255 }; - -Color_RGBA8 D_80AF7AD8 = { 200, 200, 220, 0 }; - void EnSnowwd_Init(Actor* thisx, PlayState* play) { EnSnowwd* this = THIS; - this->actor.home.rot.z = 0; + SNOWWD_DROPPED_COLLECTIBLE(thisx) = false; this->actor.home.rot.y = 0; - this->unk190 = 0; + this->timer = 0; this->actor.uncullZoneForward = 4000.0f; this->actor.uncullZoneScale = 2000.0f; this->actor.uncullZoneDownward = 2400.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Actor_SetScale(&this->actor, 1.0f); - this->actionFunc = func_80AF76F0; + this->actionFunc = EnSnowwd_Idle; } void EnSnowwd_Destroy(Actor* thisx, PlayState* play) { @@ -78,26 +70,30 @@ void EnSnowwd_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AF76F0(EnSnowwd* this, PlayState* play) { +void EnSnowwd_Idle(EnSnowwd* this, PlayState* play) { + static Vec3f sAccel = { 0.0f, 0.0f, 0.0f }; + static Vec3f sVelocity = { 0.0f, -4.0f, 0.0f }; + static Color_RGBA8 sPrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sEnvColor = { 200, 200, 220, 0 }; s32 pad; Actor* thisx = &this->actor; - f32 sp54; - Vec3f sp48; + f32 wobbleAmplitude; + Vec3f pos; if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; Actor_PlaySfx(thisx, NA_SE_IT_REFLECTION_WOOD); } if (thisx->home.rot.y != 0) { - this->unk190 = 0x15; + this->timer = 21; thisx->home.rot.y = 0; - if (thisx->home.rot.z == 0) { - if (SNOWWD_GET_PARAM_F80(&this->actor) < 0x10) { - sp48 = thisx->world.pos; - sp48.y += 200.0f; - Item_DropCollectibleRandom(play, NULL, &sp48, SNOWWD_GET_PARAM_F80(&this->actor) * 0x10); + if (!SNOWWD_DROPPED_COLLECTIBLE(&this->actor)) { + if (SNOWWD_GET_DROP_TABLE(&this->actor) < 16) { + pos = thisx->world.pos; + pos.y += 200.0f; + Item_DropCollectibleRandom(play, NULL, &pos, SNOWWD_GET_DROP_TABLE(&this->actor) * DROP_TABLE_SIZE); } - thisx->home.rot.z = 1; + SNOWWD_DROPPED_COLLECTIBLE(&this->actor) = true; } } if (thisx->xzDistToPlayer < 600.0f) { @@ -105,16 +101,18 @@ void func_80AF76F0(EnSnowwd* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } - if (this->unk190 > 0) { - this->unk190--; - sp54 = Math_SinS((s16)((this->unk190 ^ 0xFFFF) * 0x3332)) * 250.0f; - thisx->shape.rot.x = (s16)(Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54); - thisx->shape.rot.z = (s16)(Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * sp54); - sp48 = thisx->world.pos; - sp48.x += Rand_CenteredFloat(80.0f); - sp48.y += 100.0f + Rand_ZeroFloat(30.0f); - sp48.z += Rand_CenteredFloat(80.0f); - func_800B0EB0(play, &sp48, &D_80AF7AC8, &D_80AF7ABC, &D_80AF7AD4, &D_80AF7AD8, 200, 10, 20); + + // Wobble from impact and dust particles + if (this->timer > 0) { + this->timer--; + wobbleAmplitude = Math_SinS((this->timer ^ 0xFFFF) * 0x3332) * 250.0f; + thisx->shape.rot.x = Math_CosS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude; + thisx->shape.rot.z = Math_SinS(thisx->yawTowardsPlayer - thisx->shape.rot.y) * wobbleAmplitude; + pos = thisx->world.pos; + pos.x += Rand_CenteredFloat(80.0f); + pos.y += 100.0f + Rand_ZeroFloat(30.0f); + pos.z += Rand_CenteredFloat(80.0f); + func_800B0EB0(play, &pos, &sVelocity, &sAccel, &sPrimColor, &sEnvColor, 200, 10, 20); } } diff --git a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h index d336cb252..8adb7fcda 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h @@ -3,7 +3,8 @@ #include "global.h" -#define SNOWWD_GET_PARAM_F80(thisx) (((thisx)->params & 0xF80) >> 7) +#define SNOWWD_GET_DROP_TABLE(thisx) (((thisx)->params & 0xF80) >> 7) +#define SNOWWD_DROPPED_COLLECTIBLE(thisx) ((thisx)->home.rot.z) struct EnSnowwd; @@ -12,7 +13,7 @@ typedef void (*EnSnowwdActionFunc)(struct EnSnowwd*, PlayState*); typedef struct EnSnowwd { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ s16 unk190; + /* 0x190 */ s16 timer; /* 0x194 */ EnSnowwdActionFunc actionFunc; } EnSnowwd; // size = 0x198 From 3d3ca570221bc9cafd07d0d1affcc44bab8c84b7 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 24 Sep 2023 01:25:13 -0700 Subject: [PATCH 24/74] EnKame (Snapper) documented (#1383) * EnKame (Snapper) documented * Respond to engineer's review --- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 2 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 2 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 2 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 779 +++++++++++------- src/overlays/actors/ovl_En_Kame/z_en_kame.h | 35 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 2 +- tools/disasm/functions.txt | 72 +- tools/disasm/variables.txt | 14 +- 11 files changed, 548 insertions(+), 366 deletions(-) diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index a147db127..d3ffc59a2 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -492,7 +492,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) { if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 1.2f; - this->drawDmgEffFrozenSteamScale = 1.8000001f; + this->drawDmgEffFrozenSteamScale = 1800.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; } else if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x2000) { // Light Arrow this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index 7da0437a9..4fb015365 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -150,7 +150,7 @@ void EnDekunuts_Destroy(Actor* thisx, PlayState* play) { void func_808BD348(EnDekunuts* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; this->unk_190 = 80; diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 0dcce10d0..1bde48910 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -378,7 +378,7 @@ void func_8089AC70(EnDinofos* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; this->colliderJntSph.base.colType = COLTYPE_HIT3; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->unk_290 = 80; this->actor.flags &= ~ACTOR_FLAG_400; diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index a8e916aa0..bd706810d 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -224,7 +224,7 @@ void func_808D0930(EnFloormas* this, PlayState* play) { void func_808D09CC(EnFloormas* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; this->unk_18E = 80; diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index 51f44abec..c400b3428 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -1,7 +1,7 @@ /* * File: z_en_kame.c * Overlay: ovl_En_Kame - * Description: Snapper Turtle + * Description: Snapper */ #include "z_en_kame.h" @@ -16,30 +16,46 @@ void EnKame_Destroy(Actor* thisx, PlayState* play); void EnKame_Update(Actor* thisx, PlayState* play); void EnKame_Draw(Actor* thisx, PlayState* play); -void func_80AD70A0(EnKame* this); -void func_80AD70EC(EnKame* this, PlayState* play); -void func_80AD71B4(EnKame* this); -void func_80AD7254(EnKame* this, PlayState* play); -void func_80AD73A8(EnKame* this); -void func_80AD7424(EnKame* this, PlayState* play); -void func_80AD76CC(EnKame* this); -void func_80AD7798(EnKame* this, PlayState* play); -void func_80AD792C(EnKame* this); -void func_80AD7948(EnKame* this, PlayState* play); -void func_80AD7B18(EnKame* this); -void func_80AD7B90(EnKame* this, PlayState* play); -void func_80AD7D40(EnKame* this, PlayState* play); -void func_80AD7DA4(EnKame* this); -void func_80AD7E0C(EnKame* this, PlayState* play); -void func_80AD7EC0(EnKame* this); -void func_80AD7F10(EnKame* this, PlayState* play); -void func_80AD7FF8(EnKame* this, PlayState* play); -void func_80AD810C(EnKame* this, PlayState* play); -void func_80AD8148(EnKame* this, PlayState* play); -void func_80AD825C(EnKame* this, PlayState* play); -void func_80AD8364(EnKame* this); -void func_80AD8388(EnKame* this, PlayState* play); -void func_80AD8D64(Actor* thisx, PlayState* play); +void EnKame_SetupIdle(EnKame* this); +void EnKame_Idle(EnKame* this, PlayState* play); +void EnKame_SetupWalk(EnKame* this); +void EnKame_Walk(EnKame* this, PlayState* play); +void EnKame_SetupRetreatIntoShell(EnKame* this); +void EnKame_RetreatIntoShell(EnKame* this, PlayState* play); +void EnKame_SetupPrepareToAttack(EnKame* this); +void EnKame_PrepareToAttack(EnKame* this, PlayState* play); +void EnKame_SetupAttack(EnKame* this); +void EnKame_Attack(EnKame* this, PlayState* play); +void EnKame_SetupEmergeFromShell(EnKame* this); +void EnKame_EmergeFromShell(EnKame* this, PlayState* play); +void EnKame_Flip(EnKame* this, PlayState* play); +void EnKame_SetupStruggle(EnKame* this); +void EnKame_Struggle(EnKame* this, PlayState* play); +void EnKame_SetupFlipUpright(EnKame* this); +void EnKame_FlipUpright(EnKame* this, PlayState* play); +void EnKame_Stunned(EnKame* this, PlayState* play); +void EnKame_Damaged(EnKame* this, PlayState* play); +void EnKame_SetupDead(EnKame* this, PlayState* play); +void EnKame_Dead(EnKame* this, PlayState* play); +void EnKame_SetupBurstIntoFlames(EnKame* this); +void EnKame_BurstIntoFlames(EnKame* this, PlayState* play); +void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play); + +// This enum is used for when the Snapper is forcibly flipped +// by one of the player's attacks. It is *not* used for when +// the Snapper flips itself upright. +typedef enum { + /* 0 */ EN_KAME_FLIP_TYPE_UPSIDE_DOWN, + /* 1 */ EN_KAME_FLIP_TYPE_RIGHTSIDE_UP +} EnKameFlipType; + +typedef enum { + /* 0 */ EN_KAME_EYE_OPEN, + /* 1 */ EN_KAME_EYE_HALF_CLOSING, + /* 2 */ EN_KAME_EYE_CLOSED, + /* 3 */ EN_KAME_EYE_HALF_OPENING, + /* 4 */ EN_KAME_EYE_MAX +} EnKameEyeTexture; ActorInit En_Kame_InitVars = { ACTOR_EN_KAME, @@ -75,42 +91,54 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 3, 15, 30, 80 }; +typedef enum { + /* 0x0 */ EN_KAME_DMGEFF_NONE, // Has no special effect + /* 0x1 */ EN_KAME_DMGEFF_STUN, // Cannot damage the Snapper, but stuns it for 40 frames + /* 0x2 */ EN_KAME_DMGEFF_FIRE, // Sets the Snapper on fire + /* 0x3 */ EN_KAME_DMGEFF_FREEZE, // Stuns the Snapper for 80 frames and surrounds it with ice + /* 0x4 */ EN_KAME_DMGEFF_LIGHT_ORB, // Surrounds the snapper with light orbs + /* 0x5 */ EN_KAME_DMGEFF_ELECTRIC_STUN, // Similar to EN_KAME_DMGEFF_STUN, but also applies an electric effect + /* 0xD */ EN_KAME_DMGEFF_HOOKSHOT = 0xD, // Cannot damage the Snapper, but pulls the player towards it + /* 0xE */ EN_KAME_DMGEFF_INSTANT_KILL, // Instantly kills the Snapper if it hits, even when it is rightside-up + /* 0xF */ EN_KAME_DMGEFF_FLIP_OVER // Flips over Snappers if they are rightside-up +} EnKameDamageEffect; + static DamageTable sDamageTable = { - /* Deku Nut */ DMG_ENTRY(0, 0x1), - /* Deku Stick */ DMG_ENTRY(1, 0x0), - /* Horse trample */ DMG_ENTRY(1, 0x0), - /* Explosives */ DMG_ENTRY(1, 0xF), - /* Zora boomerang */ DMG_ENTRY(1, 0x0), - /* Normal arrow */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(0, 0xD), - /* Goron punch */ DMG_ENTRY(1, 0x0), - /* Sword */ DMG_ENTRY(1, 0x0), - /* Goron pound */ DMG_ENTRY(0, 0xF), - /* Fire arrow */ DMG_ENTRY(2, 0x2), - /* Ice arrow */ DMG_ENTRY(2, 0x3), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0x0), - /* Deku spin */ DMG_ENTRY(0, 0x1), - /* Deku bubble */ DMG_ENTRY(1, 0x0), - /* Deku launch */ DMG_ENTRY(2, 0xE), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1), - /* Zora barrier */ DMG_ENTRY(0, 0x5), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0x0), - /* Zora punch */ DMG_ENTRY(1, 0x0), - /* Spin attack */ DMG_ENTRY(1, 0x0), - /* Sword beam */ DMG_ENTRY(0, 0x0), - /* Normal Roll */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0), - /* Unblockable */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0xF), + /* Deku Nut */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Deku Stick */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Explosives */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER), + /* Zora boomerang */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Hookshot */ DMG_ENTRY(0, EN_KAME_DMGEFF_HOOKSHOT), + /* Goron punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Sword */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(0, EN_KAME_DMGEFF_FLIP_OVER), + /* Fire arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, EN_KAME_DMGEFF_LIGHT_ORB), + /* Goron spikes */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Deku spin */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Deku bubble */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(2, EN_KAME_DMGEFF_INSTANT_KILL), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_KAME_DMGEFF_STUN), + /* Zora barrier */ DMG_ENTRY(0, EN_KAME_DMGEFF_ELECTRIC_STUN), + /* Normal shield */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Light ray */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Thrown object */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, EN_KAME_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Normal Roll */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Unblockable */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_KAME_DMGEFF_NONE), + /* Powder Keg */ DMG_ENTRY(1, EN_KAME_DMGEFF_FLIP_OVER), }; -static TexturePtr D_80AD8E34[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex }; +static TexturePtr sEyeTextures[] = { gSnapperEyeOpenTex, gSnapperEyeHalfTex, gSnapperEyeClosedTex, gSnapperEyeHalfTex }; static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, TATL_HINT_ID_SNAPPER, ICHAIN_CONTINUE), @@ -118,7 +146,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 3500, ICHAIN_STOP), }; -static s32 D_80AD8E50 = false; +static s32 sTexturesDesegmented = false; void EnKame_Init(Actor* thisx, PlayState* play) { EnKame* this = THIS; @@ -132,16 +160,17 @@ void EnKame_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if (!D_80AD8E50) { + if (!sTexturesDesegmented) { s32 i; - for (i = 0; i < ARRAY_COUNT(D_80AD8E34); i++) { - D_80AD8E34[i] = Lib_SegmentedToVirtual(D_80AD8E34[i]); + for (i = 0; i < ARRAY_COUNT(sEyeTextures); i++) { + sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]); } - D_80AD8E50 = true; + + sTexturesDesegmented = true; } - func_80AD70A0(this); + EnKame_SetupIdle(this); } void EnKame_Destroy(Actor* thisx, PlayState* play) { @@ -150,29 +179,29 @@ void EnKame_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AD6F34(EnKame* this) { - if (this->unk_29C != 0) { - this->unk_29C++; - if (this->unk_29C == 4) { - this->unk_29C = 0; +void EnKame_Blink(EnKame* this) { + if (this->eyeIndex != EN_KAME_EYE_OPEN) { + this->eyeIndex++; + if (this->eyeIndex == EN_KAME_EYE_MAX) { + this->eyeIndex = EN_KAME_EYE_OPEN; } } else if (Rand_ZeroOne() < 0.05f) { - this->unk_29C = 1; + this->eyeIndex = EN_KAME_EYE_HALF_CLOSING; } } -void func_80AD6F9C(EnKame* this) { +void EnKame_Freeze(EnKame* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.6f; - this->drawDmgEffFrozenSteamScale = 0.90000004f; + this->drawDmgEffFrozenSteamScale = 900.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = COLTYPE_HIT3; - this->unk_2A2 = 80; + this->stunTimer = 80; this->actor.flags &= ~ACTOR_FLAG_400; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); } -void func_80AD7018(EnKame* this, PlayState* play) { +void EnKame_Thaw(EnKame* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->collider.base.colType = COLTYPE_HIT6; @@ -182,109 +211,138 @@ void func_80AD7018(EnKame* this, PlayState* play) { } } -void func_80AD70A0(EnKame* this) { +void EnKame_SetupIdle(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperIdleAnim, -5.0f); this->actor.speed = 0.0f; - this->actionFunc = func_80AD70EC; + this->actionFunc = EnKame_Idle; } -void func_80AD70EC(EnKame* this, PlayState* play) { +/** + * Plays the idle animation, then starts walking once the animation is over. If the player gets close enough to + * the Snapper without the Stone Mask equipped, it will retreat into its shell to begin attacking them. + */ +void EnKame_Idle(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Animation_OnFrame(&this->snapperSkelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE); - this->unk_2A0 = 40; + this->voiceTimer = 40; } if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.xzDistToPlayer < 240.0f)) { - func_80AD73A8(this); + EnKame_SetupRetreatIntoShell(this); } else if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD71B4(this); + EnKame_SetupWalk(this); } } -void func_80AD71B4(EnKame* this) { +void EnKame_SetupWalk(EnKame* this) { Animation_MorphToLoop(&this->snapperSkelAnime, &gSnapperWalkAnim, -5.0f); this->actor.speed = 0.5f; - this->unk_29E = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3); - this->unk_2A4 = this->actor.shape.rot.y; + this->timer = Animation_GetLastFrame(&gSnapperWalkAnim) * ((s32)Rand_ZeroFloat(5.0f) + 3); + this->targetRotY = this->actor.shape.rot.y; this->collider.base.acFlags |= (AC_HARD | AC_ON); this->collider.base.colType = COLTYPE_HARD; - this->actionFunc = func_80AD7254; + this->actionFunc = EnKame_Walk; } -void func_80AD7254(EnKame* this, PlayState* play) { +/** + * Walk semi-randomly around the Snapper's home until the timer reaches 0, then transition back to being idle. + * If the player gets close enough to the Snapper without the Stone Mask equipped, it will retreat into its + * shell to begin attacking them. + */ +void EnKame_Walk(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.xzDistToPlayer < 240.0f)) { - func_80AD73A8(this); + EnKame_SetupRetreatIntoShell(this); return; } SkelAnime_Update(&this->snapperSkelAnime); - if (this->unk_2A4 != this->actor.shape.rot.y) { - Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100); + if (this->targetRotY != this->actor.shape.rot.y) { + Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetRotY, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 40.0f) { - this->unk_2A4 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14); + this->targetRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14); } - this->unk_29E--; - if (this->unk_29E == 0) { - func_80AD70A0(this); + this->timer--; + if (this->timer == 0) { + EnKame_SetupIdle(this); } else if (Animation_OnFrame(&this->snapperSkelAnime, 0.0f) || Animation_OnFrame(&this->snapperSkelAnime, 15.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK); } } -void func_80AD73A8(EnKame* this) { +void EnKame_SetupRetreatIntoShell(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperRetreatIntoShellAnim, -3.0f); - this->unk_29E = 0; - this->unk_2AC = 1.0f; - this->unk_2A8 = 1.0f; + this->timer = 0; + this->limbScaleY = 1.0f; + this->limbScaleXZ = 1.0f; this->actor.speed = 0.0f; - if (this->unk_2A0 == 0) { + + // If the Snapper recently played this same sound effect while it was idle, don't play it again. + if (this->voiceTimer == 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE); } - this->actionFunc = func_80AD7424; + + this->actionFunc = EnKame_RetreatIntoShell; } -void func_80AD7424(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper retreating its shell, and scales its limbs appropriately to + * make it appear like its head and legs are going into the shell. Once the animation is over, the + * Snapper will either prepare for an attack (if the player is close enough and not wearing the + * Stone Mask), or it will emerge from its shell. + */ +void EnKame_RetreatIntoShell(EnKame* this, PlayState* play) { Player* player = GET_PLAYER(play); if (SkelAnime_Update(&this->snapperSkelAnime)) { if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) && - ((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) { - func_80AD76CC(this); + ((this->timer == 0) || (this->actor.xzDistToPlayer < 120.0f))) { + EnKame_SetupPrepareToAttack(this); } else { - this->unk_29E--; - if (this->unk_29E == 0) { - func_80AD7B18(this); + this->timer--; + if (this->timer == 0) { + EnKame_SetupEmergeFromShell(this); } } } else if (this->snapperSkelAnime.curFrame > 2.0f) { - this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30)); - this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12)); + this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (7.0f / 30)); + this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 2.0f) * (1.0f / 12)); } else { - f32 frame = this->snapperSkelAnime.curFrame; + f32 curFrame = this->snapperSkelAnime.curFrame; - this->unk_2AC = (0.25f * frame) + 1.0f; - this->unk_2A8 = (0.25f * frame) + 1.0f; + this->limbScaleY = (0.25f * curFrame) + 1.0f; + this->limbScaleXZ = (0.25f * curFrame) + 1.0f; } } -void func_80AD7568(EnKame* this) { - this->actor.speed = this->unk_2A6 * (5.0f / 7552); - this->actor.shape.rot.z = this->unk_2A6 * 0.11016949f; +/** + * Sets the Snapper's speed and z-rotation based on its angular velocity. When the Snapper is done with the first + * part of its attack, it will slowly "wind up" before moving back to its home; by setting the speed to be a multiple + * of its angular velocity, the Snapper will smootly ramp up its speed during the "wind up". As for the z-rotation, + * setting it in this manner gives the Snapper a subtle, almost-imperceptible tilt as it spins. + */ +void EnKame_SetAttackSpeed(EnKame* this) { + this->actor.speed = this->angularVelocityY * (5.0f / 0x1D80); + this->actor.shape.rot.z = this->angularVelocityY * (13.0f / 118.0f); } -void func_80AD75A8(EnKame* this, PlayState* play) { - static Color_RGBA8 D_80AD8E54 = { 250, 250, 250, 255 }; - static Color_RGBA8 D_80AD8E58 = { 180, 180, 180, 255 }; - static Vec3f D_80AD8E5C = { 0.0f, 0.75f, 0.0f }; +/** + * If the Snapper is moving quickly enough over certain surface materials, this function will spawn dirt or snow-colored + * dust on even-numbered frames. Additionally, this function is also responsible for playing the Snapper's spinning + * sound effect if its angular velocity is large enough. + */ +void EnKame_ProcessAttackEffects(EnKame* this, PlayState* play) { + static Color_RGBA8 sSnowPrimColor = { 250, 250, 250, 255 }; + static Color_RGBA8 sSnowEnvColor = { 180, 180, 180, 255 }; + static Vec3f sVelocity = { 0.0f, 0.75f, 0.0f }; if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 3.0f)) { if ((play->gameplayFrames % 2) == 0) { @@ -292,144 +350,190 @@ void func_80AD75A8(EnKame* this, PlayState* play) { SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) { - func_800B1210(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, 550, 100); + func_800B1210(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, 550, 100); } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) { - func_800B0DE0(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, &D_80AD8E54, &D_80AD8E58, 550, - 100); + func_800B0DE0(play, &this->actor.world.pos, &sVelocity, &gZeroVec3f, &sSnowPrimColor, &sSnowEnvColor, + 550, 100); } } } - if (this->unk_2A6 > 0x1200) { + if (this->angularVelocityY > 0x1200) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_PAMET_ROLL - SFX_FLAG); } } -void func_80AD76CC(EnKame* this) { +void EnKame_SetupPrepareToAttack(EnKame* this) { + // The Snapper's attack can be divided into roughly two phases: + // - Charging towards the player + // - Going back to their home + // This if-statement is checking which of the two is the current phase. If the Snapper is in the first + // phase of the attack, then it just finished retreating into its shell, and it hasn't switched to its + // "spiked" form yet. Thus, we check the draw function here to determine which phase the Snapper is in. if (this->actor.draw == EnKame_Draw) { - this->actor.draw = func_80AD8D64; - this->unk_2A6 = 0x3B00; - this->unk_2AC = 0.5f; - func_80AD7568(this); - this->unk_29E = 15; + this->actor.draw = EnKame_DrawSpikedSnapper; + this->angularVelocityY = 0x3B00; + this->spikesScale = 0.5f; + EnKame_SetAttackSpeed(this); + this->timer = 15; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_ON); - this->unk_2BC.y = this->actor.home.pos.y - 100.0f; + // As stated above, we could tell this was the first phase of the Snapper's attack because it hadn't + // changed its draw function to the "spiked" version yet. However, we won't be able to check the draw + // function in the future, because we just changed it; we need some other way to tell which phase of + // the attack the Snapper is in. Setting the targetPos's y-position here to something less than the + // home's y-position will be used as a signal in future functions to indicate this is the first phase + // of the attack. Nothing looks at the y-position of the targetPos, so we can use it however we want, + // and during the second phase of the attack, the Snapper's home position is copied into targetPos, + // including the y-position; the targetPos's y-position will *only* differ from the home's y-position + // during the first phase of the attack due to the code below. + this->targetPos.y = this->actor.home.pos.y - 100.0f; } else { this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); - Math_Vec3f_Copy(&this->unk_2BC, &this->actor.home.pos); - this->unk_29E = 0; + Math_Vec3f_Copy(&this->targetPos, &this->actor.home.pos); + this->timer = 0; } + this->actor.flags |= ACTOR_FLAG_10; - this->actionFunc = func_80AD7798; + this->actionFunc = EnKame_PrepareToAttack; } -void func_80AD7798(EnKame* this, PlayState* play) { - if (this->unk_29E == 15) { - this->unk_2AC += 0.2f; - if (this->unk_2AC > 1.1f) { - this->unk_29E--; +/** + * This function gradually increases the angular velocity to 0x3B00 and does a few other miscellaneous tasks (e.g., + * scaling the spikes up and making the Snapper face the player for the first phase of the attack) before attacking. + */ +void EnKame_PrepareToAttack(EnKame* this, PlayState* play) { + // In EnKame_SetupPrepareToAttack, the timer is set to 15 if it was the first phase of the attack, so this is yet + // another way of checking the current phase. Gradually scale the spikes up, and once they reach their full size, + // enable AT collisions so the Snapper can damage the player. + if (this->timer == 15) { + this->spikesScale += 0.2f; + if (this->spikesScale > 1.1f) { + this->timer--; this->collider.base.atFlags |= AT_ON; - this->unk_2AC = 1.0f; + this->spikesScale = 1.0f; } - } else if (this->unk_29E > 0) { - this->unk_29E--; - } else if (Math_ScaledStepToS(&this->unk_2A6, 0x3B00, (s32)(this->unk_2A6 * 0.09f) + 45)) { - if (this->unk_2BC.y < this->actor.home.pos.y) { + } else if (this->timer > 0) { + this->timer--; + } else if (Math_ScaledStepToS(&this->angularVelocityY, 0x3B00, (s32)(this->angularVelocityY * 0.09f) + 45)) { + // If it's the first phase of the attack, rotate the Snapper to face the player and set the targetPos to a + // fixed position in that direction. This will make them charge towards the player once they start moving. + if (this->targetPos.y < this->actor.home.pos.y) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - this->unk_2BC.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x; - this->unk_2BC.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z; + this->targetPos.x = (Math_SinS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.x; + this->targetPos.z = (Math_CosS(this->actor.world.rot.y) * 360.0f) + this->actor.world.pos.z; } - func_80AD792C(this); + + EnKame_SetupAttack(this); } - this->actor.shape.rot.y += this->unk_2A6; + this->actor.shape.rot.y += this->angularVelocityY; - if (!(this->unk_2BC.y < this->actor.home.pos.y) || (this->actionFunc != func_80AD7798)) { - func_80AD7568(this); + // Calling EnKame_SetAttackSpeed will set the Snapper's speed based on its current angular velocity; since we are + // gradually scaling up the angular velocity, this would gradually scale up the speed as well. However, during the + // first phase of the attack, the Snapper should wait in place until it reaches its maximum angular velocity. This + // check will prevent us from changing the Snapper's speed during the first phase until we're just about to attack. + if (!(this->targetPos.y < this->actor.home.pos.y) || (this->actionFunc != EnKame_PrepareToAttack)) { + EnKame_SetAttackSpeed(this); } - func_80AD75A8(this, play); + + EnKame_ProcessAttackEffects(this, play); } -void func_80AD792C(EnKame* this) { - this->unk_29E = -1; - this->actionFunc = func_80AD7948; +void EnKame_SetupAttack(EnKame* this) { + this->targetAngularVelocityY = -1; + this->actionFunc = EnKame_Attack; } -void func_80AD7948(EnKame* this, PlayState* play) { - s32 temp_v1; +/** + * Moves the Snapper towards its target while spinning until it hits a wall or reaches the target. Once that happens, + * the Snapper will either reduce its angular velocity to 0x300 and prepare for the second phase of the attack (if the + * Snapper is currently in the first phase), or it will reduce its angular velocity to 0 and emerge from its shell (if + * the Snapper is currently in the second phase). + */ +void EnKame_Attack(EnKame* this, PlayState* play) { + this->actor.shape.rot.y += this->angularVelocityY; + EnKame_ProcessAttackEffects(this, play); - this->actor.shape.rot.y += this->unk_2A6; - func_80AD75A8(this, play); + if (this->targetAngularVelocityY == -1) { + s32 absYawToTarget; + s16 yawToTarget = Actor_WorldYawTowardPoint(&this->actor, &this->targetPos) - this->actor.world.rot.y; - if (this->unk_29E == -1) { - s16 temp_v0 = Actor_WorldYawTowardPoint(&this->actor, &this->unk_2BC) - this->actor.world.rot.y; + absYawToTarget = ABS_ALT(yawToTarget); - temp_v1 = ABS_ALT(temp_v0); - - if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (temp_v1 > 0x3000) || - (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f)) { + // If the yaw toward the targetPos is too large, that indicates the Snapper probably moved + // beyond its target (in other words, the target is now "behind" the Snapper). + if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (absYawToTarget > 0x3000) || + (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f)) { s8 pad; - if (this->unk_2BC.y < this->actor.home.pos.y) { - this->unk_29E = 0x300; + if (this->targetPos.y < this->actor.home.pos.y) { + this->targetAngularVelocityY = 0x300; } else { - this->unk_29E = 0; + this->targetAngularVelocityY = 0; } } return; } - if (Math_ScaledStepToS(&this->unk_2A6, this->unk_29E, (s32)(this->unk_2A6 * 0.09f) + 45)) { - if (this->unk_29E == 0) { - if (this->unk_2AC >= 1.0f) { + if (Math_ScaledStepToS(&this->angularVelocityY, this->targetAngularVelocityY, + (s32)(this->angularVelocityY * 0.09f) + 45)) { + if (this->targetAngularVelocityY == 0) { + if (this->spikesScale >= 1.0f) { Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF); } - this->unk_2AC -= 0.1f; + + this->spikesScale -= 0.1f; this->collider.base.atFlags &= ~AT_ON; - if (this->unk_2AC < 0.5f) { + if (this->spikesScale < 0.5f) { this->actor.flags &= ~ACTOR_FLAG_10; - func_80AD7B18(this); + EnKame_SetupEmergeFromShell(this); } } else { - func_80AD76CC(this); + EnKame_SetupPrepareToAttack(this); } } - func_80AD7568(this); + + EnKame_SetAttackSpeed(this); } -void func_80AD7B18(EnKame* this) { +void EnKame_SetupEmergeFromShell(EnKame* this) { this->actor.draw = EnKame_Draw; Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperEmergeFromShellAnim, -3.0f); this->actor.speed = 0.0f; - this->unk_2AC = 0.1f; - this->unk_2A8 = 1.0f; + this->limbScaleY = 0.1f; + this->limbScaleXZ = 1.0f; this->actor.world.rot.y = this->actor.shape.rot.y; - this->actionFunc = func_80AD7B90; + this->actionFunc = EnKame_EmergeFromShell; } -void func_80AD7B90(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper emerging from its shell, and scales its limbs appropriately to + * make it appear like its head and legs are coming out of the shell. Once the animation is over, this + * will make the Snapper start walking again. + */ +void EnKame_EmergeFromShell(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD71B4(this); + EnKame_SetupWalk(this); } else if (this->snapperSkelAnime.curFrame > 7.0f) { - this->unk_2AC = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); - this->unk_2A8 = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); + this->limbScaleY = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); + this->limbScaleXZ = 1.5f - ((this->snapperSkelAnime.curFrame - 7.0f) * (1.0f / 6)); } else { - f32 frame = this->snapperSkelAnime.curFrame; + f32 curFrame = this->snapperSkelAnime.curFrame; - this->unk_2AC = (0.2f * frame) + 0.1f; - this->unk_2A8 = ((1.0f / 14) * frame) + 1.0f; + this->limbScaleY = (0.2f * curFrame) + 0.1f; + this->limbScaleXZ = ((1.0f / 14) * curFrame) + 1.0f; } } -void func_80AD7C54(EnKame* this) { - if (this->actionFunc == func_80AD7E0C) { +void EnKame_SetupFlip(EnKame* this) { + if (this->actionFunc == EnKame_Struggle) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperBouncedUprightAnim, -3.0f); - this->unk_29E = 1; + this->flipType = EN_KAME_FLIP_TYPE_RIGHTSIDE_UP; this->collider.info.bumper.dmgFlags &= ~0x8000; } else { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipOverAnim, -3.0f); - this->unk_29E = 0; + this->flipType = EN_KAME_FLIP_TYPE_UPSIDE_DOWN; this->collider.info.bumper.dmgFlags |= 0x8000; } @@ -441,32 +545,39 @@ void func_80AD7C54(EnKame* this) { this->actor.flags &= ~ACTOR_FLAG_10; this->actor.shape.rot.z = 0; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_REVERSE); - this->actionFunc = func_80AD7D40; + this->actionFunc = EnKame_Flip; } -void func_80AD7D40(EnKame* this, PlayState* play) { +/** + * If the Snapper is flipped upside-down, this will make it struggle for 200 frames once the flip animation ends. + * If the Snapper is flipped rightside-up, this will make it start walking once the flip animation ends. + */ +void EnKame_Flip(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - if (this->unk_29E == 1) { - func_80AD71B4(this); + if (this->flipType == EN_KAME_FLIP_TYPE_RIGHTSIDE_UP) { + EnKame_SetupWalk(this); } else { - this->unk_29E = 200; - func_80AD7DA4(this); + this->timer = 200; + EnKame_SetupStruggle(this); } } } -void func_80AD7DA4(EnKame* this) { +void EnKame_SetupStruggle(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim, -3.0f); this->collider.base.acFlags |= AC_ON; this->collider.base.acFlags &= ~AC_HARD; this->collider.base.colType = COLTYPE_HIT6; this->actor.speed = 0.0f; - this->actionFunc = func_80AD7E0C; + this->actionFunc = EnKame_Struggle; } -void func_80AD7E0C(EnKame* this, PlayState* play) { - if (this->unk_29E > 0) { - this->unk_29E--; +/** + * Plays various struggling animations until the timer reaches 0, then it flips itself upright. + */ +void EnKame_Struggle(EnKame* this, PlayState* play) { + if (this->timer > 0) { + this->timer--; if (SkelAnime_Update(&this->snapperSkelAnime)) { if (Rand_ZeroOne() > 0.5f) { Animation_PlayOnce(&this->snapperSkelAnime, &gSnapperWiggleLegsAnim); @@ -476,69 +587,85 @@ void func_80AD7E0C(EnKame* this, PlayState* play) { } } } else { - func_80AD7EC0(this); + EnKame_SetupFlipUpright(this); } } -void func_80AD7EC0(EnKame* this) { +void EnKame_SetupFlipUpright(EnKame* this) { Animation_MorphToPlayOnce(&this->snapperSkelAnime, &gSnapperFlipUprightAnim, -3.0f); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP); - this->actionFunc = func_80AD7F10; + this->actionFunc = EnKame_FlipUpright; } -void func_80AD7F10(EnKame* this, PlayState* play) { +/** + * Plays the animation of the Snapper flipping itself upright, then transitions back to walking. + */ +void EnKame_FlipUpright(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - func_80AD71B4(this); + EnKame_SetupWalk(this); } else if (this->snapperSkelAnime.curFrame >= 10.0f) { + // This is the part of the animation where the Snapper starts to flip itself + // upright. During this flip, this actor needs to manually control when + // ActorShadow_DrawCircle is called, so the shadowDraw pointer is set to NULL. + // See EnKame_PostLimbDraw and EnKame_Draw for more information. this->actor.shape.shadowDraw = NULL; this->collider.base.acFlags &= ~AC_ON; this->collider.info.bumper.dmgFlags &= ~0x8000; } } -void func_80AD7FA4(EnKame* this) { +void EnKame_SetupStunned(EnKame* this) { this->actor.speed = 0.0f; if (this->actor.velocity.y > 0.0f) { this->actor.velocity.y = 0.0f; } + func_800BE504(&this->actor, &this->collider); - this->actionFunc = func_80AD7FF8; + this->actionFunc = EnKame_Stunned; } -void func_80AD7FF8(EnKame* this, PlayState* play) { - if (this->unk_2A2 != 0) { - this->unk_2A2--; +/** + * Stops the Snapper's animation and locks it in place until the stun timer reaches zero. After that, the + * Snapper either dies (if the attack that stunned it reduced its health to 0) or goes back to struggling. + * If the Snapper dies in this state, it skips the "finishing blow" screen flash and game freeze. + */ +void EnKame_Stunned(EnKame* this, PlayState* play) { + if (this->stunTimer != 0) { + this->stunTimer--; } - if (this->unk_2A2 == 0) { - func_80AD7018(this, play); + if (this->stunTimer == 0) { + EnKame_Thaw(this, play); if (this->actor.colChkInfo.health == 0) { - func_80AD8148(this, NULL); + EnKame_SetupDead(this, NULL); } else { this->actor.world.rot.y = this->actor.shape.rot.y; - func_80AD7DA4(this); + EnKame_SetupStruggle(this); } } } -void func_80AD8060(EnKame* this) { +void EnKame_SetupDamaged(EnKame* this) { s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim); Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE); this->collider.base.acFlags &= ~AC_ON; - this->actionFunc = func_80AD810C; + this->actionFunc = EnKame_Damaged; } -void func_80AD810C(EnKame* this, PlayState* play) { +/** + * Plays the damaged animation, then goes back to struggling to flip itself upright. + */ +void EnKame_Damaged(EnKame* this, PlayState* play) { if (SkelAnime_Update(&this->snapperSkelAnime)) { - func_80AD7DA4(this); + EnKame_SetupStruggle(this); } } -void func_80AD8148(EnKame* this, PlayState* play) { +void EnKame_SetupDead(EnKame* this, PlayState* play) { Animation_PlayLoop(&this->snapperSkelAnime, &gSnapperDeathAnim); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20); this->collider.base.acFlags &= ~AC_ON; @@ -546,53 +673,71 @@ void func_80AD8148(EnKame* this, PlayState* play) { this->collider.base.atFlags &= ~(AC_HARD | AC_HIT); this->actor.velocity.y = 15.0f; this->actor.speed = 1.5f; + + // This allows callers of this function to skip the "finishing blow" screen flash and game freeze as well + // as the rotation that happens if the Snapper is killed by a projectile. Only EnKame_Stunned calls this + // while passing NULL instead of play; in practice, this means that the only way to skip this code is to + // kill the Snapper with an Ice Arrow, since that's the only attack that both stuns it and deals damage. if (play != NULL) { Enemy_StartFinishingBlow(play, &this->actor); - if (this->actor.draw == func_80AD8D64) { + if (this->actor.draw == EnKame_DrawSpikedSnapper) { this->actor.draw = EnKame_Draw; } else { func_800BE504(&this->actor, &this->collider); } } + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags |= ACTOR_FLAG_10; Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD); - this->unk_29E = 0; - this->actionFunc = func_80AD825C; + this->timer = 0; + this->actionFunc = EnKame_Dead; } -void func_80AD825C(EnKame* this, PlayState* play) { +/** + * Launches the Snapper into the air and spins it around wildly. Makes the Snapper + * burst into flames once it touches the ground. + */ +void EnKame_Dead(EnKame* this, PlayState* play) { SkelAnime_Update(&this->snapperSkelAnime); if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND); - func_80AD8364(this); + EnKame_SetupBurstIntoFlames(this); } else { - if (this->unk_29E == 1) { + //! @bug unreachable code: EnKame_SetupDead sets this variable to 0, and no other code that runs + //! while the Snapper is in this state will change it to anything else. + if (this->timer == 1) { this->actor.colorFilterTimer = 100; } else if (this->actor.colorFilterTimer == 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_NONE, 255, COLORFILTER_BUFFLAG_OPA, 100); } + this->actor.shape.rot.x += Rand_S16Offset(0x700, 0x1400); this->actor.shape.rot.y += (s16)Rand_ZeroFloat(5120.0f); this->actor.shape.rot.z += Rand_S16Offset(0x700, 0x1400); } } -void func_80AD8364(EnKame* this) { - this->unk_29E = 20; +void EnKame_SetupBurstIntoFlames(EnKame* this) { + this->timer = 20; this->actor.speed = 0.0f; - this->actionFunc = func_80AD8388; + this->actionFunc = EnKame_BurstIntoFlames; } -void func_80AD8388(EnKame* this, PlayState* play) { - Vec3f sp34; +/** + * After waiting for the timer to reach 0, this function gradually shrinks the actor + * and spawns blue flames around it. Once the Snapper shrinks enough, this drops a + * random item and kills the actor. + */ +void EnKame_BurstIntoFlames(EnKame* this, PlayState* play) { + Vec3f flamePos; SkelAnime_Update(&this->snapperSkelAnime); this->actor.colorFilterTimer = 100; - if (this->unk_29E > 0) { - this->unk_29E--; - if (this->unk_29E == 0) { + if (this->timer > 0) { + this->timer--; + if (this->timer == 0) { SoundSource_PlaySfxEachFrameAtFixedWorldPos(play, &this->actor.world.pos, 21, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); } @@ -605,14 +750,15 @@ void func_80AD8388(EnKame* this, PlayState* play) { this->actor.scale.y = this->actor.scale.x; this->actor.scale.z = this->actor.scale.x; } - sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; - sp34.y = this->actor.world.pos.y + 15.0f; - sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; - func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); + + flamePos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; + flamePos.y = this->actor.world.pos.y + 15.0f; + flamePos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; + func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); } } -void func_80AD84C0(EnKame* this, PlayState* play) { +void EnKame_UpdateDamage(EnKame* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; @@ -622,51 +768,52 @@ void func_80AD84C0(EnKame* this, PlayState* play) { return; } - func_80AD7018(this, play); - if (this->actor.colChkInfo.damageEffect == 13) { + EnKame_Thaw(this, play); + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_HOOKSHOT) { return; } - if (this->actor.colChkInfo.damageEffect == 14) { - func_80AD8148(this, play); - } else if (this->actor.colChkInfo.damageEffect == 15) { + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_INSTANT_KILL) { + EnKame_SetupDead(this, play); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FLIP_OVER) { if (this->collider.base.acFlags & AC_HARD) { - func_80AD7C54(this); + EnKame_SetupFlip(this); } else if (!Actor_ApplyDamage(&this->actor)) { - func_80AD8148(this, play); + EnKame_SetupDead(this, play); } else { - func_80AD8060(this); + EnKame_SetupDamaged(this); } - } else if ((this->actionFunc == func_80AD70EC) || (this->actionFunc == func_80AD7254)) { - func_80AD73A8(this); - this->unk_29E = 21; + } else if ((this->actionFunc == EnKame_Idle) || (this->actionFunc == EnKame_Walk)) { + EnKame_SetupRetreatIntoShell(this); + this->timer = 21; } else if (!(this->collider.base.acFlags & AC_HARD)) { - if (this->actor.colChkInfo.damageEffect == 5) { - this->unk_2A2 = 40; + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_ELECTRIC_STUN) { + this->stunTimer = 40; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40); Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 2.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL; - func_80AD7FA4(this); - } else if (this->actor.colChkInfo.damageEffect == 1) { - this->unk_2A2 = 40; + EnKame_SetupStunned(this); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_STUN) { + this->stunTimer = 40; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40); Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); - func_80AD7FA4(this); - } else if (this->actor.colChkInfo.damageEffect == 3) { - func_80AD6F9C(this); + EnKame_SetupStunned(this); + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FREEZE) { + EnKame_Freeze(this); if (!Actor_ApplyDamage(&this->actor)) { - this->unk_2A2 = 3; + this->stunTimer = 3; this->collider.base.acFlags &= ~AC_ON; } - func_80AD7FA4(this); + + EnKame_SetupStunned(this); } else { - if (this->actor.colChkInfo.damageEffect == 2) { + if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_FIRE) { this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 4.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; - } else if (this->actor.colChkInfo.damageEffect == 4) { + } else if (this->actor.colChkInfo.damageEffect == EN_KAME_DMGEFF_LIGHT_ORB) { this->drawDmgEffScale = 0.6f; this->drawDmgEffAlpha = 4.0f; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; @@ -676,9 +823,9 @@ void func_80AD84C0(EnKame* this, PlayState* play) { } if (!Actor_ApplyDamage(&this->actor)) { - func_80AD8148(this, play); + EnKame_SetupDead(this, play); } else { - func_80AD8060(this); + EnKame_SetupDamaged(this); } } } @@ -686,8 +833,8 @@ void func_80AD84C0(EnKame* this, PlayState* play) { if ((play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f)) && (this->collider.base.acFlags & AC_ON)) { - func_80AD7018(this, play); - func_80AD7C54(this); + EnKame_Thaw(this, play); + EnKame_SetupFlip(this); } } @@ -695,22 +842,21 @@ void EnKame_Update(Actor* thisx, PlayState* play) { s32 pad; EnKame* this = THIS; - func_80AD6F34(this); + EnKame_Blink(this); - if (this->unk_2A0 != 0) { - this->unk_2A0--; - } + DECR(this->voiceTimer); - func_80AD84C0(this, play); + EnKame_UpdateDamage(this, play); if ((this->collider.base.atFlags & AT_HIT) && (this->collider.base.atFlags & AT_BOUNCED)) { this->collider.base.atFlags &= ~(AT_BOUNCED | AT_HIT); - func_80AD76CC(this); - if (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f) { + EnKame_SetupPrepareToAttack(this); + if (Actor_WorldDistXZToPoint(&this->actor, &this->targetPos) < 50.0f) { this->collider.base.atFlags &= ~AT_ON; } - this->unk_2A6 = 0x3B00; - func_80AD7568(this); + + this->angularVelocityY = 0x3B00; + EnKame_SetAttackSpeed(this); } this->actionFunc(this, play); @@ -720,6 +866,8 @@ void EnKame_Update(Actor* thisx, PlayState* play) { UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); + // When the Snapper is in the middle of the animation where it's flipping upright, + // setting the focus and updating the collider is handled in EnKame_Draw instead. if (this->actor.shape.shadowDraw != NULL) { Actor_SetFocus(&this->actor, 25.0f); Collider_UpdateCylinder(&this->actor, &this->collider); @@ -744,32 +892,38 @@ void EnKame_Update(Actor* thisx, PlayState* play) { } else { this->drawDmgEffScale = this->drawDmgEffScale; } - } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 0.015000001f)) { + } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 15.0f * 0.001f)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } } -s32 func_80AD8A48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnKame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnKame* this = THIS; - if ((this->actionFunc == func_80AD7424) || (this->actionFunc == func_80AD7B90)) { + if ((this->actionFunc == EnKame_RetreatIntoShell) || (this->actionFunc == EnKame_EmergeFromShell)) { if (limbIndex == SNAPPER_LIMB_HEAD) { - Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2A8, MTXMODE_APPLY); + Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleXZ, MTXMODE_APPLY); } else if ((limbIndex == SNAPPER_LIMB_BACK_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_BACK_LEFT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_RIGHT_LEG) || (limbIndex == SNAPPER_LIMB_FRONT_LEFT_LEG)) { - Matrix_Scale(this->unk_2A8, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); + Matrix_Scale(this->limbScaleXZ, this->limbScaleY, this->limbScaleY, MTXMODE_APPLY); } } + return false; } -static Vec3f D_80AD8E68[] = { - { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_5 - { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_6 - { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_7 - { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_8 - { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_9 +/** + * Five of the entries in the body parts array are used for rendering + * multiple effects on the Snapper's body limb. The positions of these + * effects are offset from the body limb using the values in this array. + */ +static Vec3f sBodyLimbBodyPartOffsets[] = { + { 1500.0f, 0.0f, -2000.0f }, // SNAPPER_BODYPART_BODY_1 + { 1500.0f, 0.0f, 2000.0f }, // SNAPPER_BODYPART_BODY_2 + { 1500.0f, 2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_3 + { 1500.0f, -2000.0f, 0.0f }, // SNAPPER_BODYPART_BODY_4 + { 2500.0f, 0.0f, 0.0f }, // SNAPPER_BODYPART_BODY_5 }; static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = { @@ -788,7 +942,7 @@ static s8 sLimbToBodyParts[SNAPPER_LIMB_MAX] = { SNAPPER_BODYPART_BACK_RIGHT_FOOT, // SNAPPER_LIMB_BACK_RIGHT_FOOT }; -void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { +void EnKame_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnKame* this = THIS; if (sLimbToBodyParts[limbIndex] != BODYPART_NONE) { @@ -797,69 +951,90 @@ void func_80AD8AF8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto if (limbIndex == SNAPPER_LIMB_BODY) { s32 i; - Vec3f* ptr; - Vec3f* ptr2; + Vec3f* bodyPartsPosPtr; + Vec3f* bodyLimbOffsetsPtr; + // When the Snapper is flipping itself upright, the animation will make it appear + // as if it is jumping off the ground. This is purely visual, though, so if we do + // nothing, the actor's position won't actually change during this apparent "jump", + // which causes certain things like the circle shadow and the actor's focus to look + // incorrect. To fix this, we temporarily adjust the actor's position during this + // animation so that everything looks correct. This position change is overridden + // at the end of EnKame_Draw, so from the perspective of most other functions, + // nothing really changes. if (this->actor.shape.shadowDraw == NULL) { Matrix_MultZero(&this->actor.world.pos); } - ptr2 = D_80AD8E68; - ptr = &this->bodyPartsPos[SNAPPER_BODYPART_5]; - for (i = 0; i < ARRAY_COUNT(D_80AD8E68); i++) { - Matrix_MultVec3f(ptr2, ptr); - ptr2++; - ptr++; + bodyLimbOffsetsPtr = sBodyLimbBodyPartOffsets; + bodyPartsPosPtr = &this->bodyPartsPos[SNAPPER_BODYPART_BODY_1]; + for (i = 0; i < ARRAY_COUNT(sBodyLimbBodyPartOffsets); i++) { + Matrix_MultVec3f(bodyLimbOffsetsPtr, bodyPartsPosPtr); + bodyLimbOffsetsPtr++; + bodyPartsPosPtr++; } } } void EnKame_Draw(Actor* thisx, PlayState* play) { EnKame* this = THIS; - Vec3f sp40; + Vec3f originalPos; - if (this->actor.shape.shadowDraw == 0) { - Math_Vec3f_Copy(&sp40, &this->actor.world.pos); + // If the Snapper is flipping itself upright, we'll update its position inside EnKame_PostLimbDraw + // to make it better match the "jump" that it does in the animation. We want to make sure that its + // original position is restored before we exit this function, however, so we save it here before + // we ever call EnKame_PostLimbDraw. + if (this->actor.shape.shadowDraw == NULL) { + Math_Vec3f_Copy(&originalPos, &this->actor.world.pos); } OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]); + gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeIndex]); SkelAnime_DrawFlexOpa(play, this->snapperSkelAnime.skeleton, this->snapperSkelAnime.jointTable, - this->snapperSkelAnime.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor); + this->snapperSkelAnime.dListCount, EnKame_OverrideLimbDraw, EnKame_PostLimbDraw, + &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, SNAPPER_BODYPART_MAX, this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); + // The Snapper is in the middle of the animation where it's flipping upright, and we updated its position + // in EnKame_PostLimbDraw as explained earlier. We draw the circle shadow, set the focus, and update its + // collider; all of these rely on the Snapper's position being updated earlier to match the "jump" that it + // does in its animation. Once we're done, we restore the Snappper's position back to what it was before + // because we want other functions to act like the position never changed. if (this->actor.shape.shadowDraw == NULL) { ActorShadow_DrawCircle(&this->actor, NULL, play); Actor_SetFocus(&this->actor, 25.0f); Collider_UpdateCylinder(&this->actor, &this->collider); - Math_Vec3f_Copy(&this->actor.world.pos, &sp40); + Math_Vec3f_Copy(&this->actor.world.pos, &originalPos); } CLOSE_DISPS(play->state.gfxCtx); } -s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 EnKame_SpikedSnapperOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { EnKame* this = THIS; if (limbIndex == SPIKED_SNAPPER_LIMB_BODY) { pos->y -= 700.0f; } - if ((this->unk_2AC != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { - Matrix_Scale(1.0f, this->unk_2AC, this->unk_2AC, MTXMODE_APPLY); + if ((this->spikesScale != 1.0f) && (limbIndex == SPIKED_SNAPPER_LIMB_SPIKES)) { + Matrix_Scale(1.0f, this->spikesScale, this->spikesScale, MTXMODE_APPLY); } + return false; } -void func_80AD8D64(Actor* thisx, PlayState* play) { +void EnKame_DrawSpikedSnapper(Actor* thisx, PlayState* play) { EnKame* this = THIS; Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->spikedSnapperSkelAnime.skeleton, this->spikedSnapperSkelAnime.jointTable, - this->spikedSnapperSkelAnime.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor); + this->spikedSnapperSkelAnime.dListCount, EnKame_SpikedSnapperOverrideLimbDraw, NULL, + &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.h b/src/overlays/actors/ovl_En_Kame/z_en_kame.h index 31095bf22..2ca2f4047 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h @@ -14,11 +14,11 @@ typedef enum SnapperBodyPart { /* 2 */ SNAPPER_BODYPART_FRONT_RIGHT_FOOT, /* 3 */ SNAPPER_BODYPART_BACK_LEFT_FOOT, /* 4 */ SNAPPER_BODYPART_BACK_RIGHT_FOOT, - /* 5 */ SNAPPER_BODYPART_5, - /* 6 */ SNAPPER_BODYPART_6, - /* 7 */ SNAPPER_BODYPART_7, - /* 8 */ SNAPPER_BODYPART_8, - /* 9 */ SNAPPER_BODYPART_9, + /* 5 */ SNAPPER_BODYPART_BODY_1, + /* 6 */ SNAPPER_BODYPART_BODY_2, + /* 7 */ SNAPPER_BODYPART_BODY_3, + /* 8 */ SNAPPER_BODYPART_BODY_4, + /* 9 */ SNAPPER_BODYPART_BODY_5, /* 10 */ SNAPPER_BODYPART_MAX } SnapperBodyPart; @@ -31,19 +31,26 @@ typedef struct EnKame { /* 0x268 */ Vec3s spikedSnapperJointTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x280 */ Vec3s spikedSnapperMorphTable[SPIKED_SNAPPER_LIMB_MAX]; /* 0x298 */ EnKameActionFunc actionFunc; - /* 0x29C */ u8 unk_29C; + /* 0x29C */ u8 eyeIndex; /* 0x29D */ u8 drawDmgEffType; - /* 0x29E */ s16 unk_29E; - /* 0x2A0 */ s16 unk_2A0; - /* 0x2A2 */ s16 unk_2A2; - /* 0x2A4 */ s16 unk_2A4; - /* 0x2A6 */ s16 unk_2A6; - /* 0x2A8 */ f32 unk_2A8; - /* 0x2AC */ f32 unk_2AC; + /* 0x29E */ union { + s16 timer; + s16 targetAngularVelocityY; + s16 flipType; + }; + /* 0x2A0 */ s16 voiceTimer; + /* 0x2A2 */ s16 stunTimer; + /* 0x2A4 */ s16 targetRotY; + /* 0x2A6 */ s16 angularVelocityY; + /* 0x2A8 */ f32 limbScaleXZ; + /* 0x2AC */ union { + f32 limbScaleY; // used the Snapper's regular form (i.e., when it's walking around on its legs) + f32 spikesScale; // used for the Snapper's "spiked" form + }; /* 0x2B0 */ f32 drawDmgEffAlpha; /* 0x2B4 */ f32 drawDmgEffScale; /* 0x2B8 */ f32 drawDmgEffFrozenSteamScale; - /* 0x2BC */ Vec3f unk_2BC; + /* 0x2BC */ Vec3f targetPos; // this actor relies on the y-position of this variable to be set in a specific way, see EnKame_SetupPrepareToAttack /* 0x2C8 */ Vec3f bodyPartsPos[SNAPPER_BODYPART_MAX]; /* 0x340 */ ColliderCylinder collider; } EnKame; // size = 0x38C diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 77d33673b..e2557b1c3 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -231,7 +231,7 @@ void EnPeehat_Destroy(Actor* thisx, PlayState* play) { void func_80897170(EnPeehat* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 1.1f; - this->drawDmgEffFrozenSteamScale = 1.6500001f; + this->drawDmgEffFrozenSteamScale = 1650.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->colliderSphere.base.colType = COLTYPE_HIT3; this->unk_2B0 = 80; diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index 43b60256b..d37bf2605 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -195,7 +195,7 @@ void func_808FA11C(EnRr* this) { this->collider1.info.elemType = ELEMTYPE_UNK0; this->unk_1EE = 80; this->drawDmgEffScale = 0.85f; - this->drawDmgEffFrozenSteamScale = 1.2750001f; + this->drawDmgEffFrozenSteamScale = 1275.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->actor.flags &= ~ACTOR_FLAG_400; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index 29f5793d2..ca614643f 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -198,7 +198,7 @@ void EnWallmas_Destroy(Actor* thisx, PlayState* play) { void EnWallmas_Freeze(EnWallmas* this) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; this->drawDmgEffScale = 0.55f; - this->drawDmgEffFrozenSteamScale = 0.82500005f; + this->drawDmgEffFrozenSteamScale = 825.0f * 0.001f; this->drawDmgEffAlpha = 1.0f; this->collider.base.colType = 3; this->timer = 80; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 46c14cb0e..09f7da10d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -12240,44 +12240,44 @@ 0x80AD6CBC:("BgLotus_Draw",), 0x80AD6DD0:("EnKame_Init",), 0x80AD6F08:("EnKame_Destroy",), - 0x80AD6F34:("func_80AD6F34",), - 0x80AD6F9C:("func_80AD6F9C",), - 0x80AD7018:("func_80AD7018",), - 0x80AD70A0:("func_80AD70A0",), - 0x80AD70EC:("func_80AD70EC",), - 0x80AD71B4:("func_80AD71B4",), - 0x80AD7254:("func_80AD7254",), - 0x80AD73A8:("func_80AD73A8",), - 0x80AD7424:("func_80AD7424",), - 0x80AD7568:("func_80AD7568",), - 0x80AD75A8:("func_80AD75A8",), - 0x80AD76CC:("func_80AD76CC",), - 0x80AD7798:("func_80AD7798",), - 0x80AD792C:("func_80AD792C",), - 0x80AD7948:("func_80AD7948",), - 0x80AD7B18:("func_80AD7B18",), - 0x80AD7B90:("func_80AD7B90",), - 0x80AD7C54:("func_80AD7C54",), - 0x80AD7D40:("func_80AD7D40",), - 0x80AD7DA4:("func_80AD7DA4",), - 0x80AD7E0C:("func_80AD7E0C",), - 0x80AD7EC0:("func_80AD7EC0",), - 0x80AD7F10:("func_80AD7F10",), - 0x80AD7FA4:("func_80AD7FA4",), - 0x80AD7FF8:("func_80AD7FF8",), - 0x80AD8060:("func_80AD8060",), - 0x80AD810C:("func_80AD810C",), - 0x80AD8148:("func_80AD8148",), - 0x80AD825C:("func_80AD825C",), - 0x80AD8364:("func_80AD8364",), - 0x80AD8388:("func_80AD8388",), - 0x80AD84C0:("func_80AD84C0",), + 0x80AD6F34:("EnKame_Blink",), + 0x80AD6F9C:("EnKame_Freeze",), + 0x80AD7018:("EnKame_Thaw",), + 0x80AD70A0:("EnKame_SetupIdle",), + 0x80AD70EC:("EnKame_Idle",), + 0x80AD71B4:("EnKame_SetupWalk",), + 0x80AD7254:("EnKame_Walk",), + 0x80AD73A8:("EnKame_SetupRetreatIntoShell",), + 0x80AD7424:("EnKame_RetreatIntoShell",), + 0x80AD7568:("EnKame_SetAttackSpeed",), + 0x80AD75A8:("EnKame_ProcessAttackEffects",), + 0x80AD76CC:("EnKame_SetupPrepareToAttack",), + 0x80AD7798:("EnKame_PrepareToAttack",), + 0x80AD792C:("EnKame_SetupAttack",), + 0x80AD7948:("EnKame_Attack",), + 0x80AD7B18:("EnKame_SetupEmergeFromShell",), + 0x80AD7B90:("EnKame_EmergeFromShell",), + 0x80AD7C54:("EnKame_SetupFlip",), + 0x80AD7D40:("EnKame_Flip",), + 0x80AD7DA4:("EnKame_SetupStruggle",), + 0x80AD7E0C:("EnKame_Struggle",), + 0x80AD7EC0:("EnKame_SetupFlipUpright",), + 0x80AD7F10:("EnKame_FlipUpright",), + 0x80AD7FA4:("EnKame_SetupStunned",), + 0x80AD7FF8:("EnKame_Stunned",), + 0x80AD8060:("EnKame_SetupDamaged",), + 0x80AD810C:("EnKame_Damaged",), + 0x80AD8148:("EnKame_SetupDead",), + 0x80AD825C:("EnKame_Dead",), + 0x80AD8364:("EnKame_SetupBurstIntoFlames",), + 0x80AD8388:("EnKame_BurstIntoFlames",), + 0x80AD84C0:("EnKame_UpdateDamage",), 0x80AD881C:("EnKame_Update",), - 0x80AD8A48:("func_80AD8A48",), - 0x80AD8AF8:("func_80AD8AF8",), + 0x80AD8A48:("EnKame_OverrideLimbDraw",), + 0x80AD8AF8:("EnKame_PostLimbDraw",), 0x80AD8BC0:("EnKame_Draw",), - 0x80AD8CEC:("Enkame_OverrideLimbDraw",), - 0x80AD8D64:("func_80AD8D64",), + 0x80AD8CEC:("EnKame_SpikedSnapperOverrideLimbDraw",), + 0x80AD8D64:("EnKame_DrawSpikedSnapper",), 0x80AD9240:("func_80AD9240",), 0x80AD92FC:("func_80AD92FC",), 0x80AD9358:("func_80AD9358",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index ba29f8d91..d0ad05d81 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -12992,14 +12992,14 @@ 0x80AD8DE0:("D_80AD8DE0","UNK_TYPE1","",0x1), 0x80AD8E0C:("D_80AD8E0C","UNK_TYPE1","",0x1), 0x80AD8E14:("D_80AD8E14","UNK_TYPE1","",0x1), - 0x80AD8E34:("D_80AD8E34","UNK_TYPE4","",0x4), + 0x80AD8E34:("sEyeTextures","UNK_TYPE4","",0x4), 0x80AD8E44:("D_80AD8E44","UNK_TYPE1","",0x1), - 0x80AD8E50:("D_80AD8E50","UNK_TYPE4","",0x4), - 0x80AD8E54:("D_80AD8E54","UNK_TYPE1","",0x1), - 0x80AD8E58:("D_80AD8E58","UNK_TYPE1","",0x1), - 0x80AD8E5C:("D_80AD8E5C","UNK_TYPE1","",0x1), - 0x80AD8E68:("D_80AD8E68","UNK_TYPE1","",0x1), - 0x80AD8EA4:("sLimbToBodyParts","UNK_TYPE1","",0x1), + 0x80AD8E50:("sTexturesDesegmented","UNK_TYPE4","",0x4), + 0x80AD8E54:("sSnowPrimColor","UNK_TYPE1","",0x1), + 0x80AD8E58:("sSnowEnvColor","UNK_TYPE1","",0x1), + 0x80AD8E5C:("sVelocity","UNK_TYPE1","",0x1), + 0x80AD8E68:("sBodyLimbBodyPartOffsets","Vec3f","[5]",0x3C), + 0x80AD8EA4:("sLimbToBodyParts","s8","[13]",0xD), 0x80AD8EA5:("D_80AD8EA5","UNK_TYPE1","",0x1), 0x80AD8EC0:("D_80AD8EC0","f32","",0x4), 0x80AD8EC4:("D_80AD8EC4","f32","",0x4), From 2e87212038a4abe3c66d20b98d6f1c2fff8f2380 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 24 Sep 2023 01:46:07 -0700 Subject: [PATCH 25/74] z_message_staff (1 NON-MATCHING) (#1376) * z_message_staff from z_message branch * Use highscores array * Clean up * format * PR cleanup * PR Review * Fix bss * Fix bss --- include/functions.h | 10 +- include/z64message.h | 234 +++++-- include/z64save.h | 47 +- src/code/code_8012EC80.c | 3 +- src/code/z_message.c | 153 ++-- src/code/z_message_nes.c | 16 +- src/code/z_message_staff.c | 654 +++++++++++++++++- src/code/z_parameter.c | 2 +- src/code/z_play.c | 6 +- src/code/z_player_lib.c | 4 +- src/code/z_sram_NES.c | 10 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 67 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 46 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 6 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 16 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 12 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 10 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 2 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 7 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_Oceff_Wipe/z_oceff_wipe.c | 2 +- .../actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c | 2 +- .../actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c | 2 +- .../actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c | 2 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 2 +- .../actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c | 2 +- .../actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c | 2 +- .../actors/ovl_player_actor/z_player.c | 14 +- .../ovl_file_choose/z_file_nameset_NES.c | 1 - tools/disasm/files.txt | 1 + tools/disasm/functions.txt | 10 +- tools/namefixer.py | 36 +- 35 files changed, 1108 insertions(+), 281 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7ab743bd0..00e992e9e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1010,13 +1010,13 @@ void func_80148B98(PlayState* play, u8 arg1); // void func_801491DC(void); // void func_80149454(void); // void func_801496C8(void); -// void func_8014995C(void); +void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); void func_80149C18(PlayState* play); // void Message_FindMessage(void); void func_80149F74(PlayState* play, u32** ppuParm2); -// void func_8014AAD0(void); +void Message_HandleOcarina(PlayState* play); void func_8014ADBC(PlayState* play, UNK_PTR puParm2); -// void func_8014C70C(void); +void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos); // void func_8014CCB4(void); // void func_8014CDF0(void); @@ -1027,7 +1027,7 @@ void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_ void func_80150A84(PlayState* play); void func_80150D08(PlayState* play, u32 uParm2); void func_801514B0(PlayState* play, u16 arg1, u8 arg2); -void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor); +void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor); void Message_ContinueTextbox(PlayState* play, u16 textId); void func_80151A68(PlayState* play, u16 textId); void Message_BombersNotebookQueueEvent(PlayState* play, u8 event); @@ -1061,7 +1061,7 @@ void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3); // void func_8015A144(void); void func_8015B198(PlayState* play); void Message_FindCreditsMessage(PlayState* play, u16 textId); -void func_8015E7EC(PlayState* play, UNK_PTR puParm2); +void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); // void func_8015F8A8(UNK_TYPE4 ctxt); uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); diff --git a/include/z64message.h b/include/z64message.h index 2a3810ff1..fc41055d4 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -10,6 +10,135 @@ struct MessageTableEntry; struct OcarinaStaff; struct PlayState; +typedef enum TextBoxType { + /* 0x00 */ TEXTBOX_TYPE_0, + /* 0x01 */ TEXTBOX_TYPE_1, + /* 0x02 */ TEXTBOX_TYPE_2, + /* 0x03 */ TEXTBOX_TYPE_3, + /* 0x04 */ TEXTBOX_TYPE_4, + /* 0x05 */ TEXTBOX_TYPE_5, + /* 0x06 */ TEXTBOX_TYPE_6, + /* 0x07 */ TEXTBOX_TYPE_7, + /* 0x08 */ TEXTBOX_TYPE_8, + /* 0x09 */ TEXTBOX_TYPE_9, + /* 0x0A */ TEXTBOX_TYPE_A, + /* 0x0B */ TEXTBOX_TYPE_B, + /* 0x0C */ TEXTBOX_TYPE_C, + /* 0x0D */ TEXTBOX_TYPE_D, + /* 0x0E */ TEXTBOX_TYPE_E, + /* 0x0F */ TEXTBOX_TYPE_F, + /* 0x10 */ TEXTBOX_TYPE_MAX +} TextBoxType; + +#define TEXTBOX_ENDTYPE_00 0x00 + +#define TEXTBOX_ENDTYPE_10 0x10 +#define TEXTBOX_ENDTYPE_11 0x11 +#define TEXTBOX_ENDTYPE_12 0x12 + +#define TEXTBOX_ENDTYPE_20 0x20 + +#define TEXTBOX_ENDTYPE_30 0x30 + +#define TEXTBOX_ENDTYPE_40 0x40 +#define TEXTBOX_ENDTYPE_41 0x41 +#define TEXTBOX_ENDTYPE_42 0x42 + +#define TEXTBOX_ENDTYPE_50 0x50 +#define TEXTBOX_ENDTYPE_52 0x52 +#define TEXTBOX_ENDTYPE_55 0x55 +#define TEXTBOX_ENDTYPE_56 0x56 +#define TEXTBOX_ENDTYPE_57 0x57 + +#define TEXTBOX_ENDTYPE_60 0x60 +#define TEXTBOX_ENDTYPE_61 0x61 +#define TEXTBOX_ENDTYPE_62 0x62 +#define TEXTBOX_ENDTYPE_63 0x63 +#define TEXTBOX_ENDTYPE_64 0x64 + +typedef enum MessageMode { + /* 0x00 */ MSGMODE_NONE, + /* 0x01 */ MSGMODE_TEXT_START, + /* 0x02 */ MSGMODE_TEXT_BOX_GROWING, + /* 0x03 */ MSGMODE_TEXT_STARTING, + /* 0x04 */ MSGMODE_TEXT_NEXT_MSG, + /* 0x05 */ MSGMODE_TEXT_CONTINUING, + /* 0x06 */ MSGMODE_TEXT_DISPLAYING, + /* 0x07 */ MSGMODE_TEXT_AWAIT_INPUT, + /* 0x08 */ MSGMODE_TEXT_DELAYED_BREAK, + /* 0x09 */ MSGMODE_9, + /* 0x0A */ MSGMODE_OCARINA_STARTING, + /* 0x0B */ MSGMODE_SONG_DEMONSTRATION_STARTING, + /* 0x0C */ MSGMODE_SONG_PROMPT_STARTING, + /* 0x0D */ MSGMODE_OCARINA_PLAYING, + /* 0x0E */ MSGMODE_E, + /* 0x0F */ MSGMODE_OCARINA_FAIL, + /* 0x10 */ MSGMODE_OCARINA_FAIL_NO_TEXT, + /* 0x11 */ MSGMODE_OCARINA_NOTES_DROP, + /* 0x12 */ MSGMODE_SONG_PLAYED, + /* 0x13 */ MSGMODE_SETUP_DISPLAY_SONG_PLAYED, + /* 0x14 */ MSGMODE_DISPLAY_SONG_PLAYED, + /* 0x15 */ MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN, + /* 0x16 */ MSGMODE_16, + /* 0x17 */ MSGMODE_17, + /* 0x18 */ MSGMODE_18, + /* 0x19 */ MSGMODE_19, + /* 0x1A */ MSGMODE_SONG_DEMONSTRATION, + /* 0x1B */ MSGMODE_SONG_DEMONSTRATION_DONE, + /* 0x1C */ MSGMODE_SONG_PROMPT, + /* 0x1D */ MSGMODE_SONG_PROMPT_SUCCESS, + /* 0x1E */ MSGMODE_SONG_PROMPT_FAIL, + /* 0x1F */ MSGMODE_SONG_PROMPT_NOTES_DROP, + /* 0x20 */ MSGMODE_OCARINA_AWAIT_INPUT, + /* 0x21 */ MSGMODE_21, + /* 0x22 */ MSGMODE_22, + /* 0x23 */ MSGMODE_23, + /* 0x24 */ MSGMODE_24, + /* 0x25 */ MSGMODE_25, + /* 0x26 */ MSGMODE_26, + /* 0x27 */ MSGMODE_SCARECROW_LONG_RECORDING_START, + /* 0x28 */ MSGMODE_SCARECROW_LONG_RECORDING_ONGOING, + /* 0x29 */ MSGMODE_SCARECROW_LONG_DEMONSTRATION, + /* 0x2A */ MSGMODE_SCARECROW_SPAWN_RECORDING_START, + /* 0x2B */ MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING, + /* 0x2C */ MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED, + /* 0x2D */ MSGMODE_SCARECROW_SPAWN_RECORDING_DONE, + /* 0x2E */ MSGMODE_SCARECROW_SPAWN_DEMONSTRATION, + /* 0x2F */ MSGMODE_2F, + /* 0x30 */ MSGMODE_30, + /* 0x31 */ MSGMODE_31, + /* 0x32 */ MSGMODE_32, + /* 0x33 */ MSGMODE_33, + /* 0x34 */ MSGMODE_34, + /* 0x35 */ MSGMODE_35, + /* 0x36 */ MSGMODE_36, + /* 0x37 */ MSGMODE_37, + /* 0x38 */ MSGMODE_38, + /* 0x39 */ MSGMODE_39, + /* 0x3A */ MSGMODE_3A, + /* 0x3B */ MSGMODE_3B, + /* 0x3C */ MSGMODE_3C, + /* 0x3D */ MSGMODE_3D, + /* 0x3E */ MSGMODE_3E, + /* 0x3F */ MSGMODE_3F, + /* 0x40 */ MSGMODE_40, + /* 0x41 */ MSGMODE_TEXT_AWAIT_NEXT, + /* 0x42 */ MSGMODE_TEXT_DONE, + /* 0x43 */ MSGMODE_TEXT_CLOSING, + /* 0x44 */ MSGMODE_PAUSED, // Causes the message system to do nothing until external code sets a new message mode or calls a public function + /* 0x45 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND, // Scene Title Card + /* 0x46 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT, + /* 0x47 */ MSGMODE_SCENE_TITLE_CARD_DISPLAYING, + /* 0x48 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT, + /* 0x49 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND, + /* 0x4A */ MSGMODE_NEW_CYCLE_0, // End of cycle? + /* 0x4B */ MSGMODE_NEW_CYCLE_1, + /* 0x4C */ MSGMODE_NEW_CYCLE_2, + /* 0x4D */ MSGMODE_OWL_SAVE_0, + /* 0x4E */ MSGMODE_OWL_SAVE_1, + /* 0x4F */ MSGMODE_OWL_SAVE_2 +} MessageMode; + extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; @@ -82,81 +211,78 @@ typedef struct { typedef struct MessageContext { /* 0x00000 */ View view; /* 0x00168 */ Font font; - /* 0x11EF8 */ UNK_PTR unk11EF8; + /* 0x11EF8 */ u8* textboxSegment; /* 0x11EFC */ UNK_TYPE1 unk11EFC[0x4]; /* 0x11F00 */ struct OcarinaStaff* ocarinaStaff; /* 0x11F04 */ u16 currentTextId; - /* 0x11F06 */ UNK_TYPE1 unk11F06[0x2]; + /* 0x11F06 */ u16 choiceTextId; // s16? /* 0x11F08 */ u16 unk11F08; - /* 0x11F0A */ u8 unk11F0A; - /* 0x11F0B */ s8 unk11F0B; - /* 0x11F0C */ s8 unk11F0C; - /* 0x11F0B */ UNK_TYPE1 unk11F0D[0x3]; + /* 0x11F0A */ u8 textBoxType; + /* 0x11F0B */ u8 textBoxPos; + /* 0x11F0C */ u8 unk11F0C; /* 0x11F10 */ s32 msgLength; - /* 0x11F14 */ u16 unk11F14; - /* 0x11F16 */ u16 unk11F16; - /* 0x11F18 */ s8 unk11F18; - /* 0x11F19 */ UNK_TYPE1 unk11F19[0x1]; + /* 0x11F14 */ u16 nextTextId; + /* 0x11F16 */ u16 itemId; + /* 0x11F18 */ u8 unk11F18; /* 0x11F1A */ s16 unk11F1A[3]; /* 0x11F20 */ UNK_TYPE1 unk11F20[0x2]; - /* 0x11F22 */ u8 msgMode; // TODO: MessageMode enum + /* 0x11F22 */ u8 msgMode; /* 0x11F23 */ UNK_TYPE1 unk11F23; /* 0x11F24 */ union { char schar[200]; u16 wchar[100]; } decodedBuffer; /* 0x11FEC */ u16 msgBufPos; - /* 0x11FEE */ s16 unk11FEE; - /* 0x11FF0 */ s16 unk11FF0; - /* 0x11FF2 */ u16 unk11FF2; - /* 0x11FF4 */ s16 unk11FF4; - /* 0x11FF6 */ s16 unk11FF6; + /* 0x11FEE */ u16 textDrawPos; + /* 0x11FF0 */ u16 decodedTextLen; + /* 0x11FF2 */ u16 textUnskippable; + /* 0x11FF4 */ s16 textPosX; + /* 0x11FF6 */ s16 textPosY; /* 0x11FF8 */ s16 unk11FF8; /* 0x11FFA */ s16 unk11FFA; /* 0x11FFC */ s16 unk11FFC; /* 0x11FFE */ s16 unk11FFE[0x3]; - /* 0x12004 */ s16 unk12004; - /* 0x12006 */ s16 unk12006; + /* 0x12004 */ s16 textboxXTarget; + /* 0x12006 */ s16 textboxYTarget; /* 0x12008 */ s16 unk12008; - /* 0x1200A */ UNK_TYPE2 unk1200A; + /* 0x1200A */ s16 unk1200A; /* 0x1200C */ s16 unk1200C; /* 0x1200E */ s16 unk1200E; /* 0x12010 */ s16 unk12010; /* 0x12012 */ s16 unk12012; /* 0x12014 */ s16 unk12014; /* 0x12014 */ s16 unk12016; - /* 0x12018 */ s16 unk12018; // messageR - /* 0x1201A */ s16 unk1201A; // messageG - /* 0x1201C */ s16 unk1201C; // messageB - /* 0x1201E */ s16 unk1201E; // messageA - /* 0x12020 */ u8 unk12020; // probably textboxEndType + /* 0x12018 */ s16 textColorR; + /* 0x1201A */ s16 textColorG; + /* 0x1201C */ s16 textColorB; + /* 0x1201E */ s16 textColorAlpha; + /* 0x12020 */ u8 textboxEndType; /* 0x12021 */ u8 choiceIndex; - /* 0x12022 */ u8 unk12022; + /* 0x12022 */ u8 choiceNum; /* 0x12023 */ u8 stateTimer; - /* 0x12024 */ s16 unk12024; - /* 0x12026 */ u16 unk12026; + /* 0x12024 */ u16 textDelayTimer; + /* 0x12026 */ u16 textDelay; /* 0x12028 */ u16 songPlayed; /* 0x1202A */ u16 ocarinaMode; /* 0x1202C */ u16 ocarinaAction; /* 0x1202E */ u16 lastPlayedSong; /* 0x12030 */ s16 unk_12030; /* 0x12032 */ UNK_TYPE1 unk_12032[0x2]; - /* 0x12034 */ s16 unk12034; - /* 0x12036 */ s16 unk12036; - /* 0x12038 */ s16 unk12038; - /* 0x1203A */ s16 unk1203A; - /* 0x1203C */ s16 unk1203C; + /* 0x12034 */ s16 textboxColorRed; + /* 0x12036 */ s16 textboxColorGreen; + /* 0x12038 */ s16 textboxColorBlue; + /* 0x1203A */ s16 textboxColorAlphaTarget; + /* 0x1203C */ s16 textboxColorAlphaCurrent; /* 0x1203E */ s16 unk1203E; - /* 0x12040 */ struct Actor* unkActor; + /* 0x12040 */ struct Actor* talkActor; /* 0x12044 */ s16 unk12044; - /* 0x12046 */ s16 unk12046; - /* 0x12048 */ u8 unk12048; // EnKakasi - /* 0x12049 */ UNK_TYPE1 unk12049[0x1]; - /* 0x1204A */ s16 unk1204A[0x5]; + /* 0x12046 */ s16 blockSunsSong; + /* 0x12048 */ u8 ocarinaButtonIndex; + /* 0x1204A */ s16 ocarinaButtonsPosY[5]; /* 0x12054 */ s16 unk12054[6]; // First, second and third digits in lottery code guess /* 0x1205A */ UNK_TYPE1 unk12060[0x8]; - /* 0x12068 */ s16 unk12068; - /* 0x1206A */ s16 unk1206A; + /* 0x12068 */ s16 textboxX; + /* 0x1206A */ s16 textboxY; /* 0x1206C */ s32 unk1206C; /* 0x12070 */ s32 unk12070; /* 0x12074 */ s32 unk12074; @@ -164,21 +290,24 @@ typedef struct MessageContext { /* 0x1207C */ s32 bankRupees; /* 0x12080 */ struct MessageTableEntry* messageEntryTable; /* 0x12084 */ struct MessageTableEntry* messageEntryTableNes; - /* 0x12088 */ UNK_TYPE4 unk12088; + /* 0x12088 */ UNK_TYPE1 unk12088[0x4]; /* 0x1208C */ struct MessageTableEntry* messageTableStaff; - /* 0x12090 */ s16 unk12090; - /* 0x12092 */ s16 unk12092; - /* 0x12094 */ s8 unk12094; - /* 0x12095 */ UNK_TYPE1 unk12095[0x3]; - /* 0x12098 */ f32 unk12098; // Text_Scale? - /* 0x1209C */ s16 unk1209C; - /* 0x1209E */ UNK_TYPE1 unk1209E[0x2]; - /* 0x120A0 */ s32 unk120A0; - /* 0x120A4 */ s16 unk120A4[6]; - /* 0x120B0 */ u8 unk120B0; + /* 0x12090 */ s16 textIsCredits; + /* 0x12092 */ s16 messageHasSetSfx; + /* 0x12094 */ u8 textboxSkipped; + /* 0x12098 */ f32 textCharScale; + /* 0x1209C */ s16 textFade; + /* 0x120A0 */ s32 ocarinaAvailableSongs; + /* 0x120A4 */ s16 stickAdjX; + /* 0x120A6 */ s16 stickAdjY; + /* 0x120A8 */ s16 stickXRepeatState; + /* 0x120AA */ s16 stickYRepeatState; + /* 0x120AC */ s16 stickXRepeatTimer; + /* 0x120AE */ s16 stickYRepeatTimer; + /* 0x120B0 */ u8 ocarinaSongEffectActive; /* 0x120B1 */ u8 bombersNotebookEventQueueCount; /* 0x120B2 */ u8 bombersNotebookEventQueue[10]; - /* 0x120BC */ u16 unk_120BC; + /* 0x120BC */ u16 hudVisibility; /* 0x120BE */ s16 unk120BE; /* 0x120C0 */ s16 unk120C0; /* 0x120C2 */ s16 unk120C2; @@ -191,7 +320,8 @@ typedef struct MessageContext { /* 0x120D2 */ s16 unk120D2; /* 0x120D4 */ s16 unk120D4; /* 0x120D6 */ s16 unk120D6; - /* 0x120D8 */ UNK_TYPE1 unk120D8[0x8]; + /* 0x120D8 */ s16 unk120D8; + /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6]; } MessageContext; // size = 0x120E0 #endif diff --git a/include/z64save.h b/include/z64save.h index cdc46f023..c8075d9ec 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -154,6 +154,17 @@ typedef enum { /* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52 } HudVisibility; +typedef enum HighScore { + /* 0 */ HS_BANK_RUPEES, + /* 1 */ HS_UNK_1, + /* 2 */ HS_FISHING, // Fishing flags + /* 3 */ HS_BOAT_ARCHERY, + /* 4 */ HS_HOSRE_BACK_BALLOON, + /* 5 */ HS_LOTTERY_GUESS, // Lottery code chosen by player (only uses lower three hex digits) + /* 6 */ HS_SHOOTING_GALLERY, // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. + /* 7 */ HS_MAX +} HighScore; + #define PICTO_PHOTO_WIDTH 160 #define PICTO_PHOTO_HEIGHT 112 @@ -278,13 +289,7 @@ typedef struct SaveInfo { /* 0xEA8 */ u32 unk_EA8[2]; // Related to blue warps /* 0xEB0 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man /* 0xEB4 */ u32 unk_EB4; - /* 0xEB8 */ u32 bankRupees; - /* 0xEBC */ u32 unk_EBC; - /* 0xEC0 */ u32 unk_EC0; // Fishing flags - /* 0xEC4 */ u32 unk_EC4; - /* 0xEC8 */ u32 horseBackBalloonHighScore; - /* 0xECC */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits) - /* 0xED0 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. + /* 0xEB8 */ u32 highScores[HS_MAX]; /* 0xED4 */ u8 weekEventReg[100]; // "week_event_reg" /* 0xF38 */ u32 regionsVisited; // "area_arrival" /* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear" @@ -430,6 +435,10 @@ typedef enum { #define LINK_IS_CHILD (gSaveContext.save.linkAge == 1) #define LINK_IS_ADULT (gSaveContext.save.linkAge == 0) +#define YEARS_CHILD 5 +#define YEARS_ADULT 17 +#define LINK_AGE_IN_YEARS (!LINK_IS_ADULT ? YEARS_CHILD : YEARS_ADULT) + #define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5) // The day begins at CLOCK_TIME(6, 0) so it must be offset. @@ -510,10 +519,26 @@ typedef enum { #define SET_STOLEN_ITEM_2(itemId) \ (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10)) -#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF)) -#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) >> 0x10)) -#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = (gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score))) -#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = ((gSaveContext.save.saveInfo.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10)) +#define HIGH_SCORE(type) (gSaveContext.save.saveInfo.highScores[(type)]) + +#define HS_GET_BANK_RUPEES() (HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF) +#define HS_SET_BANK_RUPEES(rupees) (HIGH_SCORE(HS_BANK_RUPEES) = ((HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF0000) | (rupees))) + +#define HS_GET_HIGH_SCORE_3_LOWER() (HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) +#define HS_SET_HIGH_SCORE_3_LOWER(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) | (score))) +#define HS_GET_BOAT_ARCHERY_HIGH_SCORE() ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) >> 0x10) +#define HS_SET_BOAT_ARCHERY_HIGH_SCORE(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) | ((u16)(score) << 0x10))) + +#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HOSRE_BACK_BALLOON)) +#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HOSRE_BACK_BALLOON) = (time)) + +#define HS_GET_LOTTERY_CODE_GUESS() (HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF) +#define HS_SET_LOTTERY_CODE_GUESS(guess) (HIGH_SCORE(HS_LOTTERY_GUESS) = ((HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF0000) | ((guess) & 0xFFFF))) + +#define HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF)) +#define HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) | ((u16)(score))) +#define HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF0000) >> 0x10)) +#define HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (HIGH_SCORE(HS_SHOOTING_GALLERY) = (HIGH_SCORE(HS_SHOOTING_GALLERY) & 0xFFFF) | ((u16)(score) << 0x10)) /** * gSaveContext.save.saveInfo.weekEventReg diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index 9a2100d01..768c0b8dc 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -723,6 +723,5 @@ void Inventory_SaveLotteryCodeGuess(PlayState* play) { lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit - gSaveContext.save.saveInfo.lotteryCodeGuess = - (gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF); + HS_SET_LOTTERY_CODE_GUESS(lotteryCodeGuess); } diff --git a/src/code/z_message.c b/src/code/z_message.c index cf88c60df..37e392aec 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -67,11 +67,11 @@ void func_80147520(void) { void func_80147564(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->unk1204A[0] = 0xBD; - msgCtx->unk1204A[1] = 0xB8; - msgCtx->unk1204A[2] = 0xB3; - msgCtx->unk1204A[3] = 0xAE; - msgCtx->unk1204A[4] = 0xA9; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_A] = 189; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_DOWN] = 184; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_RIGHT] = 179; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_LEFT] = 174; + msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_UP] = 169; func_80147520(); D_801F6B0C = 0x50; D_801F6B10 = 0x96; @@ -91,7 +91,7 @@ s32 Message_ShouldAdvance(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Input* controller = CONTROLLER1(&play->state); - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { if (CHECK_BTN_ALL(controller->press.button, BTN_A)) { Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } @@ -110,7 +110,7 @@ s32 Message_ShouldAdvanceSilent(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Input* controller = CONTROLLER1(&play->state); - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(controller->press.button, BTN_A); } else { return CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) || @@ -124,7 +124,7 @@ void Message_CloseTextbox(PlayState* play) { if (play->msgCtx.msgLength != 0) { msgCtx->stateTimer = 2; msgCtx->msgMode = 0x43; - msgCtx->unk12020 = 0; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; Audio_PlaySfx(NA_SE_NONE); } } @@ -172,13 +172,13 @@ void func_80148B98(PlayState* play, u8 arg1) { void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->unk11FF4 = 0x30; + msgCtx->textPosX = 0x30; if (arg2 == 1) { - msgCtx->unk11FF6 = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; + msgCtx->textPosY = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; } else { - msgCtx->unk11FF6 = msgCtx->unk11FFE[msgCtx->choiceIndex]; + msgCtx->textPosY = msgCtx->unk11FFE[msgCtx->choiceIndex]; } - func_80147818(play, puParm2, msgCtx->unk11FF4, msgCtx->unk11FF6); + func_80147818(play, puParm2, msgCtx->textPosX, msgCtx->textPosY); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148D64.s") @@ -191,7 +191,7 @@ void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801496C8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014995C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawTextChar.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149C18.s") @@ -225,11 +225,11 @@ void Message_FindMessage(PlayState* play, u16 textId) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149F74.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014AAD0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014ADBC.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014C70C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_LoadItemIcon.s") void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; @@ -239,7 +239,7 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg Font_LoadChar(play, codePointIndex, temp1); msgCtx->decodedBuffer.wchar[decodedBufPos] = codePointIndex; temp1 += FONT_CHAR_TEX_SIZE; - temp2 += (16.0f * msgCtx->unk12098); + temp2 += (16.0f * msgCtx->textCharScale); *offset = temp1; *arg3 = temp2; } @@ -264,7 +264,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x815C; - f += 16.0f * msgCtx->unk12098 * 3.0f; + f += 16.0f * msgCtx->textCharScale * 3.0f; *decodedBufPos = t; *offset = k; *arg3 = f; @@ -302,7 +302,7 @@ void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { } temp_s1--; - sp3C += (stringLimit - 1) * (16.0f * msgCtx->unk12098); + sp3C += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); *arg3 = temp_s1; *arg1 = temp_s2; @@ -317,15 +317,15 @@ void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801514B0.s") -void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor) { +void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaAction = 0xFFFF; func_80150D08(play, textId); - msgCtx->unkActor = Actor; + msgCtx->talkActor = actor; msgCtx->msgMode = 1; msgCtx->stateTimer = 0; - msgCtx->unk12024 = 0; + msgCtx->textDelayTimer = 0; play->msgCtx.ocarinaMode = 0; } @@ -338,7 +338,7 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { func_80150A84(play); msgCtx->msgMode = 5; msgCtx->stateTimer = 8; - msgCtx->unk12024 = 0; + msgCtx->textDelayTimer = 0; if (interfaceCtx->unk_222 == 0) { if (textId != 0x1B93) { @@ -347,11 +347,11 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { func_8011552C(play, DO_ACTION_DECIDE); } } - msgCtx->unk1203C = msgCtx->unk1203A; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; if (play->pauseCtx.bombersNotebookOpen) { - msgCtx->unk12004 = 0x22; - msgCtx->unk12006 = 0x15E; + msgCtx->textboxXTarget = 0x22; + msgCtx->textboxYTarget = 0x15E; func_80149C18(play); msgCtx->stateTimer = 1; } @@ -365,8 +365,8 @@ void func_80151A68(PlayState* play, u16 textId) { func_80150A84(play); func_8015B198(play); msgCtx->msgMode = 0x45; - msgCtx->unk12024 = 0; - msgCtx->unk1203C = msgCtx->unk1203A = msgCtx->unk1201E = 0; + msgCtx->textDelayTimer = 0; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; msgCtx->stateTimer = 30; // Day/Dawn/Night.. Messages @@ -432,12 +432,12 @@ u32 func_80151C9C(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80151DA4.s") void func_80152434(PlayState* play, u16 arg2) { - play->msgCtx.unk12046 = 0; + play->msgCtx.blockSunsSong = false; func_80151DA4(play, arg2); } void func_80152464(PlayState* play, u16 arg1) { - play->msgCtx.unk12046 = 1; + play->msgCtx.blockSunsSong = true; func_80151DA4(play, arg1); } @@ -450,32 +450,33 @@ u8 Message_GetState(MessageContext* msgCtx) { } if (msgCtx->msgMode == 0x42) { - if (msgCtx->unk11F14 != 0xFFFF) { + if (msgCtx->nextTextId != 0xFFFF) { return TEXT_STATE_1; } - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return TEXT_STATE_CHOICE; } - if ((msgCtx->unk12020 == 0x40) || (msgCtx->unk12020 == 0x42) || (msgCtx->unk12020 == 0x30)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30)) { return TEXT_STATE_5; } - if (msgCtx->unk12020 == 0x41) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41) { return TEXT_STATE_16; } - if ((msgCtx->unk12020 >= 0x50) && (msgCtx->unk12020 < 0x58)) { + if ((msgCtx->textboxEndType >= TEXTBOX_ENDTYPE_50) && (msgCtx->textboxEndType <= TEXTBOX_ENDTYPE_57)) { return TEXT_STATE_3; } - if ((msgCtx->unk12020 == 0x60) || (msgCtx->unk12020 == 0x61)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61)) { return TEXT_STATE_14; } - if (msgCtx->unk12020 == 0x62) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62) { return TEXT_STATE_15; } - if (msgCtx->unk12020 == 0x63) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_63) { return TEXT_STATE_17; } - if (msgCtx->unk12020 == 0x12) { + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_12) { return TEXT_STATE_18; } return TEXT_STATE_DONE; @@ -526,7 +527,7 @@ void func_80152EC0(PlayState* play) { if (1) {} if ((msgCtx->songPlayed < 0x17) && (msgCtx->songPlayed != 0xE) && ((msgCtx->ocarinaAction < 0x43) || (msgCtx->ocarinaAction >= 0x47))) { - msgCtx->unk120B0 = 1; + msgCtx->ocarinaSongEffectActive = true; if (msgCtx->songPlayed != 0x16) { Actor_Spawn(&play->actorCtx, play, D_801D02D8[msgCtx->songPlayed], player->actor.world.pos.x, player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, D_801D02F8[msgCtx->songPlayed]); @@ -541,16 +542,14 @@ void func_80152EC0(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153750.s") -void func_80153E7C(PlayState* play, void* arg1) { - if ((gSaveContext.options.language == 0) && (play->msgCtx.unk12090 == 0)) { - func_8014ADBC(play, arg1); - return; +void func_80153E7C(PlayState* play, Gfx** gfxP) { + if ((gSaveContext.options.language == 0) && !play->msgCtx.textIsCredits) { + func_8014ADBC(play, gfxP); + } else if (play->msgCtx.textIsCredits) { + Message_DrawTextCredits(play, gfxP); + } else { + func_8015966C(play, gfxP, 0); } - if (play->msgCtx.unk12090 != 0) { - func_8015E7EC(play, arg1); - return; - } - func_8015966C(play, arg1, 0); } #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153EF0.s") @@ -586,39 +585,39 @@ void func_801586A4(PlayState* play) { void Message_Init(PlayState* play) { Font* font; - MessageContext* messageCtx = &play->msgCtx; + MessageContext* msgCtx = &play->msgCtx; func_801586A4(play); play->msgCtx.ocarinaMode = 0; - messageCtx->msgMode = 0; - messageCtx->msgLength = 0; - messageCtx->currentTextId = 0; - messageCtx->unk12020 = 0; - messageCtx->choiceIndex = 0; - messageCtx->ocarinaAction = messageCtx->unk11FF2 = 0; - messageCtx->unk1201E = 0xFF; - View_Init(&messageCtx->view, play->state.gfxCtx); - messageCtx->unk11EF8 = THA_AllocTailAlign16(&play->state.heap, 0x13C00); + msgCtx->msgMode = 0; + msgCtx->msgLength = 0; + msgCtx->currentTextId = 0; + msgCtx->textboxEndType = 0; + msgCtx->choiceIndex = 0; + msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; + msgCtx->textColorAlpha = 0xFF; + View_Init(&msgCtx->view, play->state.gfxCtx); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.heap, 0x13C00); font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; - messageCtx->unk12090 = messageCtx->unk12092 = 0; - messageCtx->unk12094 = 0; - messageCtx->unk1209C = 0; - messageCtx->unk120A0 = 0; - messageCtx->unk12068 = 0x34; - messageCtx->unk1206A = 0x24; - messageCtx->unk120B0 = 0; - messageCtx->unk120BE = 0; - messageCtx->unk120C0 = 0; - messageCtx->unk120C2 = 0; - messageCtx->unk120C4 = 0; - messageCtx->unk120C8 = 0; - messageCtx->unk120CA = 0; - messageCtx->unk120CC = 0; - messageCtx->unk120CE = 0; - messageCtx->unk120D0 = 0; - messageCtx->unk120D2 = 0; - messageCtx->unk120D4 = 0; - messageCtx->unk120D6 = 0; + msgCtx->textIsCredits = msgCtx->messageHasSetSfx = false; + msgCtx->textboxSkipped = 0; + msgCtx->textFade = 0; + msgCtx->ocarinaAvailableSongs = 0; + msgCtx->textboxX = 0x34; + msgCtx->textboxY = 0x24; + msgCtx->ocarinaSongEffectActive = false; + msgCtx->unk120BE = 0; + msgCtx->unk120C0 = 0; + msgCtx->unk120C2 = 0; + msgCtx->unk120C4 = 0; + msgCtx->unk120C8 = 0; + msgCtx->unk120CA = 0; + msgCtx->unk120CC = 0; + msgCtx->unk120CE = 0; + msgCtx->unk120D0 = 0; + msgCtx->unk120D2 = 0; + msgCtx->unk120D4 = 0; + msgCtx->unk120D6 = 0; } diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 759c3d611..1dcb16474 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -91,7 +91,7 @@ void Message_LoadCharNES(PlayState* play, u8 codePointIndex, s32* offset, f32* a Font_LoadCharNES(play, codePointIndex, temp1); msgCtx->decodedBuffer.schar[decodedBufPos] = codePointIndex; temp1 += FONT_CHAR_TEX_SIZE; - temp2 += (16.0f * msgCtx->unk12098); + temp2 += (16.0f * msgCtx->textCharScale); *offset = temp1; *arg3 = temp2; } @@ -128,7 +128,7 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse o += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.schar[p] = 's'; - f += 16.0f * msgCtx->unk12098 * 6.0f; + f += 16.0f * msgCtx->textCharScale * 6.0f; *decodedBufPos = p; *offset = o; *arg3 = f; @@ -152,7 +152,7 @@ void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* of } p--; - f += 16.0f * msgCtx->unk12098 * (D_801D0710[gSaveContext.options.language - 1] + 1); + f += 16.0f * msgCtx->textCharScale * (D_801D0710[gSaveContext.options.language - 1] + 1); *decodedBufPos = p; *offset = o; *arg3 = f; @@ -191,9 +191,9 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32 Font_LoadCharNES(play, 's', o); o += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.schar[p] = 's'; - f += 16.0f * msgCtx->unk12098 * 6.0f; + f += 16.0f * msgCtx->textCharScale * 6.0f; } else { - f += 16.0f * msgCtx->unk12098 * 5.0f; + f += 16.0f * msgCtx->textCharScale * 5.0f; } *decodedBufPos = p; @@ -246,7 +246,7 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* } } - f += 5.0f * (16.0f * msgCtx->unk12098); + f += 5.0f * (16.0f * msgCtx->textCharScale); *decodedBufPos = p - 1; *offset = o; *arg3 = f; @@ -278,11 +278,11 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de } currentChar = msgCtx->decodedBuffer.schar[p]; p++; - f += (D_801D0470[currentChar - ' '] * msgCtx->unk12098); + f += (D_801D0470[currentChar - ' '] * msgCtx->textCharScale); } p--; - f += (stringLimit - 1) * (16.0f * msgCtx->unk12098); + f += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); *decodedBufPos = p; *offset = o; *arg2 = f; diff --git a/src/code/z_message_staff.c b/src/code/z_message_staff.c index ab30a3d9c..a093ef5c1 100644 --- a/src/code/z_message_staff.c +++ b/src/code/z_message_staff.c @@ -17,12 +17,660 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId) { nextSegment = msgEntry->segment; font->messageStart = foundSegment - segment; font->messageEnd = nextSegment - foundSegment; - return; + break; } msgEntry++; } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015E7EC.s") +f32 sCreditsFontWidths[144] = { + 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, + 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, + 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f, + 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f, + 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f, + 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 10.0f, + 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 9.0f, + 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 14.0f, + 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/func_8015F8A8.s") +#ifdef NON_MATCHING +// https://decomp.me/scratch/yc8Or +// v0/v1 swap between `character` and `i` +void Message_DrawTextCredits(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + u16 lookAheadCharacter; + u16 j; + u16 i; + u16 sfxHi; + char character; + u16 charTexIndex; + Font* font = &msgCtx->font; + Gfx* gfx = *gfxP; + + msgCtx->textPosX = msgCtx->unk11FF8; + + if (!msgCtx->textIsCredits) { + msgCtx->textPosY = msgCtx->unk11FFA; + } else { + msgCtx->textPosY = 48; + } + + if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + + charTexIndex = 0; + + for (i = 0; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.schar[i]; + + switch (character) { + case 0x1: // MESSAGE_NEWLINE + msgCtx->textPosX = msgCtx->unk11FF8; + if ((msgCtx->choiceNum == 1) || (msgCtx->choiceNum == 3)) { + msgCtx->textPosX += 32; + } + if ((msgCtx->choiceNum == 2) && (msgCtx->textPosY != msgCtx->unk11FFA)) { + msgCtx->textPosX += 32; + } + msgCtx->textPosY += msgCtx->unk11FFC; + break; + + case 0x5: // Remnant of MESSAGE_COLOR + break; + + case ' ': + msgCtx->textPosX += 6; + break; + + case 0x4: // MESSAGE_BOX_BREAK + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + } + *gfxP = gfx; + return; + + case 0x6: // MESSAGE_SHIFT + msgCtx->textPosX += msgCtx->decodedBuffer.schar[++i]; + break; + + case 0x7: // MESSAGE_TEXTID + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_20; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + Font_LoadMessageBoxEndIcon(font, 0); + } + *gfxP = gfx; + return; + + case 0x8: // MESSAGE_QUICKTEXT_ENABLE + if (((i + 1) == msgCtx->textDrawPos) && + ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) { + j = i; + while (true) { + lookAheadCharacter = msgCtx->decodedBuffer.schar[j]; + if (lookAheadCharacter == 6) { + j += 2; + continue; + } + if ((lookAheadCharacter != 9) && (lookAheadCharacter != 0xA) && (lookAheadCharacter != 0xB) && + (lookAheadCharacter != 0xC) && (lookAheadCharacter != 0xD) && (lookAheadCharacter != 4) && + (lookAheadCharacter != 2)) { + j++; + continue; + } + break; + } + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + // fallthrough + case 0x9: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0xD: // MESSAGE_AWAIT_BUTTON_PRESS + if ((i + 1) == msgCtx->textDrawPos) { + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_INPUT; + Font_LoadMessageBoxEndIcon(font, 0); + } + *gfxP = gfx; + return; + } + break; + + case 0xC: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i]; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x11: // MESSAGE_FADE2 + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i] << 8; + msgCtx->stateTimer |= msgCtx->decodedBuffer.schar[++i]; + } + *gfxP = gfx; + return; + + case 0x12: // MESSAGE_SFX + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && !msgCtx->messageHasSetSfx) { + msgCtx->messageHasSetSfx = true; + sfxHi = msgCtx->decodedBuffer.schar[i + 1]; + sfxHi = sfxHi << 8; + Audio_PlaySfx(sfxHi | msgCtx->decodedBuffer.schar[i + 2]); + } + i += 2; + break; + + case 0x13: // remnant of MESSAGE_ITEM_ICON + break; + + case 0x15: // MESSAGE_BACKGROUND + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 1) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 0x61) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0xC2) << 2, (msgCtx->unk12012 + 0x31) << 2, 0, 0, 0, 1 << 10, + 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2, + (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + msgCtx->textPosX += 0x20; + break; + + case 0x14: // MESSAGE_TEXT_SPEED + msgCtx->textDelay = msgCtx->decodedBuffer.schar[++i]; + break; + + case 0x1A: // MESSAGE_UNSKIPPABLE + msgCtx->textUnskippable = true; + break; + + case 0x1B: // MESSAGE_TWO_CHOICE + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + msgCtx->choiceIndex = 0; + Font_LoadMessageBoxEndIcon(font, 2); + } + break; + + case 0x1C: // MESSAGE_THREE_CHOICE + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11; + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + msgCtx->choiceIndex = 0; + Font_LoadMessageBoxEndIcon(font, 2); + } + break; + + case 0x2: // MESSAGE_END + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + } + *gfxP = gfx; + return; + + case 0x10: // MESSAGE_OCARINA + if ((i + 1) == msgCtx->textDrawPos) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + break; + + case 0xE: // MESSAGE_FADE + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + msgCtx->stateTimer = msgCtx->decodedBuffer.schar[++i]; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0xA: // MESSAGE_PERSISTENT + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30; + } + *gfxP = gfx; + return; + + case 0xB: // MESSAGE_EVENT + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos) && + (msgCtx->textDelayTimer == msgCtx->textDelay)) { + Audio_PlaySfx(NA_SE_NONE); + } + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + charTexIndex += FONT_CHAR_TEX_SIZE; + + msgCtx->textPosX += (s32)(sCreditsFontWidths[character - ' '] * msgCtx->textCharScale); + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = msgCtx->textDelay; + } else { + msgCtx->textDelayTimer--; + } + + *gfxP = gfx; +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s") +#endif + +void Message_DecodeCredits(PlayState* play) { + u16 curChar; + s16 loadChar; + s16 i; + s16 playerNameLen; + s16 decodedBufPos = 0; + s16 charOffset; + f32 timeInSeconds; + s16 numLines = 0; + s16 value; + s16 digits[4]; + s32 charTexIdx = 0; + MessageContext* msgCtx = &play->msgCtx; + Font* font = &play->msgCtx.font; + + msgCtx->nextTextId = 0xFFFF; + + while (true) { + curChar = font->msgBuf.schar[msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos]; + + if ((curChar == 4) || (curChar == 7) || (curChar == 0xC) || (curChar == 0xB) || (curChar == 2)) { + // Textbox decoding ends with any of the above text control characters + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + msgCtx->unk11FFA = msgCtx->textboxY + 8; + + if (msgCtx->textBoxType != TEXTBOX_TYPE_4) { + if (numLines == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + 26; + } else if (numLines == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + 20; + } else if (numLines == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 16; + } + } + + if (curChar == 7) { + value = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2]; + value <<= 8; + msgCtx->nextTextId = msgCtx->decodedBuffer.schar[decodedBufPos] | value; + } + + if (curChar == 0xC) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + msgCtx->msgBufPos += 2; + } + + msgCtx->decodedTextLen = decodedBufPos; + + if (msgCtx->textboxSkipped) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + break; + } else if (curChar == 0xF) { + // Substitute the player name control character for the file's player name. + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + curChar = gSaveContext.save.saveInfo.playerData.playerName[i]; + if (curChar == 62) { + curChar = ' '; + } else if (curChar == 64) { + curChar = '.'; + } else if (curChar == 63) { + curChar = '-'; + } else if (curChar < 10) { + charOffset = curChar; + curChar = '0' + charOffset; + } else if (curChar < 36) { + charOffset = curChar; + curChar = 'A' - 10 + charOffset; + } else if (curChar < 62) { + charOffset = curChar; + curChar = 'a' - 36 + charOffset; + } + + if (curChar != ' ') { + Font_LoadCharNES(play, curChar - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = curChar; + decodedBufPos++; + } + decodedBufPos--; + } else if ((curChar == 0x16) || (curChar == 0x17)) { + digits[0] = digits[1] = digits[2] = 0; + if (curChar == 0x17) { + digits[3] = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; + } else { + digits[3] = gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED]; + } + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + } + } + + } else if (curChar == 0x18) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + charTexIdx += FONT_CHAR_TEX_SIZE; + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar != 0x19) { + if (curChar == 0x1D) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x1E) { + value = HIGH_SCORE((u8)font->msgBuf.schar[++msgCtx->msgBufPos]); + if ((font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) == HS_FISHING) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = + (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + value = SQ((f32)value) * 0.0036f + 0.5f; + } + switch (font->msgBuf.schar[msgCtx->msgBufPos] & 0xFF) { + case 0: + case 1: + case 2: + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + charTexIdx += FONT_CHAR_TEX_SIZE; + decodedBufPos++; + } + } + decodedBufPos--; + break; + + case 3: + case 4: + case 6: + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, '"' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + } + } + break; + + default: + break; + } + } else if (curChar == 0x1F) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, ':' - ' ', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = ':'; + decodedBufPos++; + } + } + + decodedBufPos--; + } else if (curChar == 0x13) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1]; + Message_LoadItemIcon(play, font->msgBuf.schar[msgCtx->msgBufPos + 1], msgCtx->textboxY + 10); + } else if (curChar == 0x15) { + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + msgCtx->msgBufPos += 3; + msgCtx->unk12012 = msgCtx->textboxY + 8; + numLines = 2; + } else if (curChar == 5) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 1) { + numLines++; + } else if ((curChar != 8) && (curChar != 9) && (curChar != 0xD) && (curChar != 0x10) && (curChar != 0xA) && + (curChar != 0x1A)) { + if (curChar == 0xE) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x11) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if ((curChar == 6) || (curChar == 0x14)) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos] & 0xFF; + } else if (curChar == 0x12) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x1B) { + msgCtx->choiceNum = 2; + } else if (curChar == 0x1C) { + msgCtx->choiceNum = 3; + } else if (curChar != ' ') { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + } + } + + decodedBufPos++; + msgCtx->msgBufPos++; + } +} diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index a3dc07aaf..2c4106e05 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6870,7 +6870,7 @@ void Interface_Update(PlayState* play) { interfaceCtx->aButtonRoll = -15700.0f; interfaceCtx->aButtonState = A_BTN_STATE_2; - if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) { + if ((msgCtx->msgMode != 0) && (msgCtx->textboxYTarget == 0x26)) { R_A_BTN_Y_OFFSET = -14; } else { R_A_BTN_Y_OFFSET = 0; diff --git a/src/code/z_play.c b/src/code/z_play.c index 9bb8d5817..44efbfbfb 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -961,9 +961,9 @@ void Play_UpdateMain(PlayState* this) { Play_UpdateTransition(this); if (gTransitionTileState != TRANS_TILE_READY) { if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && - (((this->msgCtx.msgMode == 0)) || - ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == 0x42) && - (this->msgCtx.unk12020 == 0x41)) || + (((this->msgCtx.msgMode == MSGMODE_NONE)) || + ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == MSGMODE_TEXT_DONE) && + (this->msgCtx.textboxEndType == TEXTBOX_ENDTYPE_41)) || ((this->msgCtx.currentTextId >= 0x100) && (this->msgCtx.currentTextId <= 0x200))) && (this->gameOverCtx.state == GAMEOVER_INACTIVE)) { KaleidoSetup_Update(this); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index a890090ff..2e36ea553 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -620,7 +620,7 @@ PlayerItemAction func_80123810(PlayState* play) { if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B)) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; - Interface_SetHudVisibility(play->msgCtx.unk_120BC); + Interface_SetHudVisibility(play->msgCtx.hudVisibility); return PLAYER_IA_MINUS1; } } else { @@ -634,7 +634,7 @@ PlayerItemAction func_80123810(PlayState* play) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; - Interface_SetHudVisibility(play->msgCtx.unk_120BC); + Interface_SetHudVisibility(play->msgCtx.hudVisibility); if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) { Audio_PlaySfx(NA_SE_SY_ERROR); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 768314490..198dac4e9 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -396,11 +396,11 @@ void Sram_ActivateOwl(u8 owlId) { } void Sram_ClearHighscores(void) { - gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF) | 0x130000; - gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) | 0xA; - gSaveContext.save.saveInfo.horseBackBalloonHighScore = SECONDS_TO_TIMER(60); - SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39); - SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10); + HS_SET_BOAT_ARCHERY_HIGH_SCORE(19); + HS_SET_HIGH_SCORE_3_LOWER(10); + HS_SET_HORSE_BACK_BALLOON_TIME(SECONDS_TO_TIMER(60)); + HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39); + HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10); gSaveContext.save.saveInfo.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75); gSaveContext.save.saveInfo.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75); diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 4ae5482bf..39269c2ac 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -835,8 +835,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { thisx->flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); if (sLinkAge != 1) { - // HIGH_SCORE(HS_FISHING) from OoT - if (gSaveContext.save.saveInfo.unk_EC0 & 0x1000) { + if (HIGH_SCORE(HS_FISHING) & 0x1000) { D_8090CD08 = 0; } else { D_8090CD08 = 1; @@ -854,18 +853,18 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1); if (sLinkAge == 1) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { - D_809171CC = gSaveContext.save.saveInfo.unk_EC0 & 0x7F; + if (HIGH_SCORE(HS_FISHING) & 0x7F) { + D_809171CC = HIGH_SCORE(HS_FISHING) & 0x7F; } else { D_809171CC = 40.0f; } - } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { - D_809171CC = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; + } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) { + D_809171CC = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18; } else { D_809171CC = 45.0f; } - D_809171D1 = (gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) >> 0x10; + D_809171D1 = (HIGH_SCORE(HS_FISHING) & 0xFF0000) >> 0x10; if ((D_809171D1 & 7) == 7) { play->roomCtx.unk7A[0] = 90; D_809171CA = 1; @@ -2799,8 +2798,8 @@ void func_80903C60(EnFishing* this, u8 arg1) { void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x80) { + if (HIGH_SCORE(HS_FISHING) & 0x7F) { + if (HIGH_SCORE(HS_FISHING) & 0x80) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -2808,8 +2807,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { } else { this->actor.textId = 0x40AE; } - } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { - if (gSaveContext.save.saveInfo.unk_EC0 & 0x80000000) { + } else if (HIGH_SCORE(HS_FISHING) & 0x7F000000) { + if (HIGH_SCORE(HS_FISHING) & 0x80000000) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -3749,8 +3748,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((D_80917272 == 0) && (D_80917274 == 0)) { // Assignment of OoT's D_80B7E086 here removed in MM - if (((sLinkAge == 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x400)) || - ((sLinkAge != 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x800))) { + if (((sLinkAge == 1) && (HIGH_SCORE(HS_FISHING) & 0x400)) || + ((sLinkAge != 1) && (HIGH_SCORE(HS_FISHING) & 0x800))) { // Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch } } else { @@ -4694,7 +4693,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { case 0: if (D_809171FC == 0) { if (sLinkAge != 1) { - if ((gSaveContext.save.saveInfo.unk_EC0 & 0x100) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x200)) { + if ((HIGH_SCORE(HS_FISHING) & 0x100) && !(HIGH_SCORE(HS_FISHING) & 0x200)) { this->actor.textId = 0x4093; } else { this->actor.textId = 0x407B; @@ -4712,9 +4711,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (D_809171FC == 0) { this->unk_154 = 1; if (sLinkAge != 1) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x200; + HIGH_SCORE(HS_FISHING) |= 0x200; } else { - gSaveContext.save.saveInfo.unk_EC0 |= 0x100; + HIGH_SCORE(HS_FISHING) |= 0x100; } } else { this->unk_154 = 10; @@ -4805,8 +4804,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { D_8090CD04 = 20; this->unk_154 = 0; - if ((gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) < 0xFF0000) { - gSaveContext.save.saveInfo.unk_EC0 += 0x10000; + if ((HIGH_SCORE(HS_FISHING) & 0xFF0000) < 0xFF0000) { + HIGH_SCORE(HS_FISHING) += 0x10000; } } break; @@ -4924,29 +4923,29 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { f32 temp; - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF00; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F); - temp = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF00; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F); + temp = (HIGH_SCORE(HS_FISHING) & 0x7F000000) >> 0x18; if (temp < D_809171CC) { - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; + HIGH_SCORE(HS_FISHING) |= 0x80000000; } } if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80; + HIGH_SCORE(HS_FISHING) |= 0x80; this->unk_154 = 0; break; } } else { - gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; - gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; + HIGH_SCORE(HS_FISHING) &= 0xFFFFFF; + HIGH_SCORE(HS_FISHING) |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; + HIGH_SCORE(HS_FISHING) |= 0x80000000; this->unk_154 = 0; break; } @@ -4963,14 +4962,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } if (sLinkAge == 1) { - if ((D_809171CC >= 50.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x400)) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x400; + if ((D_809171CC >= 50.0f) && !(HIGH_SCORE(HS_FISHING) & 0x400)) { + HIGH_SCORE(HS_FISHING) |= 0x400; getItemId = GI_HEART_PIECE; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } } else { - if ((D_809171CC >= 60.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x800)) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x800; + if ((D_809171CC >= 60.0f) && !(HIGH_SCORE(HS_FISHING) & 0x800)) { + HIGH_SCORE(HS_FISHING) |= 0x800; getItemId = GI_SKULL_TOKEN; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } @@ -5140,9 +5139,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { } if (D_8090CD08 == 0) { - gSaveContext.save.saveInfo.unk_EC0 |= 0x1000; + HIGH_SCORE(HS_FISHING) |= 0x1000; } else if (D_8090CD08 == 1) { - gSaveContext.save.saveInfo.unk_EC0 &= ~0x1000; + HIGH_SCORE(HS_FISHING) &= ~0x1000; } if (D_8090CCFC != 0) { diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index f106aa406..917624a64 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -126,7 +126,7 @@ static Vec3f sShopItemPositions[3] = { s32 EnFsn_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index 387763de1..ea3f9fea2 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -89,7 +89,7 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) { EnGinkoMan_SwitchAnimation(this, play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x44C, &this->actor); this->curTextId = 0x44C; // would you like to make an account @@ -154,7 +154,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); } - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; } @@ -167,22 +167,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x45A: - if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) && + if ((HS_GET_BANK_RUPEES() >= 200) && (this->previousBankValue < 200) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; - } else if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 1000) && - ((this->previousBankValue) < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { + } else if ((HS_GET_BANK_RUPEES() >= 1000) && ((this->previousBankValue) < 1000) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); this->curTextId = 0x45C; - } else if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + } else if (HS_GET_BANK_RUPEES() >= 5000) { if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) { SET_WEEKEVENTREG(WEEKEVENTREG_60_01); Message_StartTextbox(play, 0x45D, &this->actor); this->curTextId = 0x45D; - } else if (this->previousBankValue < (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) { + } else if (this->previousBankValue < (s16)HS_GET_BANK_RUPEES()) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x45E, &this->actor); this->curTextId = 0x45E; @@ -229,7 +229,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x465: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; break; @@ -248,7 +248,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x46C: case 0x47E: if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) { - if ((u32)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + if (HS_GET_BANK_RUPEES() >= 5000) { Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; } else if (gSaveContext.save.saveInfo.playerData.rupees == 0) { @@ -301,11 +301,11 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x472: case 0x473: case 0x474: - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { Message_StartTextbox(play, 0x478, &this->actor); this->curTextId = 0x478; } else { - play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; } @@ -335,7 +335,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { switch (this->curTextId) { case 0x44E: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { + if (HS_GET_BANK_RUPEES() >= 5000) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; // bank full, cannot accept more @@ -378,20 +378,18 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x453; } - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { this->isNewAccount = true; } Rupees_ChangeBy(-play->msgCtx.bankRupeesSelected); - this->previousBankValue = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; - gSaveContext.save.saveInfo.bankRupees = - ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) | - (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); + this->previousBankValue = HS_GET_BANK_RUPEES(); + HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() + play->msgCtx.bankRupeesSelected); } } else { // GINKOMAN_CHOICE_NO Audio_PlaySfx_MessageCancel(); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { + if (HS_GET_BANK_RUPEES() == 0) { Message_StartTextbox(play, 0x456, &this->actor); this->curTextId = 0x456; } else { @@ -422,8 +420,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { case 0x471: if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) < - ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) { + if ((s32)HS_GET_BANK_RUPEES() < (play->msgCtx.bankRupeesSelected + this->serviceFee)) { Audio_PlaySfx(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x476, &this->actor); @@ -447,11 +444,8 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x472; } - this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF); - gSaveContext.save.saveInfo.bankRupees = - (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) - - this->serviceFee) | - (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); + this->previousBankValue = HS_GET_BANK_RUPEES(); + HS_SET_BANK_RUPEES(HS_GET_BANK_RUPEES() - play->msgCtx.bankRupeesSelected - this->serviceFee); Rupees_ChangeBy(play->msgCtx.bankRupeesSelected); } } else { @@ -615,7 +609,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) { case 0x469: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - play->msgCtx.bankRupees = (gSaveContext.save.saveInfo.bankRupees & 0xFFFF); + play->msgCtx.bankRupees = HS_GET_BANK_RUPEES(); if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) { Message_StartTextbox(play, 0x46C, &this->actor); this->curTextId = 0x46C; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 06409d524..be787e8d9 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -274,8 +274,10 @@ void func_8096FAAC(EnKakasi* this, PlayState* play) { * goes off every frame of song teach, but... doing what? */ void func_8096FBB8(EnKakasi* this, PlayState* play) { - if ((play->msgCtx.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) || - (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) { + if ((play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_A) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_DOWN) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_RIGHT) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_LEFT) || + (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_UP)) { // why not 0 < x < 4? fewer branches this->unk190++; } diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index ca2dfac2b..beb994374 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -46,13 +46,13 @@ ActorInit En_Kujiya_InitVars = { (ActorFunc)EnKujiya_Draw, }; -#define CHECK_LOTTERY_NUMBERS \ - (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \ - ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \ - ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \ - ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \ - ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \ - (((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF))) +#define CHECK_LOTTERY_NUMBERS() \ + (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \ + ((HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \ + ((HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \ + (HS_GET_LOTTERY_CODE_GUESS() & 0xF))) void EnKujiya_Init(Actor* thisx, PlayState* play) { EnKujiya* this = THIS; @@ -159,7 +159,7 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) { break; case 0x2B65: - if (CHECK_LOTTERY_NUMBERS) { + if (CHECK_LOTTERY_NUMBERS()) { Message_StartTextbox(play, 0x2B66, &this->actor); this->textId = 0x2B66; // Won 50 Rupees } else { diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 241260524..516112d3d 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -916,9 +916,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x336D; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { // [Score] New record! - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + HS_SET_HORSE_BACK_BALLOON_TIME(time); EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -960,8 +960,8 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3356; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { + HS_SET_HORSE_BACK_BALLOON_TIME(time); EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -987,9 +987,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3356; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { + if ((s32)time < HS_GET_HORSE_BACK_BALLOON_TIME()) { // New record - gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; + HS_SET_HORSE_BACK_BALLOON_TIME(time); Message_StartTextbox(play, 0x335D, &this->actor); this->textId = 0x335D; } else { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 15648514e..fe7333cf7 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -198,7 +198,7 @@ void EnOssan_SetupAction(EnOssan* this, EnOssanActionFunc action) { s32 EnOssan_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 9c197223c..90a625c88 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -176,7 +176,7 @@ void EnSob1_SetupAction(EnSob1* this, EnSob1ActionFunc action) { s32 EnSob1_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index d3b88bb2d..52c6d42f9 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -1140,8 +1140,8 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) { this->guayFlags = 0; this->wolfosFlags = 0; if (this->talkWaitTimer <= 0) { - if (GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { - SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score); + if (HS_GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { + HS_SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(this->score); } this->talkWaitTimer = 15; @@ -1409,8 +1409,8 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { if ((this->talkWaitTimer <= 0) && !play->interfaceCtx.perfectLettersOn) { Flags_SetAllTreasure(play, this->score); this->talkWaitTimer = 15; - if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { - if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { + if ((HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { + if (HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) { // You got a new record! Message_StartTextbox(play, 0x407, &this->actor); @@ -1430,7 +1430,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0x406; } - SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score); + HS_SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(this->score); this->shootingGameState = SG_GAME_STATE_ENDED; } else { if (CURRENT_DAY != 3) { diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index bf5a0900a..0eb54ed34 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -126,7 +126,7 @@ void EnTrt_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 a s32 EnTrt_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 0297339d9..8ca8857db 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -350,11 +350,8 @@ void func_80B76980(EnTruMt* this, PlayState* play) { this->actor.speed = 0.0f; this->actionFunc = func_80B76BB8; } else if (CHECK_EVENTINF(EVENTINF_40)) { - u32 score = gSaveContext.minigameScore; - - if (((gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) >> 0x10) < score) { - gSaveContext.save.saveInfo.unk_EC4 = - ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF); + if (((void)0, gSaveContext.minigameScore) > HS_GET_BOAT_ARCHERY_HIGH_SCORE()) { + HS_SET_BOAT_ARCHERY_HIGH_SCORE((u32)((void)0, gSaveContext.minigameScore)); SET_EVENTINF(EVENTINF_37); } } diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 015f1d8ae..406e4ba0f 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -80,7 +80,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) { this->unk16C -= 0.05f; } else { Actor_Kill(&this->actor); - if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) { + if ((R_TIME_SPEED != 400) && !play->msgCtx.blockSunsSong) { if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) { gSaveContext.sunsSongState = SUNSSONG_START; } diff --git a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c index c73e67a1d..59cd120cf 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c +++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c @@ -41,7 +41,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play) { OceffWipe* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c index 641d49f49..6dbea9128 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -43,7 +43,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play) { OceffWipe2* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe2_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c index f7156878c..f0ab978c8 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c +++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c @@ -44,7 +44,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play) { OceffWipe3* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe3_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c index d82c117e9..0bda6d1b9 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c +++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c @@ -43,7 +43,7 @@ void OceffWipe4_Destroy(Actor* thisx, PlayState* play) { OceffWipe4* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe4_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c index 3dcb06d5d..272d0fb88 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -41,7 +41,7 @@ void OceffWipe5_Destroy(Actor* thisx, PlayState* play) { OceffWipe5* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe5_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c index 244870f9d..28a5dfb04 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c +++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c @@ -39,7 +39,7 @@ void OceffWipe6_Init(Actor* thisx, PlayState* play) { void OceffWipe6_Destroy(Actor* thisx, PlayState* play) { Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe6_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c index fb8011c60..49f9fc0dd 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c +++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c @@ -43,7 +43,7 @@ void OceffWipe7_Destroy(Actor* thisx, PlayState* play) { OceffWipe7* this = THIS; Magic_Reset(play); - play->msgCtx.unk120B0 = 0; + play->msgCtx.ocarinaSongEffectActive = false; } void OceffWipe7_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 6462c3665..ad5591c54 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -16394,8 +16394,8 @@ void func_80851D30(PlayState* play, Player* this) { var_s0++; } } else if (play->msgCtx.ocarinaMode == 1) { - if (play->msgCtx.unk12048 != 0xFF) { - var_s0[play->msgCtx.unk12048] = 1.2f; + if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { + var_s0[play->msgCtx.ocarinaButtonIndex] = 1.2f; func_8082DB90(play, this, D_8085D190[this->transformation]); } else { s32 i; @@ -16419,11 +16419,11 @@ struct_8085D714 D_8085D714[] = { }; void func_80851EC8(PlayState* play, Player* this) { - struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048]; - f32* temp2 = &this->unk_B10[play->msgCtx.unk12048]; + struct_8085D714* temp3 = &D_8085D714[play->msgCtx.ocarinaButtonIndex]; + f32* temp2 = &this->unk_B10[play->msgCtx.ocarinaButtonIndex]; s16* temp_a3 = &this->unk_B86[temp3->unk_0]; - temp_a3[0] = play->msgCtx.unk12048; + temp_a3[0] = play->msgCtx.ocarinaButtonIndex; temp2[0] = 3.0f; } @@ -16479,7 +16479,7 @@ void func_808521E0(PlayState* play, Player* this) { func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); } else if (play->msgCtx.ocarinaMode == 1) { - if (play->msgCtx.unk12048 != 0xFF) { + if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { func_80851EC8(play, this); } @@ -16500,7 +16500,7 @@ void func_80852290(PlayState* play, Player* this) { s16 var_a1_3; s16 sp38; - if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) { + if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { this->unk_A90->flags |= ACTOR_FLAG_20000000; this->unk_A94 = 0.0f; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c index 2011d10fd..f8f228eaa 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c @@ -4,7 +4,6 @@ * Description: Entering name on a new file, selecting options from the options menu */ -#include "prevent_bss_reordering.h" #include "z_file_select.h" #include "z64rumble.h" #include "misc/title_static/title_static.h" diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index e2d456ee6..56d6477ca 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -566,6 +566,7 @@ 0x801C5FC0 : "z_sram_NES", 0x801C6A70 : "z_message", 0x801D0470 : "z_message_nes", + 0x801D0910 : "z_message_staff", 0x801D0B50 : "z_player_call", 0x801D0B70 : "z_kaleido_manager", 0x801D0BB0 : "", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 09f7da10d..4ddf144d5 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2835,13 +2835,13 @@ 0x801491DC:("func_801491DC",), 0x80149454:("func_80149454",), 0x801496C8:("func_801496C8",), - 0x8014995C:("func_8014995C",), + 0x8014995C:("Message_DrawTextChar",), 0x80149C18:("func_80149C18",), 0x80149EBC:("Message_FindMessage",), 0x80149F74:("func_80149F74",), - 0x8014AAD0:("func_8014AAD0",), + 0x8014AAD0:("Message_HandleOcarina",), 0x8014ADBC:("func_8014ADBC",), - 0x8014C70C:("func_8014C70C",), + 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), 0x8014CDF0:("func_8014CDF0",), @@ -2885,8 +2885,8 @@ 0x8015966C:("func_8015966C",), 0x8015B198:("func_8015B198",), 0x8015E750:("Message_FindCreditsMessage",), - 0x8015E7EC:("func_8015E7EC",), - 0x8015F8A8:("func_8015F8A8",), + 0x8015E7EC:("Message_DrawTextCredits",), + 0x8015F8A8:("Message_DecodeCredits",), 0x80160A90:("PlayerCall_InitFuncPtrs",), 0x80160AF8:("PlayerCall_Init",), 0x80160B40:("PlayerCall_Destroy",), diff --git a/tools/namefixer.py b/tools/namefixer.py index fa4efc6d3..86db40f18 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -767,6 +767,11 @@ wordReplace = { "func_8015926C": "Message_LoadOwlWarpTextNES", "func_8015E750": "Message_FindCreditsMessage", "func_80151BB4": "Message_BombersNotebookQueueEvent", + "func_8014995C": "Message_DrawTextChar", + "func_8014AAD0": "Message_HandleOcarina", + "func_8014C70C": "Message_LoadItemIcon", + "func_8015E7EC": "Message_DrawTextCredits", + "func_80133038": "Schedule_RunScript", "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", @@ -1097,7 +1102,36 @@ wordReplace = { "play->msgCtx.unk12023": "play->msgCtx.stateTimer", "play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode", "play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction", - "play->msgCtx.unk11F04": "play->msgCtx.currentTextId", + "play->msgCtx.unk12048": "play->msgCtx.lastOcarinaButtonIndex", + "play->msgCtx.unk120B0": "play->msgCtx.ocarinaSongEffectActive", + "play->msgCtx.unk12046": "play->msgCtx.blockSunsSong", + "play->msgCtx.unk12090": "play->msgCtx.textIsCredits", + "play->msgCtx.unk_120BC": "play->msgCtx.hudVisibility", + + "msgCtx->unk11EF8": "msgCtx->textboxSegment", + "msgCtx->unk11F14": "msgCtx->nextTextId", + "msgCtx->unk11FF2": "msgCtx->textUnskippable", + "msgCtx->unk11FF4": "msgCtx->textPosX", + "msgCtx->unk11FF6": "msgCtx->textPosY", + "msgCtx->unk12004": "msgCtx->textboxXTarget", + "msgCtx->unk12006": "msgCtx->textboxYTarget", + "msgCtx->unk1201E": "msgCtx->textColorAlpha", + "msgCtx->unk12020": "msgCtx->textboxEndType", + "msgCtx->unk12024": "msgCtx->textDelayTimer", + "msgCtx->unk1203A": "msgCtx->textboxColorAlphaTarget", + "msgCtx->unk1203C": "msgCtx->textboxColorAlphaCurrent", + "msgCtx->unk1204A": "msgCtx->ocarinaButtonsPosY", + "msgCtx->unk12068": "msgCtx->textboxX", + "msgCtx->unk1206A": "msgCtx->textboxY", + "msgCtx->unk12090": "msgCtx->textIsCredits", + "msgCtx->unk12092": "msgCtx->messageHasSetSfx", + "msgCtx->unk12094": "msgCtx->textboxSkipped", + "msgCtx->unk12098": "msgCtx->textCharScale", + "msgCtx->unk1209C": "msgCtx->textFade", + "msgCtx->unk120A0": "msgCtx->ocarinaAvailableSongs", + "msgCtx->unk120B0": "msgCtx->ocarinaSongEffectActive", + "msgCtx->unkActor": "msgCtx->talkActor", + "play->actorCtx.unk3": "play->actorCtx.lensActive", "play->actorCtx.unk4": "play->actorCtx.lensMaskSize", "play->actorCtx.targetContext": "play->actorCtx.targetCtx", From a017b8f2284f58d1606ff70215521b9600fa1651 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 24 Sep 2023 06:23:44 -0300 Subject: [PATCH 26/74] Cleanup pass for CIC6105.c (#1371) * IO_READ * CIC6105.h * CIC defines * sRomInfoFaultClient * CIC6105_Init * CIC6105_Destroy * hopefully final cleanup * review * bss * bss --- include/CIC6105.h | 21 ++++++++++++++++ include/build.h | 8 ++++++ include/functions.h | 8 ++---- include/variables.h | 7 ------ src/boot/CIC6105.c | 27 +++++++++++---------- src/boot/boot_main.c | 3 ++- src/code/main.c | 1 + src/overlays/actors/ovl_En_Ot/z_en_ot.c | 1 + src/overlays/gamestates/ovl_title/z_title.c | 3 ++- tools/disasm/functions.txt | 8 +++--- tools/disasm/variables.txt | 6 ++--- tools/sizes/boot_functions.csv | 8 +++--- 12 files changed, 62 insertions(+), 39 deletions(-) create mode 100644 include/CIC6105.h create mode 100644 include/build.h diff --git a/include/CIC6105.h b/include/CIC6105.h new file mode 100644 index 000000000..09a363a4d --- /dev/null +++ b/include/CIC6105.h @@ -0,0 +1,21 @@ +#ifndef CIC6105_H +#define CIC6105_H + +#include "ultra64.h" + +// IPL3 puts values in those addresses as part of the anti-piracy checks +#define CIC_ADDRESS_1 0x002FB1F4 +#define CIC_ADDRESS_2 0x002FE1C0 + + +void CIC6105_Noop1(void); +void CIC6105_Noop2(void); +void CIC6105_PrintRomInfo(void); +void CIC6105_AddRomInfoFaultPage(void); +void CIC6105_Destroy(void); +void CIC6105_Init(void); + +extern s32 gCICAddr1Val; +extern s32 gCICAddr2Val; + +#endif diff --git a/include/build.h b/include/build.h new file mode 100644 index 000000000..5099e5d3c --- /dev/null +++ b/include/build.h @@ -0,0 +1,8 @@ +#ifndef BUILD_H +#define BUILD_H + +extern char gBuildTeam[]; +extern char gBuildDate[]; +extern char gBuildMakeOption[]; + +#endif diff --git a/include/functions.h b/include/functions.h index 00e992e9e..c24ab583d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -34,13 +34,9 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr); void IrqMgr_HandleRetrace(IrqMgr* irqmgr); void IrqMgr_ThreadEntry(IrqMgr* irqmgr); void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount); -void CIC6105_Nop80081820(void); -void CIC6105_Nop80081828(void); -void CIC6105_PrintRomInfo(void); -void CIC6105_AddRomInfoFaultPage(void); -void CIC6105_RemoveRomInfoFaultPage(void); -void func_800818F4(void); + void osSyncPrintfUnused(const char* fmt, ...); + void rmonPrintf(const char* fmt, ...); void RcpUtils_PrintRegisterStatus(void); diff --git a/include/variables.h b/include/variables.h index fdc9e91b0..e071b2036 100644 --- a/include/variables.h +++ b/include/variables.h @@ -24,19 +24,12 @@ extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE4 D_80097524; // extern u32 sRandInt; -extern char gBuildTeam[]; -extern char gBuildDate[]; -extern char gBuildMakeOption[]; - extern u8 sYaz0DataBuffer[0x400]; extern u8* sYaz0CurDataEnd; extern u32 sYaz0CurRomStart; extern u32 sYaz0CurSize; extern u8* sYaz0MaxPtr; extern void* gYaz0DecompressDstEnd; -// extern UNK_TYPE4 D_8009BE30; -// extern UNK_TYPE4 D_8009BE34; -// extern FaultClient romInfoFaultClient; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; diff --git a/src/boot/CIC6105.c b/src/boot/CIC6105.c index e18223b03..f42edf656 100644 --- a/src/boot/CIC6105.c +++ b/src/boot/CIC6105.c @@ -1,32 +1,33 @@ #include "prevent_bss_reordering.h" -#include "global.h" +#include "CIC6105.h" +#include "build.h" #include "fault.h" -UNK_TYPE4 D_8009BE30; -UNK_TYPE4 D_8009BE34; -FaultClient romInfoFaultClient; +s32 gCICAddr1Val; +s32 gCICAddr2Val; +FaultClient sRomInfoFaultClient; -void CIC6105_Nop80081820(void) { +void CIC6105_Noop1(void) { } -void CIC6105_Nop80081828(void) { +void CIC6105_Noop2(void) { } void CIC6105_PrintRomInfo(void) { - FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", HW_REG(SP_STATUS_REG, u32)); + FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", IO_READ(SP_STATUS_REG)); FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", gBuildTeam); FaultDrawer_DrawText(56, 192, "[Date:%s]", gBuildDate); } void CIC6105_AddRomInfoFaultPage(void) { - Fault_AddClient(&romInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL); + Fault_AddClient(&sRomInfoFaultClient, (void*)CIC6105_PrintRomInfo, NULL, NULL); } -void CIC6105_RemoveRomInfoFaultPage(void) { - Fault_RemoveClient(&romInfoFaultClient); +void CIC6105_Destroy(void) { + Fault_RemoveClient(&sRomInfoFaultClient); } -void func_800818F4(void) { - D_8009BE30 = *(u32*)0xA02FB1F4; - D_8009BE34 = *(u32*)0xA02FE1C0; +void CIC6105_Init(void) { + gCICAddr1Val = IO_READ(CIC_ADDRESS_1); + gCICAddr2Val = IO_READ(CIC_ADDRESS_2); } diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c index dcb66fefd..cc2097f0f 100644 --- a/src/boot/boot_main.c +++ b/src/boot/boot_main.c @@ -3,6 +3,7 @@ #include "idle.h" #include "stack.h" #include "stackcheck.h" +#include "CIC6105.h" #include "z64thread.h" StackEntry sBootStackInfo; @@ -14,7 +15,7 @@ STACK(sBootStack, 0x400); void bootproc(void) { StackCheck_Init(&sBootStackInfo, sBootStack, STACK_TOP(sBootStack), 0, -1, "boot"); osMemSize = osGetMemSize(); - func_800818F4(); + CIC6105_Init(); osInitialize(); osUnmapTLBAll(); gCartHandle = osCartRomInit(); diff --git a/src/code/main.c b/src/code/main.c index 7fbb7ccb8..d3840eca5 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -4,6 +4,7 @@ #include "irqmgr.h" #include "padmgr.h" #include "scheduler.h" +#include "CIC6105.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index 4e9b7a162..b8967e329 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -4,6 +4,7 @@ * Description: Seahorse */ +#include "prevent_bss_reordering.h" #include "z_en_ot.h" #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 21f034e12..c829e79a9 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -7,6 +7,7 @@ #include "z_title.h" #include "z64shrink_window.h" #include "z64view.h" +#include "CIC6105.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "misc/nintendo_rogo_static/nintendo_rogo_static.h" @@ -146,7 +147,7 @@ void ConsoleLogo_Destroy(GameState* thisx) { Sram_InitSram(&this->state, &this->sramCtx); ShrinkWindow_Destroy(); - CIC6105_Nop80081828(); + CIC6105_Noop2(); } void ConsoleLogo_Init(GameState* thisx) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4ddf144d5..c8330232d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -40,12 +40,12 @@ 0x800815CC:("IrqMgr_HandleRetrace",), 0x80081684:("IrqMgr_ThreadEntry",), 0x80081754:("IrqMgr_Init",), - 0x80081820:("CIC6105_Nop80081820",), - 0x80081828:("CIC6105_Nop80081828",), + 0x80081820:("CIC6105_Noop1",), + 0x80081828:("CIC6105_Noop2",), 0x80081830:("CIC6105_PrintRomInfo",), 0x8008189C:("CIC6105_AddRomInfoFaultPage",), - 0x800818D0:("CIC6105_RemoveRomInfoFaultPage",), - 0x800818F4:("func_800818F4",), + 0x800818D0:("CIC6105_Destroy",), + 0x800818F4:("CIC6105_Init",), 0x80081920:("osSyncPrintfUnused",), 0x8008193C:("osSyncPrintf",), 0x80081958:("rmonPrintf",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d0ad05d81..4b224cf3f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -310,9 +310,9 @@ 0x8009BE18:("sYaz0CurSize","u32","",0x4), 0x8009BE1C:("sYaz0MaxPtr","u8*","",0x4), 0x8009BE20:("gYaz0DecompressDstEnd","void*","",0x4), - 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4), - 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4), - 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10), + 0x8009BE30:("gCICAddr1Val","UNK_TYPE4","",0x4), + 0x8009BE34:("gCICAddr2Val","UNK_TYPE4","",0x4), + 0x8009BE38:("sRomInfoFaultClient","FaultClient","",0x10), 0x8009BE50:("sFaultInstance","FaultMgr*","",0x4), 0x8009BE54:("sFaultTimeTotal","f32","",0x4), 0x8009BE58:("faultCustomOptions","u32","",0x4), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 61a69fe7f..47bc17b62 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -37,12 +37,12 @@ asm/non_matchings/boot/irqmgr/IrqMgr_HandlePRENMI500.s,IrqMgr_HandlePRENMI500,0x asm/non_matchings/boot/irqmgr/IrqMgr_HandleRetrace.s,IrqMgr_HandleRetrace,0x800815CC,0x2E asm/non_matchings/boot/irqmgr/IrqMgr_ThreadEntry.s,IrqMgr_ThreadEntry,0x80081684,0x34 asm/non_matchings/boot/irqmgr/IrqMgr_Init.s,IrqMgr_Init,0x80081754,0x33 -asm/non_matchings/boot/CIC6105/CIC6105_Nop80081820.s,CIC6105_Nop80081820,0x80081820,0x2 -asm/non_matchings/boot/CIC6105/CIC6105_Nop80081828.s,CIC6105_Nop80081828,0x80081828,0x2 +asm/non_matchings/boot/CIC6105/CIC6105_Noop1.s,CIC6105_Noop1,0x80081820,0x2 +asm/non_matchings/boot/CIC6105/CIC6105_Noop2.s,CIC6105_Noop2,0x80081828,0x2 asm/non_matchings/boot/CIC6105/CIC6105_PrintRomInfo.s,CIC6105_PrintRomInfo,0x80081830,0x1B asm/non_matchings/boot/CIC6105/CIC6105_AddRomInfoFaultPage.s,CIC6105_AddRomInfoFaultPage,0x8008189C,0xD -asm/non_matchings/boot/CIC6105/CIC6105_RemoveRomInfoFaultPage.s,CIC6105_RemoveRomInfoFaultPage,0x800818D0,0x9 -asm/non_matchings/boot/CIC6105/func_800818F4.s,func_800818F4,0x800818F4,0xB +asm/non_matchings/boot/CIC6105/CIC6105_Destroy.s,CIC6105_Destroy,0x800818D0,0x9 +asm/non_matchings/boot/CIC6105/CIC6105_Init.s,CIC6105_Init,0x800818F4,0xB asm/non_matchings/boot/syncprintf/osSyncPrintfUnused.s,osSyncPrintfUnused,0x80081920,0x7 asm/non_matchings/boot/syncprintf/osSyncPrintf.s,osSyncPrintf,0x8008193C,0x7 asm/non_matchings/boot/syncprintf/rmonPrintf.s,rmonPrintf,0x80081958,0xA From c6d3115fd3e9380476599fbe766a41a5a18b5b89 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Sun, 24 Sep 2023 07:10:06 -0300 Subject: [PATCH 27/74] document object_ha (donkeys) (#1366) * initial commit of doc * line * headerrr * forgot about renamed anims * format * horrrse * format --- assets/xml/objects/object_ha.xml | 289 ++++++++++-------- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 13 +- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 4 +- 3 files changed, 166 insertions(+), 140 deletions(-) diff --git a/assets/xml/objects/object_ha.xml b/assets/xml/objects/object_ha.xml index 1ef654330..860b592df 100644 --- a/assets/xml/objects/object_ha.xml +++ b/assets/xml/objects/object_ha.xml @@ -1,135 +1,162 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 1bb7640dc..00a5fd3b1 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -122,9 +122,8 @@ static AnimationHeader* sEponaAnimations[] = { }; static AnimationHeader* sHniAnimations[] = { - &object_ha_Anim_00C850, &object_ha_Anim_00CE70, &object_ha_Anim_00B9C8, - &object_ha_Anim_00B00C, &object_ha_Anim_00D648, &object_ha_Anim_00A650, - &object_ha_Anim_009208, &object_ha_Anim_009858, &object_ha_Anim_00A05C, + &gHorseIdleAnim, &gHorseShakeHeadAnim, &gHorseStopAnim, &gHorseWhinnyAnim, &gHorseWalkAnim, + &gHorseTrotAnim, &gHorseGallopAnim, &gHorseJumpLowAnim, &gHorseJumpHighAnim, }; static AnimationHeader** sAnimationHeaders[] = { @@ -931,11 +930,11 @@ void func_8087D540(Actor* thisx, PlayState* play) { this->actor.update = EnHorse_Update; if (this->unk_1EC & 1) { if (this->type == HORSE_TYPE_BANDIT) { - SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_008C68, NULL, this->jointTable, - this->morphTable, OBJECT_HA_1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skin.skelAnime, &gHorseBanditSkel, NULL, this->jointTable, + this->morphTable, HORSE_BANDIT_LIMB_MAX); } else { - SkelAnime_InitFlex(play, &this->skin.skelAnime, &object_ha_Skel_0150D8, NULL, this->jointTable, - this->morphTable, OBJECT_HA_2_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skin.skelAnime, &gDonkeySkel, NULL, this->jointTable, this->morphTable, + DONKEY_LIMB_MAX); } } else { Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 3cfc1fb54..75f0254fc 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -206,8 +206,8 @@ typedef struct EnHorse { /* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4]; /* 0x3E8 */ f32 unk_3E8; /* 0x3EC */ s16 unk_3EC; - /* 0x3EE */ Vec3s jointTable[OBJECT_HA_1_LIMB_MAX]; - /* 0x48A */ Vec3s morphTable[OBJECT_HA_1_LIMB_MAX]; + /* 0x3EE */ Vec3s jointTable[HORSE_BANDIT_LIMB_MAX]; + /* 0x48A */ Vec3s morphTable[HORSE_BANDIT_LIMB_MAX]; /* 0x528 */ f32 unk_528; /* 0x52C */ s32 unk_52C; /* 0x530 */ s32 cueChannel; From b96732818af4c35ecd6da0450f85dd36aa09a691 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sun, 24 Sep 2023 04:49:04 -0700 Subject: [PATCH 28/74] Add original asset names to all `object_k*` files (#1388) * Add original asset names to all `object_k*` files * Comment first, name second * Comment for object_ka --- assets/xml/objects/object_az.xml | 2 +- assets/xml/objects/object_boss03.xml | 8 +- assets/xml/objects/object_boss07.xml | 14 +-- assets/xml/objects/object_dblue_object.xml | 2 +- assets/xml/objects/object_dog.xml | 4 +- assets/xml/objects/object_f52_obj.xml | 8 +- assets/xml/objects/object_ka.xml | 15 +-- assets/xml/objects/object_kaizoku_obj.xml | 20 +-- assets/xml/objects/object_kamejima.xml | 32 ++--- assets/xml/objects/object_kanban.xml | 24 ++-- assets/xml/objects/object_kbt.xml | 26 ++-- assets/xml/objects/object_keikoku_demo.xml | 10 +- assets/xml/objects/object_keikoku_obj.xml | 8 +- assets/xml/objects/object_kepn_koya.xml | 6 +- assets/xml/objects/object_kgy.xml | 24 ++-- assets/xml/objects/object_kibako.xml | 4 +- assets/xml/objects/object_kibako2.xml | 8 +- assets/xml/objects/object_kin2_obj.xml | 38 +++--- assets/xml/objects/object_kinsta1_obj.xml | 4 +- assets/xml/objects/object_kinsta2_obj.xml | 2 +- assets/xml/objects/object_kitan.xml | 6 +- assets/xml/objects/object_knight.xml | 114 ++++++++++-------- assets/xml/objects/object_kumo30.xml | 6 +- assets/xml/objects/object_kusa.xml | 4 +- assets/xml/objects/object_kz.xml | 38 +++--- assets/xml/objects/object_kzsaku.xml | 4 +- assets/xml/objects/object_shn.xml | 2 +- .../actors/ovl_Dm_Opstage/z_dm_opstage.c | 2 +- 28 files changed, 220 insertions(+), 215 deletions(-) diff --git a/assets/xml/objects/object_az.xml b/assets/xml/objects/object_az.xml index ea6fd5e7d..e4e56aa88 100644 --- a/assets/xml/objects/object_az.xml +++ b/assets/xml/objects/object_az.xml @@ -65,7 +65,7 @@ - + diff --git a/assets/xml/objects/object_boss03.xml b/assets/xml/objects/object_boss03.xml index f4def4991..0b4ab9aa2 100644 --- a/assets/xml/objects/object_boss03.xml +++ b/assets/xml/objects/object_boss03.xml @@ -5,7 +5,7 @@ whip assets, along with an unused duplicate of the small fishes. --> - + @@ -69,12 +69,12 @@ - + - - + + diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml index ac2f9afc1..f1be3cf31 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -10,7 +10,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -150,13 +150,13 @@ - - - - + + + + - + diff --git a/assets/xml/objects/object_dblue_object.xml b/assets/xml/objects/object_dblue_object.xml index 08cb20ec3..63d28bd33 100644 --- a/assets/xml/objects/object_dblue_object.xml +++ b/assets/xml/objects/object_dblue_object.xml @@ -14,7 +14,7 @@ - + diff --git a/assets/xml/objects/object_dog.xml b/assets/xml/objects/object_dog.xml index 0e3d318b4..d0f306b24 100644 --- a/assets/xml/objects/object_dog.xml +++ b/assets/xml/objects/object_dog.xml @@ -3,13 +3,13 @@ - + - + diff --git a/assets/xml/objects/object_f52_obj.xml b/assets/xml/objects/object_f52_obj.xml index 697a5b100..0da643be0 100644 --- a/assets/xml/objects/object_f52_obj.xml +++ b/assets/xml/objects/object_f52_obj.xml @@ -1,10 +1,10 @@  - - + + - - + + diff --git a/assets/xml/objects/object_ka.xml b/assets/xml/objects/object_ka.xml index 69ea2d929..914617b41 100644 --- a/assets/xml/objects/object_ka.xml +++ b/assets/xml/objects/object_ka.xml @@ -1,6 +1,7 @@  + - + @@ -59,11 +60,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml index 9ae61accf..a8e773034 100644 --- a/assets/xml/objects/object_kaizoku_obj.xml +++ b/assets/xml/objects/object_kaizoku_obj.xml @@ -1,22 +1,22 @@  - + - - + + - - + + - + @@ -27,15 +27,15 @@ - - + + - + - + diff --git a/assets/xml/objects/object_kamejima.xml b/assets/xml/objects/object_kamejima.xml index cce285475..272a541be 100644 --- a/assets/xml/objects/object_kamejima.xml +++ b/assets/xml/objects/object_kamejima.xml @@ -5,29 +5,29 @@ - + - + - - + + - - - + + + - + - + @@ -88,12 +88,12 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml index b821aa288..c52be1022 100644 --- a/assets/xml/objects/object_kanban.xml +++ b/assets/xml/objects/object_kanban.xml @@ -1,18 +1,18 @@  - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_kbt.xml b/assets/xml/objects/object_kbt.xml index 102aed91d..bf6078da8 100644 --- a/assets/xml/objects/object_kbt.xml +++ b/assets/xml/objects/object_kbt.xml @@ -1,16 +1,16 @@  - - - - - - - - - - - + + + + + + + + + + + @@ -69,7 +69,7 @@ - - + + diff --git a/assets/xml/objects/object_keikoku_demo.xml b/assets/xml/objects/object_keikoku_demo.xml index 3a0a20b65..b9433a48f 100644 --- a/assets/xml/objects/object_keikoku_demo.xml +++ b/assets/xml/objects/object_keikoku_demo.xml @@ -7,21 +7,21 @@ - + - + - + - + - + diff --git a/assets/xml/objects/object_keikoku_obj.xml b/assets/xml/objects/object_keikoku_obj.xml index ff5a6899c..b6d61e91f 100644 --- a/assets/xml/objects/object_keikoku_obj.xml +++ b/assets/xml/objects/object_keikoku_obj.xml @@ -8,19 +8,19 @@ - + - + - + - + diff --git a/assets/xml/objects/object_kepn_koya.xml b/assets/xml/objects/object_kepn_koya.xml index 893892d25..cc14f0556 100644 --- a/assets/xml/objects/object_kepn_koya.xml +++ b/assets/xml/objects/object_kepn_koya.xml @@ -1,7 +1,7 @@  - - + + @@ -13,6 +13,6 @@ - + diff --git a/assets/xml/objects/object_kgy.xml b/assets/xml/objects/object_kgy.xml index 5bbf17793..b83234b8c 100644 --- a/assets/xml/objects/object_kgy.xml +++ b/assets/xml/objects/object_kgy.xml @@ -1,13 +1,13 @@  - - - - - - - - + + + + + + + + @@ -39,10 +39,10 @@ - + - + @@ -68,7 +68,7 @@ - - + + diff --git a/assets/xml/objects/object_kibako.xml b/assets/xml/objects/object_kibako.xml index 43276080a..2cdd6ce36 100644 --- a/assets/xml/objects/object_kibako.xml +++ b/assets/xml/objects/object_kibako.xml @@ -2,8 +2,8 @@ - + - + diff --git a/assets/xml/objects/object_kibako2.xml b/assets/xml/objects/object_kibako2.xml index 4b6ce5ac7..180038e82 100644 --- a/assets/xml/objects/object_kibako2.xml +++ b/assets/xml/objects/object_kibako2.xml @@ -4,11 +4,11 @@ - - + + - - + + diff --git a/assets/xml/objects/object_kin2_obj.xml b/assets/xml/objects/object_kin2_obj.xml index d36766ee4..6e63f19cd 100644 --- a/assets/xml/objects/object_kin2_obj.xml +++ b/assets/xml/objects/object_kin2_obj.xml @@ -4,32 +4,28 @@ Piece, bookshelves and chests of drawers. --> - + + - - - - + + + - + + + - - - - + + + - - + + + - - - - - - - - - + + + diff --git a/assets/xml/objects/object_kinsta1_obj.xml b/assets/xml/objects/object_kinsta1_obj.xml index 48d40c527..be178d1e8 100644 --- a/assets/xml/objects/object_kinsta1_obj.xml +++ b/assets/xml/objects/object_kinsta1_obj.xml @@ -1,7 +1,7 @@  - - + + diff --git a/assets/xml/objects/object_kinsta2_obj.xml b/assets/xml/objects/object_kinsta2_obj.xml index 85e829c66..66bec962d 100644 --- a/assets/xml/objects/object_kinsta2_obj.xml +++ b/assets/xml/objects/object_kinsta2_obj.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_kitan.xml b/assets/xml/objects/object_kitan.xml index edc2e5cc6..cd7db0005 100644 --- a/assets/xml/objects/object_kitan.xml +++ b/assets/xml/objects/object_kitan.xml @@ -1,8 +1,8 @@  - - - + + + diff --git a/assets/xml/objects/object_knight.xml b/assets/xml/objects/object_knight.xml index fa0e900e4..2a8595627 100644 --- a/assets/xml/objects/object_knight.xml +++ b/assets/xml/objects/object_knight.xml @@ -1,49 +1,57 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,14 +109,14 @@ - - + + - + @@ -201,11 +209,11 @@ - - - - - - + + + + + + diff --git a/assets/xml/objects/object_kumo30.xml b/assets/xml/objects/object_kumo30.xml index 24e8d3974..3a74c0988 100644 --- a/assets/xml/objects/object_kumo30.xml +++ b/assets/xml/objects/object_kumo30.xml @@ -1,12 +1,12 @@  - - + + - + diff --git a/assets/xml/objects/object_kusa.xml b/assets/xml/objects/object_kusa.xml index 36c61f364..9ed22b39f 100644 --- a/assets/xml/objects/object_kusa.xml +++ b/assets/xml/objects/object_kusa.xml @@ -1,6 +1,6 @@  - - + + diff --git a/assets/xml/objects/object_kz.xml b/assets/xml/objects/object_kz.xml index f500ba141..6295d7b1d 100644 --- a/assets/xml/objects/object_kz.xml +++ b/assets/xml/objects/object_kz.xml @@ -1,17 +1,17 @@  - - - - - - - - - - - - + + + + + + + + + + + + @@ -82,12 +82,12 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_kzsaku.xml b/assets/xml/objects/object_kzsaku.xml index 4cfce2de2..af957d700 100644 --- a/assets/xml/objects/object_kzsaku.xml +++ b/assets/xml/objects/object_kzsaku.xml @@ -1,7 +1,7 @@  - + - + diff --git a/assets/xml/objects/object_shn.xml b/assets/xml/objects/object_shn.xml index 97d2e4854..3e39b2eff 100644 --- a/assets/xml/objects/object_shn.xml +++ b/assets/xml/objects/object_shn.xml @@ -80,7 +80,7 @@ - + diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c index b13fbd9d7..b26948090 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -47,7 +47,7 @@ void DmOpstage_Init(Actor* thisx, PlayState* play) { if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) { DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorColliderHeader); + DynaPolyActor_LoadMesh(play, &this->dyna, &gKeikokuDemoFloorCol); } if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) > DMOPSTAGE_TYPE_GROUND) { From 4e9e6c007c399dbe727fc0b73a382de7ceb52bc6 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:16:58 +0200 Subject: [PATCH 29/74] Ovl_Dm_Hina decompiled (#1380) * data * all functions without func_80A1F75C * func_80A1F75C * improvements * usage update * fix * x->y->z orders * improvements * != 0 --- spec | 3 +- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c | 162 ++++++++++++++++-- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h | 18 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 6 +- 4 files changed, 168 insertions(+), 21 deletions(-) diff --git a/spec b/spec index 233a9605c..ae8d89485 100644 --- a/spec +++ b/spec @@ -2440,8 +2440,7 @@ beginseg name "ovl_Dm_Hina" compress include "build/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.o" - include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.data.o" - include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.reloc.o" + include "build/src/overlays/actors/ovl_Dm_Hina/ovl_Dm_Hina_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c index a2a2589fb..22bc9544b 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c @@ -5,6 +5,7 @@ */ #include "z_dm_hina.h" +#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -20,7 +21,6 @@ void func_80A1F56C(DmHina* this, PlayState* play); void func_80A1F5AC(DmHina* this, PlayState* play); void func_80A1F63C(DmHina* this, PlayState* play); -#if 0 ActorInit Dm_Hina_InitVars = { ACTOR_DM_HINA, ACTORCAT_ITEMACTION, @@ -33,24 +33,162 @@ ActorInit Dm_Hina_InitVars = { (ActorFunc)DmHina_Draw, }; -#endif +void DmHina_Init(Actor* thisx, PlayState* play) { + DmHina* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Init.s") + this->isDrawn = true; + this->actionFunc = func_80A1F470; + this->unk158 = this->actor.world.pos.y; + this->unk148 = 0.0f; + this->unk15C = 1.0f; + this->actor.focus.pos.x = this->actor.world.pos.x; + this->actor.focus.pos.y = this->actor.world.pos.y; + this->actor.focus.pos.z = this->actor.world.pos.z; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Destroy.s") +void DmHina_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F470.s") +void func_80A1F470(DmHina* this, PlayState* play) { + Player* player = GET_PLAYER(play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F56C.s") + Math_SmoothStepToF(&this->unk148, 0.6f, 0.5f, 0.05f, 0.001f); + this->unk154 = Math_SinS(play->gameplayFrames * 0x708) * 8.0f; + if ((player->stateFlags1 & PLAYER_STATE1_400) && (this->actor.xzDistToPlayer < 80.0f)) { + this->isDrawn = false; + this->unk154 = 0.0f; + this->actor.world.pos.y += 40.0f; + this->actionFunc = func_80A1F56C; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F5AC.s") +void func_80A1F56C(DmHina* this, PlayState* play) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + this->unk17C = 2; + this->actionFunc = func_80A1F5AC; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F63C.s") +void func_80A1F5AC(DmHina* this, PlayState* play) { + this->unk17C--; + if (this->unk17C == 0) { + this->isDrawn = true; + Cutscene_StartManual(play, &play->csCtx); + this->subCamId = Play_CreateSubCamera(play); + Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); + Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); + this->actionFunc = func_80A1F63C; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F75C.s") +void func_80A1F63C(DmHina* this, PlayState* play) { + this->subCamEye.x = this->actor.world.pos.x + 100.0f; + this->subCamEye.y = this->unk158 + 260.0f; + this->subCamEye.z = this->actor.world.pos.z + 100.0f; + this->subCamAt.x = this->actor.world.pos.x; + this->subCamAt.y = this->actor.world.pos.y + this->unk154 * this->unk15C + 40.0f * this->unk15C; + this->subCamAt.z = this->actor.world.pos.z; + Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye); + Math_SmoothStepToF(&this->actor.world.pos.y, this->unk158 + 300.0f, 0.5f, 2.0f, 0.1f); + if (((this->unk158 + 240.0f) < this->actor.world.pos.y) && (this->unk17E != 1)) { + this->unk17E = 1; + Actor_PlaySfx(&this->actor, NA_SE_OC_WHITE_OUT_INTO_KYOJIN); + } + Actor_PlaySfx(&this->actor, NA_SE_EV_MASK_RISING - SFX_FLAG); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Update.s") +void func_80A1F75C(DmHina* this, PlayState* play) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F9AC.s") + switch (this->unk17E) { + case 0: + this->unk17F = 0; + this->unk14C = 0.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Draw.s") + case 1: + Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f); + this->unk17F = this->unk14C * 255.0f; + this->unk150 = Math_SinS(play->state.frames * 0x1F40); + for (i = 0; i < 3; i++) { + play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.fogColor[i] = + play->envCtx.lightSettings.diffuseColor1[i] = -255.0f * this->unk14C; + } + play->envCtx.lightSettings.fogNear = -500.0f * this->unk14C; + if (play->envCtx.lightSettings.fogNear < -300) { + play->roomCtx.curRoom.segment = NULL; + } + break; + + default: + break; + } +} + +void DmHina_Update(Actor* thisx, PlayState* play) { + DmHina* this = THIS; + + this->actionFunc(this, play); + func_80A1F75C(this, play); +} + +void func_80A1F9AC(DmHina* this, PlayState* play) { + GraphicsContext* gfxCtx = play->state.gfxCtx; + + if (this->unk17E != 0) { + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)(this->unk14C * 100.0f) + 155, this->unk17F); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, (u8)(this->unk150 * 100.0f) + 50, 0); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + + Matrix_Translate(this->actor.world.pos.x, + this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C), + this->actor.world.pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(this->unk14C * 20.0f, this->unk14C * 20.0f, this->unk14C * 20.0f, MTXMODE_APPLY); + Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); + + CLOSE_DISPS(gfxCtx); + } +} + +void DmHina_Draw(Actor* thisx, PlayState* play) { + DmHina* this = THIS; + f32 scale; + + if (this->isDrawn) { + Matrix_Translate(this->actor.world.pos.x, + this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C), + this->actor.world.pos.z, MTXMODE_NEW); + Matrix_RotateZYX(0, play->gameplayFrames * 0x3E8, 0, MTXMODE_APPLY); + scale = this->unk148 * (1.0f - this->unk14C) * this->unk15C; + Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); + switch (this->actor.params) { + case 0: + GetItem_Draw(play, GID_REMAINS_ODOLWA); + break; + + case 1: + GetItem_Draw(play, GID_REMAINS_GOHT); + break; + + case 2: + GetItem_Draw(play, GID_REMAINS_GYORG); + break; + + case 3: + GetItem_Draw(play, GID_REMAINS_TWINMOLD); + break; + + default: + break; + } + func_80A1F9AC(this, play); + } +} diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h index 21c9e55dc..a3ef636be 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h @@ -10,10 +10,20 @@ typedef void (*DmHinaActionFunc)(struct DmHina*, PlayState*); typedef struct DmHina { /* 0x000 */ Actor actor; /* 0x144 */ DmHinaActionFunc actionFunc; - /* 0x148 */ char unk_148[0x10]; - /* 0x158 */ f32 unk_158; - /* 0x15C */ f32 unk_15C; - /* 0x160 */ char unk_160[0x24]; + /* 0x148 */ f32 unk148; + /* 0x14C */ f32 unk14C; + /* 0x150 */ f32 unk150; + /* 0x154 */ f32 unk154; + /* 0x158 */ f32 unk158; + /* 0x15C */ f32 unk15C; + /* 0x160 */ Vec3f subCamEye; + /* 0x16C */ Vec3f subCamAt; + /* 0x178 */ UNK_TYPE1 pad178[2]; + /* 0x17A */ s16 subCamId; + /* 0x17C */ s16 unk17C; + /* 0x17E */ u8 unk17E; + /* 0x17F */ u8 unk17F; + /* 0x180 */ u8 isDrawn; } DmHina; // size = 0x184 #endif // Z_DM_HINA_H diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 798edb09d..32a7ba7f0 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -919,10 +919,10 @@ void DoorWarp1_Update(Actor* thisx, PlayState* play) { this->unk_204 = 1.0f; } - if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk_15C != this->unk_204)) { + if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk15C != this->unk_204)) { this->unk_1A0->actor.world.pos.y = this->dyna.actor.world.pos.y; - this->unk_1A0->unk_158 = this->dyna.actor.world.pos.y; - this->unk_1A0->unk_15C = this->unk_204; + this->unk_1A0->unk158 = this->dyna.actor.world.pos.y; + this->unk_1A0->unk15C = this->unk_204; } this->actionFunc(this, play); From 1d1e6ef03b446e8d0ff7533f87989734d88de4ba Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 26 Sep 2023 03:15:40 +1000 Subject: [PATCH 30/74] Name player's generic `actionVar`s (#1392) * action-vars * single bracket --- include/z64player.h | 4 +- src/code/z_player_lib.c | 14 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 10 +- src/overlays/actors/ovl_Door_Ana/z_door_ana.c | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 8 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 4 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 4 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 2 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 6 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 2 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 4 +- .../actors/ovl_player_actor/z_player.c | 819 +++++++++--------- tools/namefixer.py | 2 + 17 files changed, 447 insertions(+), 444 deletions(-) diff --git a/include/z64player.h b/include/z64player.h index ce5f33144..11145480e 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1221,8 +1221,8 @@ typedef struct Player { /* 0xADE */ u8 unk_ADE; /* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin /* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ? - /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc - /* 0xAE8 */ s16 unk_AE8; // multipurpose timer + /* 0xAE7 */ s8 actionVar1; // context dependent variable that has different meanings depending on what action is currently running + /* 0xAE8 */ s16 actionVar2; // context dependent variable that has different meanings depending on what action is currently running /* 0xAEC */ f32 unk_AEC; /* 0xAF0 */ union { Vec3f unk_AF0[2]; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2e36ea553..db9a8c974 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -369,13 +369,13 @@ void func_80122F28(Player* player) { s32 func_80122F9C(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 2); + return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->actionVar1 == 2); } s32 func_80122FCC(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->unk_AE7 == 1) || (player->unk_AE7 == 3)); + return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->actionVar1 == 1) || (player->actionVar1 == 3)); } void func_8012300C(PlayState* play, s32 arg1) { @@ -389,15 +389,15 @@ void func_8012301C(Actor* thisx, PlayState* play2) { PlayState* play = play2; Player* this = (Player*)thisx; - this->unk_AE7++; + this->actionVar1++; - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); - } else if (this->unk_AE7 >= 3) { + } else if (this->actionVar1 >= 3) { s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { @@ -3744,7 +3744,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } } - if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->unk_AE8 != 0)) { + if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->actionVar2 != 0)) { static Vec3f D_801C0E40[PLAYER_FORM_MAX] = { { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY { -578.3f, -1100.9f, 0.0f }, // PLAYER_FORM_GORON @@ -3764,7 +3764,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->unk_AE8); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->actionVar2); gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_054C90); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 20a25036f..e9a3e79c7 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -685,7 +685,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) { (player->actor.shape.feetPos[0].y >= WATER_HEIGHT + 8.0f)) || (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; } @@ -781,7 +781,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) || (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -909,7 +909,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { // Stop chewing when the timer runs out if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0) { if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -1751,7 +1751,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) { } if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); @@ -1903,7 +1903,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_DAMAGE_OLD); if (&this->actor == player->actor.parent) { - player->unk_AE8 = 101; + player->actionVar2 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_NONE; Play_DisableMotionBlur(); diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index 8d3fc8db4..f002bc8bd 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -132,7 +132,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) { if ((this->actor.targetMode != TARGET_MODE_0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) && - (player->unk_AE7 == 0)) { + (player->actionVar1 == 0)) { if (grottoType == DOORANA_TYPE_VISIBLE_SCENE_EXIT) { s32 exitIndex = DOORANA_GET_EXIT_INDEX(&this->actor); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index d3ffc59a2..c7c3e0fad 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -168,7 +168,7 @@ void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) { if (&this->picto.actor == player->actor.parent) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; player->actor.velocity.y = 0.0f; player->actor.world.pos.x += 20.0f * Math_SinS(this->picto.actor.home.rot.y); player->actor.world.pos.z += 20.0f * Math_CosS(this->picto.actor.home.rot.y); @@ -309,7 +309,7 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) { this->timer++; } - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_Vec3f_Copy(&player->actor.world.pos, &this->playerPos); if (Math_Vec3f_StepTo(&player->actor.world.pos, &this->playerHoldPos, sqrtf(this->timer) * 5.0f) < 0.1f) { s16 rotY = this->picto.actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 744b46e24..a7287b67e 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -729,7 +729,7 @@ void EnBigslime_SetPlayerParams(EnBigslime* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; func_800B8D98(play, &this->actor, 10.0f, this->actor.world.rot.y, 10.0f); } } @@ -1528,7 +1528,7 @@ void EnBigslime_CutsceneGrabPlayer(EnBigslime* this, PlayState* play) { s32 i; s32 j; - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400); EnBigslime_UpdateCameraGrabPlayer(this, play); if (this->grabPlayerTimer > 0) { @@ -1577,7 +1577,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 pitch = this->scaleFactor * 0x3333; // polar (zenith) angle - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_ScaledStepToS(&this->gekkoRot.x, 0, 0x400); EnBigslime_UpdateCameraGrabPlayer(this, play); EnBigslime_UpdateWavySurface(this); @@ -1710,7 +1710,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { if (this->windupPunchTimer == -5) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; } player->actor.velocity.y = 0.0f; diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 1bde48910..a66b176c3 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -450,7 +450,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { return true; } - if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->unk_AE7 == 1) && + if ((GET_PLAYER_FORM == PLAYER_FORM_GORON) && (player->actor.velocity.y < -5.0f) && (player->actionVar1 == 1) && (this->unk_28B == 0)) { this->unk_28B = 1; for (i = 0; i < ARRAY_COUNT(this->colliderJntSphElement) - 3; i++) { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index efaa851e6..59d504705 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -548,7 +548,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) { play->unk_18770(play, player); player->actor.parent = &this->actor; - player->unk_AE8 = 50; + player->actionVar2 = 50; this->action = DEEP_PYTHON_ACTION_GRAB; Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_EAT); EnDragon_SetupAttack(this); @@ -626,7 +626,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->grabWaitTimer = 30; CutsceneManager_Stop(this->grabCsId); if (player->stateFlags2 & PLAYER_STATE2_80) { - player->unk_AE8 = 100; + player->actionVar2 = 100; } this->actor.flags &= ~ACTOR_FLAG_100000; diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index cb9449b32..1c6a669a2 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -319,7 +319,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) { if (player->transformation == PLAYER_FORM_GORON) { this->grabTarget = EN_RAF_GRAB_TARGET_GORON_PLAYER; } else { - player->unk_AE8 = 50; + player->actionVar2 = 50; } this->playerRotYWhenGrabbed = player->actor.world.rot.y; @@ -455,7 +455,7 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) { case EN_RAF_GRAB_TARGET_GORON_PLAYER: if (this->chewCount > (BREG(54) + 4)) { player->actor.parent = NULL; - player->unk_AE8 = 1000; + player->actionVar2 = 1000; EnRaf_Explode(this, play); } break; diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index d4a1eaa1c..ad20b3d07 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -463,7 +463,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END); diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index 1cd0a7861..276ff8db7 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -842,7 +842,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Animation_Change(&this->skelAnime, &gGibdoRedeadGrabEndAnim, 0.5f, 0.0f, Animation_GetLastFrame(&gGibdoRedeadGrabEndAnim), ANIMMODE_ONCE_INTERP, 0.0f); diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index d37bf2605..24fc306cf 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -299,7 +299,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; - player->unk_AE8 = 100; + player->actionVar2 = 100; this->actor.flags |= ACTOR_FLAG_TARGETABLE; this->unk_1F0 = 110; this->unk_1F6 = 2500; @@ -636,7 +636,7 @@ void func_808FB1C0(EnRr* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE); } - player->unk_AE8 = 0; + player->actionVar2 = 0; this->unk_1F0 = 8; this->unk_1EA--; @@ -654,7 +654,7 @@ void func_808FB2C0(EnRr* this, PlayState* play) { Player* player = GET_PLAYER(play); this->unk_1E6--; - player->unk_AE8 = 0; + player->actionVar2 = 0; Math_StepToF(&player->actor.world.pos.x, this->unk_228.x, 30.0f); Math_StepToF(&player->actor.world.pos.y, this->unk_228.y + this->unk_218, 30.0f); Math_StepToF(&player->actor.world.pos.z, this->unk_228.z, 30.0f); diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 9faa6664a..15b7507e1 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -421,7 +421,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) { if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) { player->stateFlags2 &= ~PLAYER_STATE2_80; - player->unk_AE8 = 100; + player->actionVar2 = 100; } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_GRAB_END); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index c5fdf30af..d167e51fd 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -332,7 +332,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { } } else { player = GET_PLAYER(play); - if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) { + if ((player->stateFlags1 & PLAYER_STATE1_400) && (player->actionVar1 != 0)) { Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN); diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index 02aa83ab8..a708038f5 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -638,8 +638,8 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { } } - if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->unk_AE8 < 90)) { - player->unk_AE8 = 90; + if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->actionVar2 < 90)) { + player->actionVar2 = 90; } if (!this->hitByIceArrow && !sPoolHitByIceArrow && diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index ad5591c54..22fca02c8 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -647,14 +647,14 @@ void func_8082DE50(PlayState* play, Player* this) { s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { s16 controlStickAngleDiff = this->prevControlStickAngle - sPlayerControlStickAngle; - this->unk_AE8 += + this->actionVar2 += arg1 + TRUNCF_BINANG(ABS_ALT(controlStickAngleDiff) * fabsf(sPlayerControlStickMagnitude) * (1.0f / 0x600F0)); if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) { - this->unk_AE8 += 5; + this->actionVar2 += 5; } - return this->unk_AE8 >= arg2; + return this->actionVar2 >= arg2; } void func_8082DF2C(PlayState* play) { @@ -4191,8 +4191,8 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | PLAYER_STATE3_20000 | PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | PLAYER_STATE3_200000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_20000000); - this->unk_AE7 = 0; - this->unk_AE8 = 0; + this->actionVar1 = 0; + this->actionVar2 = 0; this->unk_AA4 = 0; this->unk_B86[0] = 0; this->unk_B86[1] = 0; @@ -4416,7 +4416,7 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { if (Inventory_ConsumeFairy(play)) { play->gameOverCtx.state = GAMEOVER_REVIVE_START; - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { play->gameOverCtx.state = GAMEOVER_DEATH_START; func_801A41F8(0); @@ -5098,7 +5098,7 @@ void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { func_8083375C(this, meleeWeaponAnim); Player_SetAction(play, this, Player_Action_84, 0); - this->unk_AE8 = 0; + this->actionVar2 = 0; if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { func_8082DC38(this); @@ -5165,7 +5165,7 @@ void func_80833A64(Player* this) { void func_80833AA0(Player* this, PlayState* play) { if (Player_SetAction(play, this, Player_Action_25, 0)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); - this->unk_AE8 = 1; + this->actionVar2 = 1; } if (this->unk_AA5 != PLAYER_UNKAA5_4) { this->unk_AA5 = PLAYER_UNKAA5_0; @@ -5228,7 +5228,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock); func_8082DAD4(this); - this->unk_AE8 = 20; + this->actionVar2 = 20; this->actor.velocity.y = 0.0f; Player_RequestRumble(play, this, 255, 80, 150, SQ(0)); @@ -5260,7 +5260,7 @@ void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 veloc func_8082DAD4(this); if (arg2 == 2) { - this->unk_AE8 = 4; + this->actionVar2 = 4; this->actor.speed = 3.0f; this->linearVelocity = 3.0f; @@ -5355,11 +5355,11 @@ void func_80834140(PlayState* play, Player* this, PlayerAnimationHeader* anim) { if (!(this->stateFlags1 & PLAYER_STATE1_80)) { func_80834104(play, this); if (func_8082DA90(play)) { - this->unk_AE8 = -30; + this->actionVar2 = -30; } this->stateFlags1 |= PLAYER_STATE1_80; PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, 84.0f, ANIMMODE_ONCE, -6.0f); - this->unk_AE7 = 1; + this->actionVar1 = 1; this->linearVelocity = 0.0f; } } @@ -5519,7 +5519,7 @@ s32 func_80834600(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_19, 0); } - this->unk_AE7 = sp64; + this->actionVar1 = sp64; if ((s8)sp64 == 0) { Player_SetUpperAction(play, this, Player_UpperAction_4); var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] @@ -5748,8 +5748,8 @@ void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { func_8082DD2C(play, this); this->csId = CS_ID_NONE; - this->unk_AE7 = 1; - this->unk_AE8 = 1; + this->actionVar1 = 1; + this->actionVar2 = 1; this->unk_3A0.x = Math_SinS(arg3) * arg2 + this->actor.world.pos.x; this->unk_3A0.z = Math_CosS(arg3) * arg2 + this->actor.world.pos.z; @@ -5828,7 +5828,7 @@ void func_808354A4(PlayState* play, s32 exitIndex, s32 arg2) { void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { func_80833AA0(this, play); - this->unk_AE8 = -2; + this->actionVar2 = -2; func_8082E5EC(play, this, anim); func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE); } @@ -5949,11 +5949,11 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol this->stateFlags1 |= PLAYER_STATE1_20000000; } else { func_80834104(play, this); - this->unk_AE8 = 9999; + this->actionVar2 = 9999; if (this->floorProperty == FLOOR_PROPERTY_5) { - this->unk_AE7 = -1; + this->actionVar1 = -1; } else { - this->unk_AE7 = 1; + this->actionVar1 = 1; } } } @@ -6052,7 +6052,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { func_80835324(play, this, 50.0f, this->actor.shape.rot.y); this->unk_397 = this->doorType; - this->unk_AE7 = 0; + this->actionVar1 = 0; this->stateFlags1 |= PLAYER_STATE1_20000000; func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0); @@ -6065,7 +6065,7 @@ void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); if (this->doorTimer != 0) { - this->unk_AE8 = 0; + this->actionVar2 = 0; func_8082E438(play, this, func_8082ED20(this)); this->skelAnime.endFrame = 0.0f; } else { @@ -6096,7 +6096,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { } func_80835324(play, this, 50.0f, this->actor.shape.rot.y); - this->unk_AE7 = 0; + this->actionVar1 = 0; this->unk_397 = this->doorType; this->stateFlags1 |= PLAYER_STATE1_20000000; Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos); @@ -6112,7 +6112,7 @@ void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); if (this->doorTimer != 0) { - this->unk_AE8 = 0; + this->actionVar2 = 0; func_8082E438(play, this, func_8082ED20(this)); this->skelAnime.endFrame = 0.0f; } else { @@ -6215,14 +6215,14 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { } else if (enDoorType != ENDOOR_TYPE_7) { Camera* mainCam; - this->unk_AE7 = 38.0f * D_8085C3E8; + this->actionVar1 = 38.0f * D_8085C3E8; mainCam = Play_GetCamera(play, CAM_ID_MAIN); Camera_ChangeDoorCam(mainCam, &knobDoor->dyna.actor, play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&knobDoor->dyna.actor)] .sides[(this->doorDirection > 0) ? 0 : 1] .bgCamIndex, - 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); + 0.0f, this->actionVar1, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); } } } @@ -6337,7 +6337,7 @@ void func_808369F4(Player* this, PlayState* play) { void func_80836A5C(Player* this, PlayState* play) { func_808369F4(this, play); if (func_80123420(this)) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -6533,9 +6533,9 @@ void func_80837134(PlayState* play, Player* this) { } } else if (this->stateFlags2 & PLAYER_STATE2_80000) { if (func_80123420(this)) { - anim = D_8085C2A4[this->unk_AE7].unk_8; + anim = D_8085C2A4[this->actionVar1].unk_8; } else { - anim = D_8085C2A4[this->unk_AE7].unk_4; + anim = D_8085C2A4[this->actionVar1].unk_4; } } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) { anim = &gPlayerAnim_link_normal_run_jump_end; @@ -6554,9 +6554,9 @@ void func_80837134(PlayState* play, Player* this) { this->skelAnime.endFrame = 8.0f; if (temp_v0_2 == 1) { - this->unk_AE8 = 0xA; + this->actionVar2 = 0xA; } else { - this->unk_AE8 = 0x14; + this->actionVar2 = 0x14; } } else if (temp_v0_2 == 0) { func_80836A98(this, anim, play); @@ -6601,9 +6601,9 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { } func_80834D50(play, this, D_8085C2A4[var_v1].unk_0, speed, ((var_v1 == 4) ? NA_SE_VO_LI_SWORD_N : sfxId)); - this->unk_AE8 = -1; + this->actionVar2 = -1; this->stateFlags2 |= PLAYER_STATE2_80000; - this->unk_AE7 = var_v1; + this->actionVar1 = var_v1; return true; } anim = &gPlayerAnim_link_normal_run_jump; @@ -6619,7 +6619,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { if ((this->actor.depthInWater > 0.0f) && (this->remainingHopsCounter != 0)) { this->actor.world.pos.y += this->actor.depthInWater; func_80834D50(play, this, anim, speed, NA_SE_NONE); - this->unk_AE8 = 1; + this->actionVar2 = 1; this->stateFlags3 |= PLAYER_STATE3_200000; Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter)); Player_AnimSfx_PlayVoice(this, sfxId); @@ -6638,7 +6638,7 @@ s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { } func_80834D50(play, this, anim, speed, sfxId); - this->unk_AE8 = 1; + this->actionVar2 = 1; return true; } @@ -6749,14 +6749,14 @@ void func_80837BF8(PlayState* play, Player* this) { } void func_80837C20(PlayState* play, Player* this) { - s32 sp1C = this->unk_AE8; - s32 sp18 = this->unk_AE7; + s32 sp1C = this->actionVar2; + s32 sp18 = this->actionVar1; Player_SetAction_PreserveMoveFlags(play, this, Player_Action_50, 0); this->actor.velocity.y = 0.0f; - this->unk_AE8 = sp1C; - this->unk_AE7 = sp18; + this->actionVar2 = sp1C; + this->actionVar1 = sp18; } void func_80837C78(PlayState* play, Player* this) { @@ -6764,9 +6764,9 @@ void func_80837C78(PlayState* play, Player* this) { this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000); if (this->getItemId == GI_HEART_CONTAINER) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } else if (this->getItemId >= GI_NONE) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } else { this->getItemId = -this->getItemId; } @@ -6862,8 +6862,8 @@ s32 func_80837DEC(Player* this, PlayState* play) { func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); - this->unk_AE8 = -1; - this->unk_AE7 = var_v1_2; + this->actionVar2 = -1; + this->actionVar1 = var_v1_2; } else { this->stateFlags1 |= PLAYER_STATE1_2000; this->stateFlags1 &= ~PLAYER_STATE1_20000; @@ -7284,8 +7284,8 @@ s32 func_80838A90(Player* this, PlayState* play) { func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]); } this->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_AE8 = 80; - this->unk_AE7 = -1; + this->actionVar2 = 80; + this->actionVar1 = -1; this->lockOnActor = this->talkActor; } else { this->csId = CS_ID_GLOBAL_TALK; @@ -7297,13 +7297,13 @@ s32 func_80838A90(Player* this, PlayState* play) { } else { this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]; - this->unk_AE7 = 1; + this->actionVar1 = 1; this->actor.textId = 0xFE; } this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; this->exchangeItemAction = this->itemAction; - if (this->unk_AE7 >= 0) { - Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]); + if (this->actionVar1 >= 0) { + Player_AnimationPlayOnce(play, this, D_8085D1F8[this->actionVar1]); } func_8082DAD4(this); return true; @@ -7359,7 +7359,7 @@ s32 func_80838A90(Player* this, PlayState* play) { Player_StopCutscene(this); if (!(this->stateFlags1 & PLAYER_STATE1_800000)) { Player_SetAction(play, this, Player_Action_43, 1); - this->unk_AE8 = 13; + this->actionVar2 = 13; func_80836D8C(this); if (this->unk_AA5 == PLAYER_UNKAA5_2) { play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; @@ -7551,8 +7551,8 @@ void func_80839860(Player* this, PlayState* play, s32 arg2) { func_80834D50(play, this, D_8085C2A4[arg2].unk_0, speed, NA_SE_VO_LI_SWORD_N); - this->unk_AE8 = 1; - this->unk_AE7 = arg2; + this->actionVar2 = 1; + this->actionVar1 = arg2; this->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE); this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f; @@ -7710,7 +7710,7 @@ void func_8083A04C(Player* this) { this->currentBoots = PLAYER_BOOTS_ZORA_LAND; } if (Player_Action_54 == this->actionFunc) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } } else { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { @@ -7861,9 +7861,9 @@ s32 func_8083A6C0(PlayState* play, Player* this) { if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { Player_SetAction(play, this, Player_Action_68, 0); if (this->actor.depthInWater > 12.0f) { - this->unk_AE8 = 1; + this->actionVar2 = 1; } - func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0); + func_8082DB90(play, this, D_8085D200[this->actionVar2].unk_0); Player_PlaySfx(this, NA_SE_IT_SWORD_SWING); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); return true; @@ -7901,7 +7901,7 @@ s32 func_8083A878(PlayState* play, Player* this, f32 arg2) { Player_SetAction(play, this, Player_Action_55, 0); func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000); - this->unk_AE8 = 20; + this->actionVar2 = 20; this->linearVelocity = 2.0f; func_80123140(play, this); return false; @@ -7930,11 +7930,11 @@ void func_8083A98C(Actor* thisx, PlayState* play2) { return; } - if (DECR(this->unk_AE8) != 0) { + if (DECR(this->actionVar2) != 0) { camMode = (play->sceneId != SCENE_AYASHIISHOP) ? CAM_MODE_FIRSTPERSON : CAM_MODE_DEKUHIDE; // Show controls overlay. SCENE_AYASHIISHOP does not have Zoom, so has a different one. - if (this->unk_AE8 == 1) { + if (this->actionVar2 == 1) { Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL); } } else { @@ -8014,15 +8014,15 @@ void Player_InitMode_Telescope(PlayState* play, Player* this) { if (play->sceneId == SCENE_00KEIKOKU) { this->actor.focus.rot.x = 0xBD8; this->actor.focus.rot.y = -0x4D74; - this->unk_AE8 = 20; + this->actionVar2 = 20; } else if (play->sceneId == SCENE_AYASHIISHOP) { this->actor.focus.rot.x = 0x9A6; this->actor.focus.rot.y = 0x2102; - this->unk_AE8 = 2; + this->actionVar2 = 2; } else { this->actor.focus.rot.x = 0x9A6; this->actor.focus.rot.y = 0x2102; - this->unk_AE8 = 20; + this->actionVar2 = 20; } play->actorCtx.flags |= ACTORCTX_FLAG_1; } @@ -8033,7 +8033,7 @@ void Player_InitMode_B(PlayState* play, Player* this) { void Player_InitMode_D(PlayState* play, Player* this) { if (func_8083A878(play, this, 180.0f)) { - this->unk_AE8 = -20; + this->actionVar2 = -20; } } @@ -8043,7 +8043,7 @@ void func_8083ADF0(PlayState* play, Player* this) { gSaveContext.entranceSpeed = 2.0f; if (func_8083A878(play, this, 120.0f)) { - this->unk_AE8 = -15; + this->actionVar2 = -15; } } @@ -8054,9 +8054,9 @@ void Player_InitMode_F(PlayState* play, Player* this) { this->linearVelocity = gSaveContext.entranceSpeed; if (func_8083A878(play, this, 800.0f)) { - this->unk_AE8 = -80.0f / this->linearVelocity; - if (this->unk_AE8 < -20) { - this->unk_AE8 = -20; + this->actionVar2 = -80.0f / this->linearVelocity; + if (this->actionVar2 < -20) { + this->actionVar2 = -20; } } } @@ -8118,7 +8118,7 @@ void func_8083B1A0(Player* this, PlayState* play) { void func_8083B23C(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_2, 1); func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]); - this->unk_AE8 = 1; + this->actionVar2 = 1; } void func_8083B29C(Player* this, PlayState* play) { @@ -8211,7 +8211,7 @@ s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { if (this->stateFlags1 & PLAYER_STATE1_400) { this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); } - this->unk_AE8 = 2; + this->actionVar2 = 2; } func_8082E438(play, this, @@ -8238,7 +8238,7 @@ void func_8083B798(PlayState* play, Player* this) { this->unk_B48 = 2.0f; } else { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } this->unk_AAA = 0x3E80; @@ -8280,7 +8280,7 @@ void func_8083B930(PlayState* play, Player* this) { } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && (this->stateFlags2 & PLAYER_STATE2_400)) { this->stateFlags2 &= ~PLAYER_STATE2_400; func_8083B3B4(play, this, NULL); - this->unk_AE7 = 1; + this->actionVar1 = 1; } else if (Player_Action_27 == this->actionFunc) { Player_SetAction(play, this, Player_Action_59, 0); func_8083B798(play, this); @@ -8764,11 +8764,11 @@ s32 Player_HandleSlopes(PlayState* play, Player* this) { } else { Player_SetAction(play, this, Player_Action_73, 0); func_8082DE50(play, this); - func_8082E514(play, this, sPlayerSlopeSlipAnims[this->unk_AE7]); + func_8082E514(play, this, sPlayerSlopeSlipAnims[this->actionVar1]); this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); this->currentYaw = downwardSlopeYaw; if (sPlayerFloorPitchShape >= 0) { - this->unk_AE7 = 1; + this->actionVar1 = 1; Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); } @@ -9016,7 +9016,7 @@ s32 func_8083D860(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_8000000; if ((var_t0 != 0) || temp_t2) { - if ((this->unk_AE7 = var_t0) != 0) { + if ((this->actionVar1 = var_t0) != 0) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { anim = &gPlayerAnim_link_normal_Fclimb_startA; @@ -9029,14 +9029,14 @@ s32 func_8083D860(Player* this, PlayState* play) { distToInteractWall = 20.5f; } - this->unk_AE8 = -2; + this->actionVar2 = -2; this->actor.world.pos.y += yOut; this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; } else { anim = this->ageProperties->unk_B0; distToInteractWall = (this->ageProperties->wallCheckRadius - this->ageProperties->unk_3C) + 17.0f; - this->unk_AE8 = -4; + this->actionVar2 = -4; this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE } @@ -9720,7 +9720,7 @@ s32 func_8083FD80(Player* this, PlayState* play) { //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab". func_8083375C(this, PLAYER_MWA_STAB_1H); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); - this->unk_AE7 = 1; + this->actionVar1 = 1; this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H; this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y; this->unk_ADD = 0; @@ -9952,10 +9952,10 @@ s32 func_808401F4(PlayState* play, Player* this) { Vec3f D_8085D2A4 = { 0.0f, 0.0f, 5.0f }; void func_80840770(PlayState* play, Player* this) { - if (this->unk_AE8 != 0) { - if (this->unk_AE8 > 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + if (this->actionVar2 != 0) { + if (this->actionVar2 > 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { if (this->stateFlags1 & PLAYER_STATE1_8000000) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_wait, 1.0f, 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_wait), ANIMMODE_ONCE, @@ -9966,7 +9966,7 @@ void func_80840770(PlayState* play, Player* this) { 0.0f); } gSaveContext.healthAccumulator = 0xA0; - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else if (gSaveContext.healthAccumulator == 0) { Player_StopCutscene(this); @@ -9982,10 +9982,10 @@ void func_80840770(PlayState* play, Player* this) { func_808339B4(this, -20); Audio_SetBgmVolumeOn(); } - } else if (this->unk_AE7 != 0) { + } else if (this->actionVar1 != 0) { Player_StopCutscene(this); this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE]; - this->unk_AE8 = 60; + this->actionVar2 = 60; Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, FAIRY_PARAMS(FAIRY_TYPE_5, false, 0)); Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) { @@ -10056,7 +10056,7 @@ s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { } else { Player_SetAction(play, this, Player_Action_26, 0); Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -10115,7 +10115,7 @@ void func_80840E5C(Player* this, PlayState* play) { void func_80840EC0(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_30, 1); Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); - this->unk_AE8 = 1; + this->actionVar2 = 1; this->unk_B38 = 0.0f; } @@ -10234,7 +10234,7 @@ void Player_InitMode_1(PlayState* play, Player* this) { if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { func_80841358(play, this, false); } - this->unk_AE8 = 20; + this->actionVar2 = 20; } void Player_InitMode_3(PlayState* play, Player* this) { @@ -10264,7 +10264,7 @@ void Player_InitMode_6(PlayState* play, Player* this) { Player_SetAction(play, this, Player_Action_0, 0); func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); this->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_AE8 = 0x28; + this->actionVar2 = 0x28; gSaveContext.save.isOwlSave = false; } else { Player_SetAction(play, this, Player_Action_4, 0); @@ -10288,7 +10288,7 @@ void func_80841744(PlayState* play, Player* this) { } this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_ABC = -10000.0f; - this->unk_AE8 = 0x2710; + this->actionVar2 = 0x2710; this->unk_B10[5] = 8.0f; } @@ -11296,7 +11296,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) || (this->stateFlags3 & PLAYER_STATE3_8) || - ((Player_Action_52 == this->actionFunc) && (this->unk_AE8 == 0)) || + ((Player_Action_52 == this->actionFunc) && (this->actionVar2 == 0)) || (Player_Action_53 == this->actionFunc)) { camMode = CAM_MODE_STILL; } else { @@ -11580,7 +11580,7 @@ void func_80844784(PlayState* play, Player* this) { Audio_SetSfxTimerLerpInterval(4, 2); } - this->unk_AE8 = 0x270F; + this->actionVar2 = 0x270F; Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); } @@ -11770,7 +11770,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { func_8083B930(play, this); this->stateFlags2 &= ~PLAYER_STATE2_400; if (Player_Action_54 == this->actionFunc) { - this->unk_AE8 = 20; + this->actionVar2 = 20; } } this->prevBoots = this->currentBoots; @@ -11778,7 +11778,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) { this->actor.parent = this->rideActor; func_80837BD0(play, this); - this->unk_AE8 = -1; + this->actionVar2 = -1; Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_1); func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); } @@ -12076,7 +12076,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { } if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) { if ((Player_Action_93 != this->actionFunc) && - ((Player_Action_96 != this->actionFunc) || (this->unk_AE7 != 1))) { + ((Player_Action_96 != this->actionFunc) || (this->actionVar1 != 1))) { if (this->cylinder.base.atFlags != AT_NONE) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base); } @@ -12305,7 +12305,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { spE0 = 0.0f; } else { Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY); - spE0 = this->unk_AE8 - 6; + spE0 = this->actionVar2 - 6; if (spE0 < 0.0f) { spE8 = D_8085D55C; spE0 = this->unk_B86[0]; @@ -12386,11 +12386,11 @@ void Player_Draw(Actor* thisx, PlayState* play) { func_80122BA4(play, &this->unk_3D0, 2, 255); if (this->unk_B86[1] < 3) { - if (this->unk_AE7 >= 5) { + if (this->actionVar1 >= 5) { f32 var_fa1; u8 sp9B; - var_fa1 = (this->unk_AE7 - 4) * 0.02f; + var_fa1 = (this->actionVar1 - 4) * 0.02f; if (this->unk_B86[1] != 0) { sp9B = (-this->unk_B86[1] * 0x55) + 0xFF; @@ -12679,7 +12679,7 @@ void func_808479F4(PlayState* play, Player* this, f32 arg2) { } void func_80847A50(Player* this) { - Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + + Player_PlaySfx(this, ((this->actionVar1 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + this->ageProperties->surfaceSfxIdOffset); } @@ -12731,8 +12731,8 @@ s32 func_80847BF0(Player* this, PlayState* play) { s32 var_a2; f32 sp34; - if (this->unk_AE8 < 0) { - this->unk_AE8 = 0x63; + if (this->actionVar2 < 0) { + this->actionVar2 = 0x63; } else { var_a2 = (this->mountSide < 0) ? 0 : 1; @@ -12896,10 +12896,10 @@ s32 func_808482E0(PlayState* play, Player* this) { return true; } - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; - this->unk_AE7 = 1; + this->actionVar1 = 1; Message_StartTextbox(play, giEntry->textId, &this->actor); Item_Give(play, giEntry->itemId); @@ -13393,15 +13393,15 @@ void Player_Action_0(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { Player_StopCutscene(this); Player_SetAction(play, this, Player_Action_4, 0); this->stateFlags1 &= ~PLAYER_STATE1_20000000; } - } else if (this->unk_AE8 == 30) { + } else if (this->actionVar2 == 30) { if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { - this->unk_AE8++; + this->actionVar2++; } else { Message_StartTextbox(play, 0xC03, NULL); } @@ -13447,7 +13447,7 @@ void Player_Action_1(Player* this, PlayState* play) { Player_AnimationPlayOnce(play, this, func_8082ED20(this)); if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) { - this->unk_AE8 = 5; + this->actionVar2 = 5; } else { play->roomCtx.curRoom.num = -1; play->roomCtx.prevRoom.num = -1; @@ -13455,19 +13455,19 @@ void Player_Action_1(Player* this, PlayState* play) { play->roomCtx.prevRoom.segment = NULL; func_8012EBF8(play, &play->roomCtx); - this->unk_AE8 = -1; - this->unk_AE7 = this->unk_3CE; + this->actionVar2 = -1; + this->actionVar1 = this->unk_3CE; } } } - } else if (this->unk_AE8 < 0) { - if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) { + } else if (this->actionVar2 < 0) { + if (Room_StartRoomTransition(play, &play->roomCtx, this->actionVar1)) { Map_InitRoomData(play, play->roomCtx.curRoom.num); Minimap_SavePlayerRoomInitInfo(play); - this->unk_AE8 = 5; + this->actionVar2 = 5; } - } else if (this->unk_AE8 > 0) { - this->unk_AE8--; + } else if (this->actionVar2 > 0) { + this->actionVar2--; } else { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; if (R_PLAY_FILL_SCREEN_ALPHA < 0) { @@ -13485,11 +13485,11 @@ void Player_Action_2(Player* this, PlayState* play) { s16 yawTarget; s32 temp_v0; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082E794(this); Player_AnimationPlayLoop(play, this, func_8082EF54(this)); - this->unk_AE8 = 0; + this->actionVar2 = 0; this->stateFlags3 &= ~PLAYER_STATE3_8; } func_8082FC60(this); @@ -13607,13 +13607,13 @@ void Player_Action_4(Player* this, PlayState* play) { if (animFinished || ((this->currentMask == PLAYER_MASK_SCENTS) && (this->skelAnime.animation != &gPlayerAnim_cl_msbowait)) || ((this->currentMask != PLAYER_MASK_SCENTS) && (this->skelAnime.animation == &gPlayerAnim_cl_msbowait))) { - if (this->unk_AE8 != 0) { - if (DECR(this->unk_AE8) == 0) { + if (this->actionVar2 != 0) { + if (DECR(this->actionVar2) == 0) { this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = - (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->unk_AE8 & 1) * 0x50)) - 0x28; + (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->actionVar2 & 1) * 0x50)) - 0x28; } else { func_8082E794(this); Player_ChooseIdleAnim(play, this); @@ -13622,7 +13622,7 @@ void Player_Action_4(Player* this, PlayState* play) { } func_80832F24(this); - if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if ((this->actionVar2 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { if (func_8082FB68(this)) { func_8083B23C(this, play); return; @@ -14079,7 +14079,7 @@ void Player_Action_17(Player* this, PlayState* play) { func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]); } - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { if (!func_80838A90(this, play)) { func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); } @@ -14118,8 +14118,8 @@ void Player_Action_18(Player* this, PlayState* play) { Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]); } - this->unk_AE8 = 1; - this->unk_AE7 = 0; + this->actionVar2 = 1; + this->actionVar1 = 0; } if (!Player_IsGoronOrDeku(this)) { @@ -14131,7 +14131,7 @@ void Player_Action_18(Player* this, PlayState* play) { } } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { f32 yStick = sPlayerControlInput->rel.stick_y * 180; f32 xStick = sPlayerControlInput->rel.stick_x * -120; s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); @@ -14154,14 +14154,14 @@ void Player_Action_18(Player* this, PlayState* play) { this->upperLimbRot.x = this->actor.focus.rot.x; Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3); - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (!func_808401F4(play, this)) { if (this->skelAnime.curFrame < 2.0f) { func_8082FA5C(play, this, PLAYER_MELEE_WEAPON_STATE_1); } } else { - this->unk_AE8 = 1; - this->unk_AE7 = 0; + this->actionVar2 = 1; + this->actionVar1 = 0; } } else if (!func_8083FE38(this, play)) { if (func_8083A274(this, play)) { @@ -14197,7 +14197,7 @@ void Player_Action_18(Player* this, PlayState* play) { void Player_Action_19(Player* this, PlayState* play) { func_80832F24(this); - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { D_80862B04 = func_8083216C(this, play); if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { Player_SetAction(play, this, Player_Action_2, 1); @@ -14236,7 +14236,7 @@ void Player_Action_21(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; func_808345A8(this); - if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->unk_AE8 == 0) && (this->unk_B75 != 0)) { + if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->actionVar2 == 0) && (this->unk_B75 != 0)) { s16 temp_v0 = this->unk_B76; s16 temp_v1 = this->actor.shape.rot.y - temp_v0; @@ -14255,15 +14255,15 @@ void Player_Action_21(Player* this, PlayState* play) { } if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - if (this->unk_AE8 != 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + if (this->actionVar2 != 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { func_8085B384(this, play); } } else if ((this->stateFlags1 & PLAYER_STATE1_20000000) || (!(this->cylinder.base.acFlags & AC_HIT) && (this->unk_B75 == 0))) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { - this->unk_AE8++; + this->actionVar2++; } else { Player_SetAction(play, this, Player_Action_22, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; @@ -14288,7 +14288,7 @@ void Player_Action_22(Player* this, PlayState* play) { func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) { if (this->stateFlags1 & PLAYER_STATE1_20000000) { - this->unk_AE8++; + this->actionVar2++; } else { Player_SetAction(play, this, Player_Action_23, 0); this->stateFlags1 |= PLAYER_STATE1_4000000; @@ -14406,22 +14406,23 @@ void Player_Action_25(Player* this, PlayState* play) { } func_8083216C(this, play); - if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 4))) || + if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->actionVar1 == 2) || (this->actionVar1 >= 4))) || !func_80839770(this, play)) && (this->actor.velocity.y < 0.0f)) { - if (this->unk_AE8 >= 0) { - if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) { + if (this->actionVar2 >= 0) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actionVar2 == 0) || + (this->fallDistance > 0)) { if ((sPlayerYDistToFloor > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) { func_80840980(this, NA_SE_VO_LI_FALL_S); this->stateFlags3 &= ~PLAYER_STATE3_10000; } PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f); - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else { - if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) { - this->unk_AE8 = -2; + if ((this->actionVar2 == -1) && (this->fallDistance > 120) && (sPlayerYDistToFloor > 280.0f)) { + this->actionVar2 = -2; func_80840980(this, NA_SE_VO_LI_FALL_L); } @@ -14498,7 +14499,7 @@ void Player_Action_26(Player* this, PlayState* play) { return; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { s32 temp_v0; Math_StepToF(&this->linearVelocity, 0.0f, 2.0f); @@ -14620,16 +14621,16 @@ void Player_Action_30(Player* this, PlayState* play) { func_8083133C(this); this->stateFlags1 &= ~PLAYER_STATE1_20000; Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); - this->unk_AE8 = -1; + this->actionVar2 = -1; } func_80832F24(this); - if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) { + if (!func_8083FE38(this, play) && (this->actionVar2 != 0)) { func_80840F34(this); - if (this->unk_AE8 < 0) { + if (this->actionVar2 < 0) { if (this->unk_B08 >= 0.1f) { this->unk_ADD = 0; - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { func_80840E5C(this, play); } @@ -14789,7 +14790,7 @@ void Player_Action_33(Player* this, PlayState* play) { } func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP); - this->unk_AE8 = -1; + this->actionVar2 = -1; } } else { temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); @@ -14822,9 +14823,9 @@ void Player_Action_33(Player* this, PlayState* play) { } if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { Player_AnimSfx_PlayFloorJump(this); - this->unk_AE8 = 1; + this->actionVar2 = 1; } Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f); } @@ -14854,13 +14855,13 @@ void Player_Action_35(Player* this, PlayState* play) { if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { func_80833AA0(this, play); this->stateFlags1 |= PLAYER_STATE1_20000000; - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { PlayerAnimation_Update(play, &this->skelAnime); if (DECR(this->doorTimer) == 0) { this->linearVelocity = 0.1f; - this->unk_AE8 = 1; + this->actionVar2 = 1; } - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { f32 sp6C = 5.0f * D_8085C3E4; s32 var_t0 = func_808411D4(play, this, &sp6C, -1); @@ -14887,7 +14888,7 @@ void Player_Action_35(Player* this, PlayState* play) { } if (var_t0 < 0x1E) { - this->unk_AE7 = 1; + this->actionVar1 = 1; this->stateFlags1 |= PLAYER_STATE1_20000000; this->unk_3A0.x = this->unk_3AC.x; this->unk_3A0.z = this->unk_3AC.z; @@ -14904,8 +14905,8 @@ void Player_Action_35(Player* this, PlayState* play) { this->unk_3A0.z = (Math_CosS(sPlayerConveyorYaw) * 400.0f) + this->actor.world.pos.z; } } else { - if (this->unk_AE8 < 0) { - this->unk_AE8++; + if (this->actionVar2 < 0) { + this->actionVar2++; sp5C = gSaveContext.entranceSpeed; sp58 = -1; } else if (this->unk_397 == 4) { @@ -14971,7 +14972,7 @@ void Player_Action_35(Player* this, PlayState* play) { Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D644, &this->unk_3AC); this->actor.shape.rot.y += (this->doorDirection != 0) ? 0x4000 : -0x4000; - this->unk_AE7 = 0; + this->actionVar1 = 0; this->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y; } @@ -14984,8 +14985,8 @@ void Player_Action_35(Player* this, PlayState* play) { } temp_v0_8 = func_808411D4(play, this, &sp5C, sp58); - if ((this->unk_AE8 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) && - (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { + if ((this->actionVar2 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) && + (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { if (this->unk_397 == 4) { Map_InitRoomData(play, play->roomCtx.curRoom.num); Minimap_SavePlayerRoomInitInfo(play); @@ -15026,7 +15027,7 @@ void Player_Action_36(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; - if (DECR(this->unk_AE7) == 0) { + if (DECR(this->actionVar1) == 0) { func_80835DF8(play, this, &poly, &bgId); } @@ -15034,9 +15035,9 @@ void Player_Action_36(Player* this, PlayState* play) { func_8083216C(this, play); if (animFinished) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (DECR(this->doorTimer) == 0) { - this->unk_AE8 = 1; + this->actionVar2 = 1; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } } else { @@ -15095,8 +15096,8 @@ void Player_Action_38(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait); - this->unk_AE8 = 1; - } else if (this->unk_AE8 == 0) { + this->actionVar2 = 1; + } else if (this->actionVar2 == 0) { if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) { Actor* interactRangeActor = this->interactRangeActor; @@ -15131,10 +15132,10 @@ void Player_Action_39(Player* this, PlayState* play) { void Player_Action_40(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait); - this->unk_AE8 = 15; - } else if (this->unk_AE8 != 0) { - this->unk_AE8--; - if (this->unk_AE8 == 0) { + this->actionVar2 = 15; + } else if (this->actionVar2 != 0) { + this->actionVar2--; + if (this->actionVar2 == 0) { func_80836A98(this, &gPlayerAnim_link_normal_nocarry_free_end, play); this->stateFlags1 &= ~PLAYER_STATE1_800; Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); @@ -15208,7 +15209,7 @@ void Player_Action_43(Player* this, PlayState* play) { func_808391D8(this, play)))) { func_80839ED0(this, play); Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); - } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { + } else if ((DECR(this->actionVar2) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { if (func_801240DC(this)) { this->unk_AA6 |= 0x43; } else { @@ -15233,10 +15234,10 @@ void Player_Action_44(Player* this, PlayState* play) { func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); CutsceneManager_Stop(CS_ID_GLOBAL_TALK); if (this->stateFlags1 & PLAYER_STATE1_800000) { - s32 sp44 = this->unk_AE8; + s32 sp44 = this->actionVar2; func_80837BD0(play, this); - this->unk_AE8 = sp44; + this->actionVar2 = sp44; } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) && ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) { if (func_801242B4(this)) { @@ -15274,11 +15275,11 @@ void Player_Action_44(Player* this, PlayState* play) { if (this->lockOnActor != NULL) { this->currentYaw = func_8083C62C(this, false); this->actor.shape.rot.y = this->currentYaw; - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { if (PlayerAnimation_Update(play, &this->unk_284)) { - this->unk_AE7--; - if (this->unk_AE7 != 0) { + this->actionVar1--; + if (this->actionVar1 != 0) { PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), ANIMMODE_ONCE, -6.0f); @@ -15295,7 +15296,7 @@ void Player_Action_44(Player* this, PlayState* play) { PlayerAnimation_Change( play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); - this->unk_AE7 = 2; + this->actionVar1 = 2; } } } @@ -15329,8 +15330,8 @@ void Player_Action_46(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) { - this->unk_AE8 = 1; - } else if ((this->unk_AE8 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { + this->actionVar2 = 1; + } else if ((this->actionVar2 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); } @@ -15372,8 +15373,8 @@ void Player_Action_47(Player* this, PlayState* play) { this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); if (func_8082E67C(play, this, anim)) { - this->unk_AE8 = 1; - } else if (this->unk_AE8 == 0) { + this->actionVar2 = 1; + } else if (this->actionVar2 == 0) { if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); } @@ -15432,9 +15433,9 @@ void Player_Action_48(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, - (this->unk_AE7 > 0) ? &gPlayerAnim_link_normal_fall_wait - : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]); - } else if (this->unk_AE7 == 0) { + (this->actionVar1 > 0) ? &gPlayerAnim_link_normal_fall_wait + : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]); + } else if (this->actionVar1 == 0) { f32 frame; if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { @@ -15446,25 +15447,25 @@ void Player_Action_48(Player* this, PlayState* play) { if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) { Player_AnimSfx_PlayFloor(this, NA_SE_PL_WALK_GROUND); if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { - this->unk_AE7 = -1; + this->actionVar1 = -1; } } } Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800); - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); if (this->unk_ADF[this->unk_ADE] >= 0) { func_808381A0(this, - (this->unk_AE7 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType] - : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType], + (this->actionVar1 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType], play); } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) { func_80833A64(this); - if (this->unk_AE7 < 0) { + if (this->actionVar1 < 0) { this->linearVelocity = -0.8f; } else { this->linearVelocity = 0.8f; @@ -15512,7 +15513,7 @@ void Player_Action_50(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; - if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { + if ((this->actionVar1 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { var_fv0 = ABS_ALT(xStick) * 0.0325f; yStick = 0; } else { @@ -15534,7 +15535,7 @@ void Player_Action_50(Player* this, PlayState* play) { this->skelAnime.playSpeed = var_fv1 * var_fv0; - if (this->unk_AE8 >= 0) { + if (this->actionVar2 >= 0) { if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) { dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); @@ -15551,14 +15552,14 @@ void Player_Action_50(Player* this, PlayState* play) { func_80831944(play, this); - if ((this->unk_AE8 < 0) || !func_8083E354(this, play)) { + if ((this->actionVar2 < 0) || !func_8083E354(this, play)) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 < 0) { - this->unk_AE8 = ABS_ALT(this->unk_AE8) & 1; + if (this->actionVar2 < 0) { + this->actionVar2 = ABS_ALT(this->actionVar2) & 1; } else if (yStick != 0) { f32 yIntersect; - sp78 = this->unk_AE7 + this->unk_AE8; + sp78 = this->actionVar1 + this->actionVar2; if (yStick > 0) { sp6C.x = 0.0f; @@ -15568,7 +15569,7 @@ void Player_Action_50(Player* this, PlayState* play) { yIntersect = func_80835D2C(play, this, &sp6C, &sp60); if (this->actor.world.pos.y < yIntersect) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { this->actor.world.pos.y = yIntersect; this->stateFlags1 &= ~PLAYER_STATE1_200000; func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C, @@ -15578,22 +15579,22 @@ void Player_Action_50(Player* this, PlayState* play) { func_808381A0(this, &gPlayerAnim_link_normal_jump_climb_up_free, play); this->stateFlags1 |= PLAYER_STATE1_4000; } else { - func_8083DCC4(this, this->ageProperties->unk_D4[this->unk_AE8], play); + func_8083DCC4(this, this->ageProperties->unk_D4[this->actionVar2], play); } } else { this->skelAnime.prevTransl = this->ageProperties->unk_4A[sp78]; Player_AnimationPlayOnce(play, this, this->ageProperties->unk_B4[sp78]); } } else if ((this->actor.world.pos.y - this->actor.floorHeight) < 15.0f) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { func_8083E2F4(this, play); } else { - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { this->skelAnime.prevTransl = this->ageProperties->unk_44; } - func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play); - this->unk_AE8 = 1; + func_8083DCC4(this, this->ageProperties->unk_CC[this->actionVar2], play); + this->actionVar2 = 1; } } else { sp78 ^= 1; @@ -15603,15 +15604,15 @@ void Player_Action_50(Player* this, PlayState* play) { 0.0f); } - this->unk_AE8 ^= 1; - } else if ((this->unk_AE7 != 0) && (xStick != 0)) { - anim2 = this->ageProperties->unk_C4[this->unk_AE8]; + this->actionVar2 ^= 1; + } else if ((this->actionVar1 != 0) && (xStick != 0)) { + anim2 = this->ageProperties->unk_C4[this->actionVar2]; if (xStick > 0) { - this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8]; + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2]; Player_AnimationPlayOnce(play, this, anim2); } else { - this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2]; + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->actionVar2 + 2]; PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2, 0.0f); } @@ -15623,10 +15624,10 @@ void Player_Action_50(Player* this, PlayState* play) { } } - if (this->unk_AE8 < 0) { - if (((this->unk_AE8 == -2) && + if (this->actionVar2 < 0) { + if (((this->actionVar2 == -2) && (PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) || - ((this->unk_AE8 == -4) && + ((this->actionVar2 == -4) && (PlayerAnimation_OnFrame(&this->skelAnime, 22.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 35.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 49.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 55.0f)))) { func_80847A50(this); @@ -15659,7 +15660,7 @@ void Player_Action_51(Player* this, PlayState* play) { } else { f32* var_v1 = D_8085D66C; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { Player_PlayAnimSfx(this, D_8085D67C); var_v1 = D_8085D674; } @@ -15756,10 +15757,10 @@ void Player_Action_52(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80847E2C(this, 1.0f, 10.0f); - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1; - this->unk_AE8 = 0x63; + this->actionVar2 = 0x63; } else { s32 var_v0 = (this->mountSide < 0) ? 0 : 1; @@ -15779,8 +15780,8 @@ void Player_Action_52(Player* this, PlayState* play) { this->skelAnime.prevTransl = D_8085D6E0; - if ((this->unk_AE8 < 0) || ((rideActor->animIndex != (this->unk_AE8 & 0xFFFF)) && - ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->unk_AE8 >= 2)))) { + if ((this->actionVar2 < 0) || ((rideActor->animIndex != (this->actionVar2 & 0xFFFF)) && + ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->actionVar2 >= 2)))) { s32 animIndex = rideActor->animIndex; if (animIndex < ENHORSE_ANIM_STOPPING) { @@ -15797,24 +15798,24 @@ void Player_Action_52(Player* this, PlayState* play) { Player_AnimationPlayOnce(play, this, D_8085D6D0[index]); } else { this->skelAnime.animation = D_8085D688[animIndex - 2]; - if (this->unk_AE8 >= 0) { + if (this->actionVar2 >= 0) { Animation_SetMorph(play, &this->skelAnime, 8.0f); } if (animIndex < ENHORSE_ANIM_WALK) { func_808309CC(play, this); - this->unk_AE7 = 0; + this->actionVar1 = 0; } } - this->unk_AE8 = animIndex; + this->actionVar2 = animIndex; } - if (this->unk_AE8 == 1) { + if (this->actionVar2 == 1) { if (D_80862B04 || func_8082DAFC(play)) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3); } else if (PlayerAnimation_Update(play, &this->skelAnime)) { - this->unk_AE8 = 0x63; + this->actionVar2 = 0x63; } else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) { Player_PlayAnimSfx(this, D_8085D6E8); } @@ -15828,11 +15829,11 @@ void Player_Action_52(Player* this, PlayState* play) { if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_NONE)) { this->unk_AA5 = PLAYER_UNKAA5_0; - this->unk_AE7 = 0; - } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) { + this->actionVar1 = 0; + } else if ((this->actionVar2 < 2) || (this->actionVar2 >= 4)) { D_80862B04 = func_8083216C(this, play); if (D_80862B04) { - this->unk_AE7 = 0; + this->actionVar1 = 0; } } @@ -15843,10 +15844,10 @@ void Player_Action_52(Player* this, PlayState* play) { this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; if (!D_80862B04) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { if (PlayerAnimation_Update(play, &this->unk_284)) { rideActor->stateFlags &= ~ENHORSE_FLAG_8; - this->unk_AE7 = 0; + this->actionVar1 = 0; } if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { @@ -15872,14 +15873,14 @@ void Player_Action_52(Player* this, PlayState* play) { if (EN_HORSE_CHECK_3(rideActor)) { anim = &gPlayerAnim_link_uma_stop_muti; } else if (EN_HORSE_CHECK_2(rideActor)) { - if ((this->unk_AE8 >= 2) && (this->unk_AE8 != 0x63)) { - anim = D_8085D6A4[this->unk_AE8]; + if ((this->actionVar2 >= 2) && (this->actionVar2 != 0x63)) { + anim = D_8085D6A4[this->actionVar2]; } } if (anim != NULL) { PlayerAnimation_PlayOnce(play, &this->unk_284, anim); - this->unk_AE7 = 1; + this->actionVar1 = 1; } } } @@ -15968,7 +15969,7 @@ s32 func_80850734(PlayState* play, Player* this) { this->stateFlags2 |= PLAYER_STATE2_400; PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_waterroll, 2.0f / 3.0f, 4.0f, Animation_GetLastFrame(&gPlayerAnim_pz_waterroll), ANIMMODE_ONCE, -6.0f); - this->unk_AE8 = 5; + this->actionVar2 = 5; this->unk_B86[0] = 0; this->unk_B48 = this->linearVelocity; this->actor.velocity.y = 0.0f; @@ -15996,18 +15997,18 @@ void Player_Action_54(Player* this, PlayState* play) { func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait); func_808475B4(this); - if (this->unk_AE8 != 0) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + this->actionVar2--; } func_8082F164(this, BTN_R); if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { - this->unk_AE8 = 0; + this->actionVar2 = 0; } if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) && - !func_8083B3B4(play, this, sPlayerControlInput) && ((this->unk_AE8 != 0) || !func_80850734(play, this))) { + !func_8083B3B4(play, this, sPlayerControlInput) && ((this->actionVar2 != 0) || !func_80850734(play, this))) { speedTarget = 0.0f; yawTarget = this->actor.shape.rot.y; @@ -16048,7 +16049,7 @@ void Player_Action_55(Player* this, PlayState* play) { func_808477D0(play, this, NULL, this->linearVelocity); func_808475B4(this); - if (DECR(this->unk_AE8) == 0) { + if (DECR(this->actionVar2) == 0) { func_808353DC(play, this); } } @@ -16103,13 +16104,13 @@ void Player_Action_56(Player* this, PlayState* play) { speedTarget = 0.0f; - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || (this->currentBoots != PLAYER_BOOTS_ZORA_LAND)) { this->unk_B86[0] = 1; } - if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->unk_AE8) == 0)) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->actionVar2) == 0)) { if (this->unk_B86[0] != 0) { this->stateFlags3 &= ~PLAYER_STATE3_8000; func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); @@ -16276,10 +16277,10 @@ void Player_Action_59(Player* this, PlayState* play) { if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { func_808353DC(play, this); - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { f32 temp_fv0; - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { func_8083B798(play, this); @@ -16295,7 +16296,7 @@ void Player_Action_59(Player* this, PlayState* play) { !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { func_808481CC(play, this, -2.0f); } else { - this->unk_AE7++; + this->actionVar1++; func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); } } @@ -16304,16 +16305,16 @@ void Player_Action_59(Player* this, PlayState* play) { if (temp_fv0 < this->actor.velocity.y) { this->actor.velocity.y = temp_fv0; } - } else if (this->unk_AE7 == 1) { + } else if (this->actionVar1 == 1) { PlayerAnimation_Update(play, &this->skelAnime); func_808475B4(this); if (this->unk_AAA < 0x2710) { - this->unk_AE7++; - this->unk_AE8 = this->actor.depthInWater; + this->actionVar1++; + this->actionVar2 = this->actor.depthInWater; func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); } } else if (!func_8083B3B4(play, this, sPlayerControlInput)) { - f32 var_fv1 = (this->unk_AE8 * 0.018f) + 4.0f; + f32 var_fv1 = (this->actionVar2 * 0.018f) + 4.0f; if (this->stateFlags1 & PLAYER_STATE1_800) { sPlayerControlInput = NULL; @@ -16561,7 +16562,7 @@ void func_8085255C(PlayState* play, Player* this) { } void func_808525C4(PlayState* play, Player* this) { - if (this->unk_AE8++ >= 3) { + if (this->actionVar2++ >= 3) { if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) { func_8082E5A8(play, this, D_8085D190[this->transformation]); } else if (this->transformation == PLAYER_FORM_GORON) { @@ -16578,12 +16579,12 @@ void func_808525C4(PlayState* play, Player* this) { void Player_Action_63(Player* this, PlayState* play) { if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == D_8085D17C[this->transformation])) || - ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) { + ((this->skelAnime.mode == 0) && (this->actionVar2 == 0)))) { func_808525C4(play, this); if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) { func_80152434(play, 1); } - } else if (this->unk_AE8 != 0) { + } else if (this->actionVar2 != 0) { if (play->msgCtx.ocarinaMode == 4) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); @@ -16699,12 +16700,12 @@ void Player_Action_65(Player* this, PlayState* play) { func_8083249C(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 != 0) { - if (this->unk_AE8 > 1) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + if (this->actionVar2 > 1) { + this->actionVar2--; } - if (func_808482E0(play, this) && (this->unk_AE8 == 1)) { + if (func_808482E0(play, this) && (this->actionVar2 == 1)) { Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) || @@ -16762,10 +16763,10 @@ void Player_Action_65(Player* this, PlayState* play) { ANIM_FLAG_80); Player_StopCutscene(this); this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET]; - this->unk_AE8 = 2; + this->actionVar2 = 2; } } - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { if (this->transformation == PLAYER_FORM_HUMAN) { Player_PlayAnimSfx(this, D_8085D73C); } else if (this->transformation == PLAYER_FORM_DEKU) { @@ -16794,9 +16795,9 @@ AnimSfxEntry D_8085D75C[] = { void Player_Action_66(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 == 0) { - if (DECR(this->unk_AE8) == 0) { - this->unk_AE7 = 1; + if (this->actionVar1 == 0) { + if (DECR(this->actionVar2) == 0) { + this->actionVar1 = 1; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; } } else { @@ -16843,7 +16844,7 @@ void Player_Action_67(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (this->itemAction == PLAYER_IA_BOTTLE_POE) { s32 health = Rand_S16Offset(-1, 3); @@ -16882,31 +16883,31 @@ void Player_Action_67(Player* this, PlayState* play) { func_8082DB60(play, this, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink : &gPlayerAnim_link_bottle_drink_demo_wait); - this->unk_AE8 = 1; + this->actionVar2 = 1; //! FAKE dummy_label_235515:; - } else if (this->unk_AE8 < 0) { - this->unk_AE8++; - if (this->unk_AE8 == 0) { - this->unk_AE8 = 3; + } else if (this->actionVar2 < 0) { + this->actionVar2++; + if (this->actionVar2 == 0) { + this->actionVar2 = 3; this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; - } else if (this->unk_AE8 == -6) { + } else if (this->actionVar2 == -6) { func_808530E0(play, this); } } else { Player_StopCutscene(this); func_80839E74(this, play); } - } else if (this->unk_AE8 == 1) { + } else if (this->actionVar2 == 1) { if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { if (this->transformation == PLAYER_FORM_DEKU) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pn_drinkend, 2.0f / 3.0f, 0.0f, 5.0f, 2, -6.0f); - this->unk_AE8 = -7; + this->actionVar2 = -7; } else { func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end); - this->unk_AE8 = 2; + this->actionVar2 = 2; } Player_UpdateBottleHeld(play, this, @@ -16915,7 +16916,7 @@ void Player_Action_67(Player* this, PlayState* play) { } Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG); - } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { + } else if ((this->actionVar2 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); } } @@ -16940,23 +16941,23 @@ struct_8085D798 D_8085D798[] = { }; void Player_Action_68(Player* this, PlayState* play) { - struct_8085D200* sp24 = &D_8085D200[this->unk_AE8]; + struct_8085D200* sp24 = &D_8085D200[this->actionVar2]; func_80832F24(this); if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]); - if (this->unk_AE8 == 0) { - Message_StartTextbox(play, D_8085D798[this->unk_AE7 - 1].textId, &this->actor); + if (this->actionVar2 == 0) { + Message_StartTextbox(play, D_8085D798[this->actionVar1 - 1].textId, &this->actor); Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { Actor* talkActor; - this->unk_AE7 = 0; + this->actionVar1 = 0; Player_StopCutscene(this); func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); @@ -16969,11 +16970,11 @@ void Player_Action_68(Player* this, PlayState* play) { func_80839E74(this, play); } } else { - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { s32 temp_ft5 = this->skelAnime.curFrame - sp24->unk_8; if ((temp_ft5 >= 0) && (sp24->unk_9 >= temp_ft5)) { - if ((this->unk_AE8 != 0) && (temp_ft5 == 0)) { + if ((this->actionVar2 != 0) && (temp_ft5 == 0)) { Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); } @@ -16994,8 +16995,8 @@ void Player_Action_68(Player* this, PlayState* play) { } if (i < ARRAY_COUNT(D_8085D798)) { - this->unk_AE7 = i + 1; - this->unk_AE8 = 0; + this->actionVar1 = i + 1; + this->actionVar2 = 0; this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; interactRangeActor->parent = &this->actor; Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction); @@ -17133,12 +17134,12 @@ void Player_Action_71(Player* this, PlayState* play) { this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); } - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) { Message_StartTextbox(play, this->actor.textId, &this->actor); } - this->unk_AE8 = 1; + this->actionVar2 = 1; } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { Player_StopCutscene(this); this->getItemDrawIdPlusOne = GID_NONE + 1; @@ -17147,7 +17148,7 @@ void Player_Action_71(Player* this, PlayState* play) { this->unk_B5E = 0xA; } } - } else if (this->unk_AE8 >= 0) { + } else if (this->actionVar2 >= 0) { if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) && PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) { Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE); @@ -17159,7 +17160,7 @@ void Player_Action_71(Player* this, PlayState* play) { Player_PlayAnimSfx(this, D_8085D840); } - if ((this->unk_AE7 == 0) && (this->lockOnActor != NULL)) { + if ((this->actionVar1 == 0) && (this->lockOnActor != NULL)) { this->currentYaw = func_8083C62C(this, 0); this->actor.shape.rot.y = this->currentYaw; } @@ -17213,7 +17214,7 @@ void Player_Action_73(Player* this, PlayState* play) { Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw); var_v0 = downwardSlopeYaw; - if (this->unk_AE7 != 0) { + if (this->actionVar1 != 0) { var_v0 = downwardSlopeYaw + 0x8000; } if (this->linearVelocity < 0.0f) { @@ -17233,8 +17234,8 @@ void Player_Action_73(Player* this, PlayState* play) { if (Math_AsymStepToF(&this->linearVelocity, var_fv0, temp_fv1, var_fa0) && (var_fv0 == 0.0f)) { func_80836A98(this, - (this->unk_AE7 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType] - : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType], + (this->actionVar1 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType], play); } @@ -17245,7 +17246,7 @@ void Player_Action_73(Player* this, PlayState* play) { void func_80859CE0(PlayState* play, Player* this, s32 arg2); void Player_Action_74(Player* this, PlayState* play) { - if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) { + if ((DECR(this->actionVar2) == 0) && func_808387A0(play, this)) { func_80859CE0(play, this, 0); Player_SetAction(play, this, Player_Action_97, 0); Player_Action_97(this, play); @@ -17254,7 +17255,7 @@ void Player_Action_74(Player* this, PlayState* play) { void Player_Action_75(Player* this, PlayState* play) { Player_SetAction(play, this, Player_Action_74, 0); - this->unk_AE8 = 0x28; + this->actionVar2 = 0x28; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); } @@ -17263,11 +17264,11 @@ void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* cue); void Player_Action_76(Player* this, PlayState* play) { if (sPlayerYDistToFloor < 150.0f) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; Player_AnimSfx_PlayFloorLand(this); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } else { func_8085B384(this, play); @@ -17300,9 +17301,9 @@ void Player_Action_77(Player* this, PlayState* play) { } } - if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) { - if (this->unk_AE7 != 0) { - if (this->unk_AE7 < 0) { + if ((this->actionVar2++ >= 9) && !func_8082DA90(play)) { + if (this->actionVar1 != 0) { + if (this->actionVar1 < 0) { func_80169FDC(&play->state); } else { func_80169EFC(&play->state); @@ -17343,12 +17344,12 @@ void Player_Action_80(Player* this, PlayState* play) { if (play->unk_1887C < 0) { play->unk_1887C = 0; func_80839ED0(this, play); - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { play->unk_1887C = 10; func_80847880(play, this); Player_SetAction(play, this, Player_Action_80, 1); - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { play->unk_1887C = 0; func_80847190(play, this, 0); @@ -17371,7 +17372,7 @@ void Player_Action_80(Player* this, PlayState* play) { play->unk_1887C = -1; Player_Action_81(this, play); Player_SetAction(play, this, Player_Action_80, 0); - this->unk_AE7 = 0; + this->actionVar1 = 0; } else { play->unk_1887C = 10; Player_Action_81(this, play); @@ -17395,13 +17396,13 @@ void Player_Action_81(Player* this, PlayState* play) { } void Player_Action_82(Player* this, PlayState* play) { - if (this->unk_AE7 >= 0) { - if (this->unk_AE7 < 6) { - this->unk_AE7++; + if (this->actionVar1 >= 0) { + if (this->actionVar1 < 6) { + this->actionVar1++; } else { - this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f; + this->unk_B48 = (this->actionVar1 >> 1) * 22.0f; if (func_8082DE88(this, 1, 0x64)) { - this->unk_AE7 = -1; + this->actionVar1 = -1; EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x); Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN); } @@ -17409,8 +17410,8 @@ void Player_Action_82(Player* this, PlayState* play) { if (this->transformation == PLAYER_FORM_ZORA) { func_80834104(play, this); this->skelAnime.animation = NULL; - this->unk_AE8 = -0x28; - this->unk_AE7 = 1; + this->actionVar2 = -0x28; + this->actionVar1 = 1; this->linearVelocity = 0.0f; } else if (play->gameplayFrames % 4 == 0) { Player_InflictDamage(play, -1); @@ -17428,8 +17429,8 @@ void Player_Action_83(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_808345A8(this); - if (((this->unk_AE8 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) { - if (DECR(this->unk_AE8) == 0) { + if (((this->actionVar2 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) { + if (DECR(this->actionVar2) == 0) { func_80836988(this, play); } } @@ -17479,7 +17480,7 @@ void Player_Action_84(Player* this, PlayState* play) { ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) && func_808333CC(this))) { - D_80862B48 = this->unk_AE8; + D_80862B48 = this->actionVar2; if (!func_80848570(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; @@ -17515,7 +17516,7 @@ void Player_Action_84(Player* this, PlayState* play) { (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_JUMPKICK_FINISH)) || ((this->transformation == PLAYER_FORM_GORON) && (this->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))) { - this->unk_AE8 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0; + this->actionVar2 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0; } } @@ -17685,19 +17686,19 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend); } else if ((this->skelAnime.animation == &gPlayerAnim_cl_setmask) || (this->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) { - if (this->unk_AE7 >= 58) { - Math_StepToS(&this->unk_AE8, 255, 50); + if (this->actionVar1 >= 58) { + Math_StepToS(&this->actionVar2, 255, 50); } - if (this->unk_AE7 >= 64) { + if (this->actionVar1 >= 64) { Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f); - } else if (this->unk_AE7 >= 0xE) { + } else if (this->actionVar1 >= 0xE) { Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f); } - if (this->unk_AE7 > 65) { + if (this->actionVar1 > 65) { Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f); - } else if (this->unk_AE7 >= 0x10) { + } else if (this->actionVar1 >= 0x10) { Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f); } @@ -17705,13 +17706,13 @@ void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { Player_PlayAnimSfx(this, D_8085D8F0); } } else { - if (this->unk_AE7 >= 20) { - Math_StepToS(&this->unk_AE8, 255, 20); + if (this->actionVar1 >= 20) { + Math_StepToS(&this->actionVar2, 255, 20); } if (R_PLAY_FILL_SCREEN_ON == 0) { Player_PlayAnimSfx(this, D_8085D904); - if (this->unk_AE7 == 15) { + if (this->actionVar1 == 15) { Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE); } } @@ -17743,7 +17744,7 @@ void Player_Action_86(Player* this, PlayState* play) { func_80855218(play, this, &sp4C); - if (this->unk_AE7 == 0x14) { + if (this->actionVar1 == 0x14) { Play_EnableMotionBlurPriority(100); } @@ -17753,12 +17754,12 @@ void Player_Action_86(Player* this, PlayState* play) { R_PLAY_FILL_SCREEN_ALPHA = 255; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; Play_DisableMotionBlurPriority(); SET_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM]); } - } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || - ((this->unk_AE7 >= 5) && + } else if ((this->actionVar1++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || + ((this->actionVar1 >= 5) && (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) || CHECK_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM])) && CHECK_BTN_ANY(sPlayerControlInput->press.button, @@ -17785,11 +17786,11 @@ void Player_Action_86(Player* this, PlayState* play) { Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH); } - if (this->unk_AE7 >= sp4C->unk_0) { - if (this->unk_AE7 < sp4C->unk_2) { + if (this->actionVar1 >= sp4C->unk_0) { + if (this->actionVar1 < sp4C->unk_2) { Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f); - } else if (this->unk_AE7 < sp4C->unk_3) { - if (this->unk_AE7 == sp4C->unk_2) { + } else if (this->actionVar1 < sp4C->unk_3) { + if (this->actionVar1 == sp4C->unk_2) { Lib_PlaySfx_2(NA_SE_EV_LIGHTNING_HARD); } @@ -17799,10 +17800,10 @@ void Player_Action_86(Player* this, PlayState* play) { } } - if (this->unk_AE7 >= 0x10) { - if (this->unk_AE7 < 0x40) { + if (this->actionVar1 >= 0x10) { + if (this->actionVar1 < 0x40) { Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f); - } else if (this->unk_AE7 < 0x37) { + } else if (this->actionVar1 < 0x37) { Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f); } else { Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f); @@ -17824,8 +17825,8 @@ void Player_Action_87(Player* this, PlayState* play) { } } - if (this->unk_AE7++ < 4) { - if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) { + if (this->actionVar1++ < 4) { + if ((this->prevMask == PLAYER_MASK_NONE) && (this->actionVar1 == 4)) { PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE, 20.0f); } @@ -17835,7 +17836,7 @@ void Player_Action_87(Player* this, PlayState* play) { s16 angle; Lib_GetControlStickData(&dist, &angle, play->state.input); - if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) { + if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->actionVar1 > 10) && (dist != 0.0f))) { if (R_PLAY_FILL_SCREEN_ON == 0) { this->stateFlags1 &= ~PLAYER_STATE1_2; this->prevMask = this->currentMask; @@ -17854,10 +17855,10 @@ void Player_Action_87(Player* this, PlayState* play) { } void Player_Action_88(Player* this, PlayState* play) { - if (this->unk_AE8++ > 90) { + if (this->actionVar2++ > 90) { play->msgCtx.ocarinaMode = 4; func_8085B384(this, play); - } else if (this->unk_AE8 == 10) { + } else if (this->actionVar2 == 10) { func_80848640(play, this); } } @@ -17867,7 +17868,7 @@ void Player_Action_89(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_40; func_80855218(play, this, NULL); - this->unk_AE7++; + this->actionVar1++; if (!(this->stateFlags1 & PLAYER_STATE1_100)) { this->prevMask = this->currentMask; @@ -17909,10 +17910,10 @@ void Player_Action_91(Player* this, PlayState* play) { var_a0 = 0; if ((this->actor.floorHeight - this->actor.world.pos.y) < 60.0f) { Math_StepToF(&this->unk_B10[5], 200.0f, 150.0f); - var_a0 = Math_StepToS(&this->unk_AE8, 0xFA0, 0x15E); + var_a0 = Math_StepToS(&this->actionVar2, 0xFA0, 0x15E); } - this->actor.shape.rot.y += this->unk_AE8; + this->actor.shape.rot.y += this->actionVar2; this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = 0; this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = 0; this->unk_ABC += this->unk_B10[5]; @@ -17933,9 +17934,9 @@ void Player_Action_91(Player* this, PlayState* play) { } } } - } else if (this->unk_AE7 == 0) { + } else if (this->actionVar1 == 0) { Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT); - this->unk_AE7 = 1; + this->actionVar1 = 1; } } @@ -18030,15 +18031,15 @@ void Player_Action_93(Player* this, PlayState* play) { return; } - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { this->unk_ABC += this->unk_B48; if (this->unk_ABC < -1000.0f) { this->unk_ABC = -1000.0f; - this->unk_AE7 = 1; + this->actionVar1 = 1; this->unk_B48 = 0.0f; } func_80856074(play, this); - } else if (this->unk_AE7 == 1) { + } else if (this->actionVar1 == 1) { this->unk_B48 += -22.0f; if (this->unk_B48 < -170.0f) { this->unk_B48 = -170.0f; @@ -18046,7 +18047,7 @@ void Player_Action_93(Player* this, PlayState* play) { this->unk_ABC += this->unk_B48; if (this->unk_ABC < -3900.0f) { this->unk_ABC = -3900.0f; - this->unk_AE7 = 2; + this->actionVar1 = 2; this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); this->actor.scale.y = 0.01f; this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y; @@ -18066,22 +18067,22 @@ void Player_Action_93(Player* this, PlayState* play) { } func_80856074(play, this); - } else if (this->unk_AE7 == 2) { + } else if (this->actionVar1 == 2) { if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { if (func_80856000(play, this)) { - this->unk_AE8 = 0; + this->actionVar2 = 0; } else { - this->unk_AE7 = 3; - if (this->unk_AE8 >= 10) { + this->actionVar1 = 3; + if (this->actionVar2 >= 10) { this->unk_B48 = 2700.0f; } else { this->unk_B48 = 1450.0f; } func_8082E1F0(this, NA_SE_PL_DEKUNUTS_OUT_GRD); } - } else if (this->unk_AE8 < 15) { - this->unk_AE8++; - if (this->unk_AE8 == 10) { + } else if (this->actionVar2 < 15) { + this->actionVar2++; + if (this->actionVar2 == 10) { func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15); } } @@ -18093,7 +18094,7 @@ void Player_Action_93(Player* this, PlayState* play) { if (temp_fv0_2 >= 0.0f) { f32 speed; - sp38 = (this->unk_AE8 >= 10); + sp38 = (this->actionVar2 >= 10); var_v1 = -1; speed = this->unk_B48 * this->actor.scale.y; if (this->actor.floorBgId != BGCHECK_SCENE) { @@ -18120,8 +18121,8 @@ void Player_Action_93(Player* this, PlayState* play) { this->stateFlags3 |= PLAYER_STATE3_40000; } - this->unk_AE7 = var_v1; - this->unk_AE8 = 9999; + this->actionVar1 = var_v1; + this->actionVar2 = 9999; Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); } else if (this->unk_ABC < 0.0f) { func_80856074(play, this); @@ -18232,7 +18233,7 @@ void Player_Action_94(Player* this, PlayState* play) { func_80833AA0(this, play); } else if (this->stateFlags3 & PLAYER_STATE3_200) { if (this->actor.velocity.y < 0.0f) { - if (this->unk_AE7 < 0) { + if (this->actionVar1 < 0) { func_80833AA0(this, play); } else { PlayerAnimation_Update(play, &this->skelAnime); @@ -18282,14 +18283,14 @@ void Player_Action_94(Player* this, PlayState* play) { func_8085687C(this); - if (this->unk_AE8 != 0) { - this->unk_AE8--; + if (this->actionVar2 != 0) { + this->actionVar2--; } - temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); + temp_fv1 = D_8085D958[this->actionVar1] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); PlayerAnimation_Update(play, &this->skelAnime); - if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) { + if ((this->actionVar2 != 0) && (temp_fv1 > 300.0f)) { sp76 = 0x1770; if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) { func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish); @@ -18306,7 +18307,7 @@ void Player_Action_94(Player* this, PlayState* play) { func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.6f, 1.0f, 0.8f, 17); } } - } else if ((this->unk_AE8 == 0) || (temp_fv1 < 0.0f)) { + } else if ((this->actionVar2 == 0) || (temp_fv1 < 0.0f)) { sp76 = 0; func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish); } else { @@ -18445,10 +18446,10 @@ void func_80857640(Player* this, f32 arg1, s32 arg2) { func_80834CD0(this, arg1, NA_SE_VO_LI_SWORD_N); Player_PlaySfx(this, NA_SE_PL_GORON_BALLJUMP); Player_StopHorizontalMovement(this); - if (this->unk_AE8 < arg2) { - this->unk_AE8 = arg2; + if (this->actionVar2 < arg2) { + this->actionVar2 = arg2; } - this->unk_AE7 = 1; + this->actionVar1 = 1; this->unk_B48 = 1.0f; } @@ -18457,7 +18458,7 @@ void func_808576BC(PlayState* play, Player* this) { (this->actor.velocity.x * Math_SinS(this->currentYaw))) * 800.0f; - var_v0 -= this->unk_AE8; + var_v0 -= this->actionVar2; var_v0 = ABS_ALT(var_v0); if (var_v0 <= 0x7D0) { @@ -18476,7 +18477,7 @@ void func_808576BC(PlayState* play, Player* this) { } void func_808577E0(Player* this) { - f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f; + f32 temp_fa1 = ABS_ALT(this->actionVar2) * 0.00004f; if (this->unk_ABC < temp_fa1) { this->unk_B48 += 0.08f; @@ -18497,7 +18498,7 @@ void func_808577E0(Player* this) { s32 func_80857950(PlayState* play, Player* this) { if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || - ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) { + ((this->actionVar1 == 3) && (this->actor.velocity.y < 0.0f))) { Player_SetAction(play, this, Player_Action_4, 1); Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f, @@ -18515,9 +18516,9 @@ s32 func_80857A44(PlayState* play, Player* this) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800; - this->unk_AE7 = 4; + this->actionVar1 = 4; this->actor.shape.shadowScale = 30.0f; - this->unk_AE8 = this->linearVelocity * 500.0f; + this->actionVar2 = this->linearVelocity * 500.0f; this->unk_B08 = this->linearVelocity; this->unk_B0C = 0.0f; this->actor.home.rot.y = this->currentYaw; @@ -18533,17 +18534,17 @@ void func_80857AEC(PlayState* play, Player* this) { this->unk_B0C += this->unk_B08 * 0.05f; if (this->unk_B86[1] == 0) { - if (this->unk_AE7 == 1) { - this->unk_AE7 = 2; + if (this->actionVar1 == 1) { + this->actionVar1 = 2; Player_RequestQuakeAndRumble(play, this, NA_SE_PL_GORON_PUNCH); play->actorCtx.unk2 = 4; EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f); - this->unk_AE8 = 0; + this->actionVar2 = 0; this->unk_B08 = 0.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } else { - this->unk_AE7 = 4; + this->actionVar1 = 4; } } @@ -18557,7 +18558,7 @@ void Player_Action_96(Player* this, PlayState* play) { return; } - if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) { + if ((this->actionVar1 == 0) && !func_80857A44(play, this)) { return; } @@ -18580,7 +18581,7 @@ void Player_Action_96(Player* this, PlayState* play) { func_80834CD0(this, 10.0f, 0); if (this->unk_B86[1] != 0) { this->unk_B86[1] = 0; - this->unk_AE7 = 3; + this->actionVar1 = 3; } } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) { s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000); @@ -18613,17 +18614,17 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] != 0) { speedTarget = 18.0f; - Math_StepToC(&this->unk_AE7, 4, 1); + Math_StepToC(&this->actionVar1, 4, 1); if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (gSaveContext.save.saveInfo.playerData.magic == 0) || - ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) { + ((this->actionVar1 == 4) && (this->unk_B08 < 12.0f)))) { if (Math_StepToS(&this->unk_B86[1], 0, 1)) { this->stateFlags3 &= ~PLAYER_STATE3_80000; Magic_Reset(play); Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED); } - this->unk_AE7 = 4; + this->actionVar1 = 4; } else if (this->unk_B86[1] < 7) { if (!(this->stateFlags3 & PLAYER_STATE3_80000)) { this->unk_3D0.unk_00 = 2; @@ -18637,9 +18638,9 @@ void Player_Action_96(Player* this, PlayState* play) { Math_AsymStepToF(&this->unk_B10[0], (this->unk_B8A != 0) ? 1.0f : 0.0f, 0.8f, 0.05f); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_80857AEC(play, this); - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { if (this->unk_B8A == 0) { - this->unk_AE7 = 4; + this->actionVar1 = 4; } else { this->unk_B8A--; this->unk_ABC = 0.0f; @@ -18670,7 +18671,7 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] == 0) { this->unk_B0C = 0.0f; - if (this->unk_AE7 >= 0x36) { + if (this->actionVar1 >= 0x36) { Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA); this->unk_B08 = 18.0f; this->unk_B86[1] = 1; @@ -18707,12 +18708,12 @@ void Player_Action_96(Player* this, PlayState* play) { spCC = speedTarget; spCA = yawTarget; - if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) { + if (func_8083A4A4(this, &spCC, &spCA, (this->actionVar1 >= 5) ? 0.0f : 1.0f)) { if (this->unk_B86[1] == 0) { - this->unk_AE7 = 4; + this->actionVar1 = 4; } - if (this->unk_AE7 == 4) { + if (this->actionVar1 == 4) { spDC = -0xFA0; } } else { @@ -18724,7 +18725,7 @@ void Player_Action_96(Player* this, PlayState* play) { (sPlayerFloorType == FLOOR_TYPE_5)) && (spC0 >= 0x7D0)) ? 0.08f - : this->unk_AE8 * 0.0003f; + : this->actionVar2 * 0.0003f; f32 sp80 = (Math_SinS(this->floorPitch) * 8.0f) + 0.6f; s16 var_a3; s16 sp7C; @@ -18734,11 +18735,11 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] == 0) { if ((gSaveContext.magicState == MAGIC_STATE_IDLE) && - (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) { - this->unk_AE7++; + (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->actionVar2 >= 0x36B0)) { + this->actionVar1++; Actor_PlaySfx_FlaggedCentered1(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); } else { - this->unk_AE7 = 4; + this->actionVar1 = 4; } } @@ -18780,9 +18781,9 @@ void Player_Action_96(Player* this, PlayState* play) { if (this->unk_B86[1] != 0) { if ((ABS_ALT(sp8E) + ABS_ALT(this->floorPitch)) > 0x3A98) { this->unk_B86[1] = 0; - this->unk_AE7 = 4; + this->actionVar1 = 4; this->unk_B8E = 0x14; - this->unk_AE8 = 0; + this->actionVar2 = 0; this->stateFlags3 &= ~PLAYER_STATE3_80000; Magic_Reset(play); } @@ -18813,7 +18814,7 @@ void Player_Action_96(Player* this, PlayState* play) { this->unk_B28 = Math_Atan2S_XY(spA0, spA4); } - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { s32 temp_v0_10 = this->unk_B86[0]; s32 temp_ft3_2 = sp54 * 800.0f; @@ -18840,7 +18841,7 @@ void Player_Action_96(Player* this, PlayState* play) { func_808576BC(play, this); - if (ABS_ALT(this->unk_AE8) > 0xFA0) { + if (ABS_ALT(this->actionVar2) > 0xFA0) { this->stateFlags2 |= PLAYER_STATE2_8; } @@ -18870,7 +18871,7 @@ void Player_Action_96(Player* this, PlayState* play) { this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f); } else { this->unk_B48 += this->actor.velocity.y * 0.005f; - if (this->unk_AE7 == 1) { + if (this->actionVar1 == 1) { if (this->actor.velocity.y > 0.0f) { if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) { this->actor.velocity.y = -this->actor.gravity; @@ -18893,21 +18894,21 @@ void Player_Action_96(Player* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0); - Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); + Math_AsymStepToS(&this->actionVar2, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { spD8 = this->actor.shape.rot.x; - this->actor.shape.rot.x += this->unk_AE8; + this->actor.shape.rot.x += this->actionVar2; - Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8)); - if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) { + Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->actionVar2)); + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->actionVar2 + spD8) * spD8) <= 0)) { spE0 = Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL); Audio_PlaySfx_AtPosWithSyncedFreqAndVolume(&this->actor.projectedPos, spE0, this->unk_B08); } } - if (this->unk_AE7 == 2) { + if (this->actionVar1 == 2) { Player_SetCylinderForAttack(this, DMG_GORON_POUND, 4, 60); Actor_SetPlayerImpact(play, PLAYER_IMPACT_GORON_GROUND_POUND, 2, 100.0f, &this->actor.world.pos); } else if (this->unk_B86[1] != 0) { @@ -19124,7 +19125,7 @@ AnimSfxEntry D_8085DA90[] = { void Player_CsAnim_12(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_80858D48(play, this, anim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) { @@ -19154,7 +19155,7 @@ void Player_CsAnim_17(PlayState* play, Player* this, void* anim) { void Player_CsAnim_13(PlayState* play, Player* this, void* anim) { if (PlayerAnimation_Update(play, &this->skelAnime)) { func_8082EB18(play, this, anim); - this->unk_AE8 = 1; + this->actionVar2 = 1; } } @@ -19184,9 +19185,9 @@ void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) { void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { this->actor.gravity = 0.0f; - if (this->unk_AE7 == 0) { + if (this->actionVar1 == 0) { if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) { - this->unk_AE7 = 1; + this->actionVar1 = 1; } else { func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y)); Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); @@ -19194,7 +19195,7 @@ void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { } } else { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE7 == 1) { + if (this->actionVar1 == 1) { func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); } else { Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait); @@ -19598,7 +19599,7 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; } } else if (R_PLAY_FILL_SCREEN_ON < 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; @@ -19609,8 +19610,8 @@ void Player_CsAction_6(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { sp24 = 2.5f; func_808411D4(play, this, &sp24, 0xA); - this->unk_AE8++; - if (this->unk_AE8 >= 0x15) { + this->actionVar2++; + if (this->actionVar2 >= 0x15) { this->csMode = PLAYER_CSMODE_10; } } @@ -19633,10 +19634,10 @@ void Player_CsAction_9(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_10(PlayState* play, Player* this, CsCmdActorCue* cue) { func_80859248(this); - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_AnimationPlayLoop(play, this, func_8082EF54(this)); - this->unk_AE8 = 0; + this->actionVar2 = 0; } func_8082FC60(this); } else { @@ -19744,7 +19745,7 @@ void Player_CsAction_19(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_20(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_CsAction_End(play, this, cue); - } else if (this->unk_AE8 == 0) { + } else if (this->actionVar2 == 0) { Item_Give(play, ITEM_SWORD_RAZOR); func_80841358(play, this, false); } else { @@ -19841,7 +19842,7 @@ void Player_CsAction_30(PlayState* play, Player* this, CsCmdActorCue* cue) { func_808525C4(play, this); return; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { func_8085255C(play, this); } } @@ -19876,12 +19877,12 @@ void Player_CsAction_33(PlayState* play, Player* this, CsCmdActorCue* cue) { } void Player_CsAction_34(PlayState* play, Player* this, CsCmdActorCue* cue) { - if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) && + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actionVar2 == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB); - this->unk_AE8 = 1; + this->actionVar2 = 1; } - if (this->unk_AE8 != 0) { + if (this->actionVar2 != 0) { func_80832F24(this); } } @@ -19894,7 +19895,7 @@ void Player_CsAction_35(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_36(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8++ >= 0x15) { + if (this->actionVar2++ >= 0x15) { PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -16.0f); } @@ -19933,18 +19934,18 @@ void Player_CsAction_40(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_41(PlayState* play, Player* this, CsCmdActorCue* cue) { if (PlayerAnimation_Update(play, &this->skelAnime)) { - if (this->unk_AE8 == 0) { + if (this->actionVar2 == 0) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) || (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) { this->getItemDrawIdPlusOne = GID_NONE + 1; - this->unk_AE8 = -1; + this->actionVar2 = -1; } else { this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1; } - } else if (this->unk_AE8 < 0) { + } else if (this->actionVar2 < 0) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - this->unk_AE8 = 1; + this->actionVar2 = 1; } else { Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f); } @@ -19974,7 +19975,7 @@ void Player_CsAction_43(PlayState* play, Player* this, CsCmdActorCue* cue) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; this->actor.update = func_8012301C; this->actor.draw = NULL; - this->unk_AE7 = 0; + this->actionVar1 = 0; } } else if (R_PLAY_FILL_SCREEN_ON < 0) { R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; @@ -20124,8 +20125,8 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8085AD5C(play, this, ABS_ALT(csMode)); func_8085AC9C(play, this, playerCue, &sPlayerCsModeInitFuncs[ABS_ALT(csMode)]); - this->unk_AE8 = 0; - this->unk_AE7 = 0; + this->actionVar2 = 0; + this->actionVar1 = 0; this->cueId = playerCue->id; } @@ -20264,11 +20265,11 @@ void Player_TalkWithPlayer(PlayState* play, Actor* actor) { } if (player->stateFlags1 & PLAYER_STATE1_800000) { - s32 sp24 = player->unk_AE8; + s32 sp24 = player->actionVar2; func_8082DE14(play, player); func_80837B60(play, player); - player->unk_AE8 = sp24; + player->actionVar2 = sp24; } else { if (func_801242B4(player)) { func_80832558(play, player, func_80837B60); diff --git a/tools/namefixer.py b/tools/namefixer.py index 86db40f18..7fb2fe912 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1049,6 +1049,8 @@ wordReplace = { "player->unk_AA0": "player->closestSecretDistSq", "player->unk_AAC": "player->headLimbRot", "player->unk_AB2": "player->upperLimbRot", + "player->unk_AE7": "player->actionVar1", + "player->unk_AE8": "player->actionVar2", "player->unk_B2A": "player->getItemDrawIdPlusOne", "player->getItemDrawId": "player->getItemDrawIdPlusOne", "player->unk_B68": "player->fallStartHeight", From 775501b28bcac057c9054cba70e28ecbb8f48d5e Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 27 Sep 2023 07:24:12 +1000 Subject: [PATCH 31/74] Animation Cleanup: En_G* (#1395) * wip * more cleanup * more cleanup * one more thing * one more default case * missed brackets * PR Review --- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 65 +++-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 5 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 11 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 41 +-- src/overlays/actors/ovl_En_Ge3/z_en_ge3.c | 6 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 151 ++++++---- src/overlays/actors/ovl_En_Geg/z_en_geg.h | 7 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 192 ++++++++----- src/overlays/actors/ovl_En_Gg/z_en_gg.h | 11 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 110 ++++--- src/overlays/actors/ovl_En_Gg2/z_en_gg2.h | 7 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 147 +++++----- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 26 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.h | 5 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 271 +++++++++++------- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 9 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 211 ++++++++------ src/overlays/actors/ovl_En_Gm/z_en_gm.h | 9 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 86 +++--- src/overlays/actors/ovl_En_Go/z_en_go.h | 4 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 8 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 24 +- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 41 ++- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 69 +++-- .../ovl_En_Guard_Nuts/z_en_guard_nuts.h | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 35 ++- .../actors/ovl_En_Guruguru/z_en_guruguru.h | 7 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 29 +- src/overlays/actors/ovl_En_Jg/z_en_jg.h | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 6 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 18 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 21 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 2 +- tools/disasm/functions.txt | 10 +- tools/disasm/variables.txt | 2 +- 36 files changed, 976 insertions(+), 676 deletions(-) diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 9b96771be..36e18e350 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -5,7 +5,6 @@ */ #include "z_en_gb2.h" -#include "objects/object_ps/object_ps.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -163,7 +162,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14E4; } - if (gSaveContext.save.saveInfo.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 0x30) { return 0x14D2; } @@ -171,7 +170,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14D3; case 0x14E4: - if (gSaveContext.save.saveInfo.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 0x30) { return 0x14D2; } @@ -193,8 +192,10 @@ u16 func_80B0F7FC(EnGb2* this) { case 0x14D9: return 0x14DA; + + default: + return 0; } - return 0; } u16 func_80B0F8F8(EnGb2* this) { @@ -213,8 +214,10 @@ u16 func_80B0F8F8(EnGb2* this) { case 0x14E1: return 0x14E2; + + default: + return 0; } - return 0; } u16 func_80B0F97C(EnGb2* this) { @@ -236,8 +239,10 @@ u16 func_80B0F97C(EnGb2* this) { case 0x14FA: this->unk_26C |= 2; return 0x14FB; + + default: + return 0; } - return 0; } void func_80B0FA04(EnGb2* this) { @@ -262,17 +267,19 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_40)) { this->unk_26E = 0x14EB; return false; + } else { + this->unk_26E = 0x14EE; + return true; } - this->unk_26E = 0x14EE; - return true; - } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) { - this->unk_26E = 0x14EF; - return false; - } else { - this->unk_26E = 0x14F4; - return true; + default: + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) { + this->unk_26E = 0x14EF; + return false; + } else { + this->unk_26E = 0x14F4; + return true; + } } } @@ -314,12 +321,14 @@ u16 func_80B0FB24(EnGb2* this) { case 0x14F2: this->unk_26C |= 2; return 0x14F3; + + default: + return 0; } - return 0; } void func_80B0FBF0(EnGb2* this, PlayState* play) { - Vec3f sp90[4] = { + Vec3f sp90[] = { { 120.0f, 0.0f, 800.0f }, { -120.0f, 0.0f, 750.0f }, { 60.0f, 0.0f, 750.0f }, @@ -425,6 +434,9 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } else if (this->unk_26E == 0x14DA) { switch (play->msgCtx.choiceIndex) { @@ -443,6 +455,9 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } } @@ -505,7 +520,7 @@ void func_80B10344(EnGb2* this, PlayState* play) { } } - if (gSaveContext.save.saveInfo.playerData.health < 49) { + if (gSaveContext.save.saveInfo.playerData.health <= 0x30) { gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; SET_EVENTINF(EVENTINF_46); SET_EVENTINF(EVENTINF_45); @@ -596,6 +611,9 @@ void func_80B10634(EnGb2* this, PlayState* play) { this->unk_26C |= 2; Message_StartTextbox(play, this->unk_26E, &this->actor); break; + + default: + break; } } } @@ -673,6 +691,9 @@ void func_80B10A48(EnGb2* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actionFunc = func_80B111AC; break; + + default: + break; } } } @@ -877,7 +898,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { this->actor.room = -1; Actor_ProcessInitChain(&this->actor, sInitChain); SkelAnime_InitFlex(play, &this->skelAnime, &object_ps_Skel_007230, &object_ps_Anim_00049C, this->jointTable, - this->morphTable, 12); + this->morphTable, OBJECT_PS_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); @@ -981,11 +1002,11 @@ s32 EnGb2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p Gfx** gfx) { EnGb2* this = THIS; - if (limbIndex == 7) { + if (limbIndex == OBJECT_PS_LIMB_07) { Matrix_RotateYS(this->unk_270.y, MTXMODE_APPLY); } - if (limbIndex == 1) { + if (limbIndex == OBJECT_PS_LIMB_01) { *dList = NULL; } @@ -996,7 +1017,7 @@ void EnGb2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnGb2* this = THIS; Vec3f sp18 = { 2400.0f, 0.0f, 0.0f }; - if (limbIndex == 7) { + if (limbIndex == OBJECT_PS_LIMB_07) { Matrix_MultVec3f(&sp18, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h index a257ab3d4..fa500f15c 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -2,6 +2,7 @@ #define Z_EN_GB2_H #include "global.h" +#include "objects/object_ps/object_ps.h" struct EnGb2; @@ -19,8 +20,8 @@ typedef enum { typedef struct EnGb2 { /* 0x0000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[12]; - /* 0x1D0 */ Vec3s morphTable[12]; + /* 0x188 */ Vec3s jointTable[OBJECT_PS_LIMB_MAX]; + /* 0x1D0 */ Vec3s morphTable[OBJECT_PS_LIMB_MAX]; /* 0x218 */ EnGb2ActionFunc actionFunc; /* 0x21C */ ColliderCylinder collider; /* 0x268 */ Actor* unk_268; diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 25556fdf7..c83305a8c 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -69,10 +69,11 @@ typedef enum { /* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING, /* 7 */ GERUDO_WHITE_ANIM_SALUTE, /* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT, - /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY + /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY, + /* 10 */ GERUDO_WHITE_ANIM_MAX } GerudoWhiteAnimation; -void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames); void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play); void EnGe1_Wait(EnGe1* this, PlayState* play); void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play); @@ -127,8 +128,8 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) { - static AnimationHeader* sAnimations[] = { +void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 animMode, f32 morphFrames) { + static AnimationHeader* sAnimations[GERUDO_WHITE_ANIM_MAX] = { &gGerudoWhiteArmsFoldedAnim, // GERUDO_WHITE_ANIM_ARMS_FOLDED, &gGerudoWhiteUnfoldingArmsAnim, // GERUDO_WHITE_ANIM_UNFOLDING_ARMS &gGerudoWhiteStandingHeadBowedAnim, // GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED, @@ -154,7 +155,7 @@ void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames) { default: Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); break; } diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index eeacf00a5..45d304aaf 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -119,7 +119,7 @@ void EnGe2_Init(Actor* thisx, PlayState* play) { switch (GERUDO_PURPLE_GET_TYPE(&this->picto.actor)) { case GERUDO_PURPLE_TYPE_BOAT_SENTRY: Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, 0.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, 0.0f); this->actionFunc = EnGe2_GuardStationary; this->picto.actor.speed = 0.0f; this->picto.actor.uncullZoneForward = 4000.0f; @@ -343,18 +343,18 @@ s32 EnGe2_FollowPathWithoutGravity(EnGe2* this) { /* Action and helper functions */ void EnGe2_SpawnEffects(EnGe2* this, PlayState* play) { - static Vec3f effectVelocity = { 0.0f, -0.05f, 0.0f }; - static Vec3f effectAccel = { 0.0f, -0.025f, 0.0f }; - static Color_RGBA8 effectPrimColor = { 255, 255, 255, 0 }; - static Color_RGBA8 effectEnvColor = { 255, 150, 0, 0 }; + static Vec3f sEffectVelocity = { 0.0f, -0.05f, 0.0f }; + static Vec3f sEffectAccel = { 0.0f, -0.025f, 0.0f }; + static Color_RGBA8 sEffectPrimColor = { 255, 255, 255, 0 }; + static Color_RGBA8 sEffectEnvColor = { 255, 150, 0, 0 }; s16 effectAngle = play->state.frames * 0x2800; Vec3f effectPos; effectPos.x = (Math_CosS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.x; effectPos.y = this->picto.actor.focus.pos.y + 10.0f; effectPos.z = (Math_SinS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.z; - EffectSsKirakira_SpawnDispersed(play, &effectPos, &effectVelocity, &effectAccel, &effectPrimColor, &effectEnvColor, - 1000, 16); + EffectSsKirakira_SpawnDispersed(play, &effectPos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, + &sEffectEnvColor, 1000, 16); } void EnGe2_Scream(EnGe2* this) { @@ -396,7 +396,7 @@ void EnGe2_SetupCapturePlayer(EnGe2* this) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_CapturePlayer; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } void EnGe2_Charge(EnGe2* this, PlayState* play) { @@ -429,7 +429,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) { if (this->picto.actor.shape.rot.y == this->picto.actor.yawTowardsPlayer) { Animation_Change(&this->skelAnime, &gGerudoPurpleChargingAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleChargingAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleChargingAnim), ANIMMODE_LOOP, -8.0f); this->timer = 50; this->picto.actor.speed = 4.0f; this->actionFunc = EnGe2_Charge; @@ -438,7 +438,7 @@ void EnGe2_SetupCharge(EnGe2* this, PlayState* play) { void EnGe2_SetupLookAround(EnGe2* this) { Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); this->timer = 60; this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_LookAround; @@ -483,13 +483,13 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); this->stateFlags |= GERUDO_PURPLE_STATE_CAPTURING; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_08)) { this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_TurnToPlayerFast; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } else if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos, this->picto.actor.shape.rot.y, 0x1800, visionRange, this->verticalDetectRange)) { if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) { @@ -499,7 +499,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { Message_StartTextbox(play, 0x1194, &this->picto.actor); this->actionFunc = EnGe2_SetupCharge; Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); } } else if (this->collider.base.acFlags & AC_HIT) { if ((this->collider.info.acHitInfo != NULL) && @@ -510,7 +510,7 @@ void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) { this->stateFlags |= GERUDO_PURPLE_STATE_STUNNED; } else { Animation_Change(&this->skelAnime, &gGerudoPurpleFallingToGroundAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), 2, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), ANIMMODE_ONCE, -8.0f); this->timer = 200; this->picto.actor.speed = 0.0f; this->actionFunc = EnGe2_KnockedOut; @@ -543,7 +543,7 @@ void EnGe2_LookAround(EnGe2* this, PlayState* play) { } else { this->actionFunc = EnGe2_Walk; Animation_Change(&this->skelAnime, &gGerudoPurpleWalkingAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), ANIMMODE_LOOP, -8.0f); this->headRot.y = 0; this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED; } @@ -602,13 +602,14 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { switch (cueId) { case ENGE2_CUEID_BEEHIVE_PATROL: Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f); + Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), ANIMMODE_LOOP, -8.0f); EnGe2_GetNextPath(this, play); break; case ENGE2_CUEID_BEEHIVE_RUN_AWAY: Animation_Change(&this->skelAnime, &gGerudoPurpleRunningAwayCutsceneAnim, 1.0f, 0.0f, - Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), 0, -5.0f); + Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), ANIMMODE_LOOP, + -5.0f); this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); break; @@ -617,11 +618,13 @@ void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) { break; case ENGE2_CUEID_GBT_ENTR_STAND_STILL: - Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, 2, 0.0f); + Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, + ANIMMODE_ONCE, 0.0f); break; case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY: - Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, 2, 0.0f); + Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, + ANIMMODE_ONCE, 0.0f); EnGe2_SetupBlownAwayPath(this, play); this->stateFlags |= GERUDO_PURPLE_STATE_DISABLE_MOVEMENT; this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f); diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c index e55d0746e..21f207e7c 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -15,7 +15,7 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play); void EnGe3_Update(Actor* thisx, PlayState* play); void EnGe3_Draw(Actor* thisx, PlayState* play); -void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames); void EnGe3_SetupPath(EnGe3* this, PlayState* play); void EnGe3_Idle(EnGe3* this, PlayState* play); void EnGe3_AveilsChamberIdle(EnGe3* this, PlayState* play); @@ -111,7 +111,7 @@ void EnGe3_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { +void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 animMode, f32 morphFrames) { static AnimationHeader* sAnimations[GERUDO_AVEIL_ANIM_MAX] = { &gGerudoRedStandAnim, // GERUDO_AVEIL_ANIM_STAND &gGerudoRedWalkAnim, // GERUDO_AVEIL_ANIM_WALK @@ -125,7 +125,7 @@ void EnGe3_ChangeAnim(EnGe3* this, s16 animIndex, u8 mode, f32 morphFrames) { }; Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); this->animIndex = animIndex; } diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index a01bfbd19..9183856ab 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -7,7 +7,6 @@ #include "z_en_geg.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_taisou/object_taisou.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -126,68 +125,112 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ ENGEG_ANIM_NONE = -1, + /* 0x00 */ ENGEG_ANIM_0, + /* 0x01 */ ENGEG_ANIM_1, + /* 0x02 */ ENGEG_ANIM_2, + /* 0x03 */ ENGEG_ANIM_3, + /* 0x04 */ ENGEG_ANIM_4, + /* 0x05 */ ENGEG_ANIM_5, + /* 0x06 */ ENGEG_ANIM_6, + /* 0x07 */ ENGEG_ANIM_7, + /* 0x08 */ ENGEG_ANIM_8, + /* 0x09 */ ENGEG_ANIM_9, + /* 0x0A */ ENGEG_ANIM_10, + /* 0x0B */ ENGEG_ANIM_11, + /* 0x0C */ ENGEG_ANIM_12, + /* 0x0D */ ENGEG_ANIM_13, + /* 0x0E */ ENGEG_ANIM_14, + /* 0x0F */ ENGEG_ANIM_15, + /* 0x10 */ ENGEG_ANIM_16, + /* 0x11 */ ENGEG_ANIM_17, + /* 0x12 */ ENGEG_ANIM_18, + /* 0x13 */ ENGEG_ANIM_19, + /* 0x14 */ ENGEG_ANIM_20, + /* 0x15 */ ENGEG_ANIM_MAX +} EnGegAnimation; + +static AnimationInfoS sAnimationInfo[ENGEG_ANIM_MAX] = { + { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_0 + { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_1 + { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_2 + { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_3 + { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_4 + { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_5 + { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_6 + { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGEG_ANIM_7 + { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_8 + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_9 + { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_10 + { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_11 + { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_12 + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_13 + { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_14 + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_15 + { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_16 + { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_17 + { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGEG_ANIM_18 + { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGEG_ANIM_19 + { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGEG_ANIM_20 }; u16 func_80BB16D0(EnGeg* this) { switch (this->unk_496) { case 0xD5E: return 0xD5F; + case 0xD5F: return 0xD60; + case 0xD60: return 0xD61; + case 0xD62: return 0xD63; + case 0xD64: return 0xD65; + case 0xD66: return 0xD67; + case 0xD67: return 0xD68; + case 0xD68: return 0xD69; + case 0xD6A: return 0xD6B; + case 0xD6B: return 0xD6C; + case 0xD6C: return 0xD6D; + case 0xD6E: return 0xD6F; + case 0xD70: return 0xD71; + case 0xD71: return 0xD72; + case 0xD73: return 0xD74; + case 0xD74: return 0xD75; + case 0xD89: return 0xD8A; + + default: + return 0; } - return 0; } void func_80BB178C(EnGeg* this, PlayState* play) { @@ -372,14 +415,14 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { return true; } -void func_80BB1FCC(EnGeg* this, PlayState* play) { +void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); SkelAnime_Update(&this->skelAnime); } -void func_80BB2020(EnGeg* this, PlayState* play) { +void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_4AC); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } s32 func_80BB2088(EnGeg* this, PlayState* play) { @@ -393,7 +436,7 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) { } if (Actor_IsFacingAndNearPlayer(&this->actor, 300.0f, 0x7FF8) && - ((this->unk_4AC == 5) || ((this->unk_4AC == 13) && (this->unk_496 == 0xD69)))) { + ((this->animIndex == ENGEG_ANIM_5) || ((this->animIndex == ENGEG_ANIM_13) && (this->unk_496 == 0xD69)))) { this->unk_230 |= 2; func_80BB1D64(this, play); } else { @@ -412,8 +455,8 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) { void func_80BB217C(EnGeg* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->unk_248)) { - this->unk_4AC = 5; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_5; + EnGeg_ChangeAnim(this, play); Actor_SetScale(&this->actor, 0.01f); this->unk_230 = 0; this->actor.shape.shadowScale = 20.0f; @@ -509,8 +552,8 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD66: this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { - this->unk_4AC = 19; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_19; + EnGeg_ChangeAnim(this, play); } this->unk_230 |= 0x20; this->actionFunc = func_80BB2944; @@ -527,11 +570,14 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD8B: this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { - this->unk_4AC = 4; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_4; + EnGeg_ChangeAnim(this, play); } this->actionFunc = func_80BB2E00; break; + + default: + break; } } else { if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { @@ -557,6 +603,9 @@ void func_80BB26EC(EnGeg* this, PlayState* play) { this->unk_230 &= ~0x10; this->actionFunc = func_80BB221C; return; + + default: + break; } this->unk_496 = func_80BB16D0(this); @@ -609,12 +658,12 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { void func_80BB2944(EnGeg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (this->unk_4AC == 19) { - if (curFrame == lastFrame) { - this->unk_4AC = 6; - func_80BB2020(this, play); + if (this->animIndex == ENGEG_ANIM_19) { + if (curFrame == endFrame) { + this->animIndex = ENGEG_ANIM_6; + EnGeg_ChangeAnim(this, play); } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_496 == 0xD67) { @@ -666,8 +715,8 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { Message_ContinueTextbox(play, this->unk_496); this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); if (this->unk_248 >= 0) { - this->unk_4AC = 13; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_13; + EnGeg_ChangeAnim(this, play); } this->actionFunc = func_80BB27D4; } else { @@ -704,21 +753,21 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { } void func_80BB2E00(EnGeg* this, PlayState* play) { - s16 sp2E = this->skelAnime.curFrame; - s16 sp2C = Animation_GetLastFrame(sAnimationInfo[this->unk_4AC].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (this->unk_4AC == 2) { + if (this->animIndex == ENGEG_ANIM_2) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - if (sp2E == sp2C) { + if (curFrame == endFrame) { CutsceneManager_Stop(this->csId); - this->unk_4AC = 20; - func_80BB2020(this, play); + this->animIndex = ENGEG_ANIM_20; + EnGeg_ChangeAnim(this, play); this->actionFunc = func_80BB30B4; } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_STAND_IMT); } - } else if (this->unk_4AC == 4) { + } else if (this->animIndex == ENGEG_ANIM_4) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { this->unk_230 |= 1; this->actor.shape.yOffset = 14.0f; @@ -740,11 +789,11 @@ void func_80BB2F7C(EnGeg* this, PlayState* play) { if ((this->actor.xzDistToPlayer < 150.0f) && (fabsf(this->actor.playerHeightRel) < 10.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - this->unk_4AC = 2; + this->animIndex = ENGEG_ANIM_2; this->actor.speed = 0.0f; this->unk_230 &= ~1; this->actor.shape.yOffset = 0.0f; - func_80BB2020(this, play); + EnGeg_ChangeAnim(this, play); this->actionFunc = func_80BB2E00; } else { this->actor.speed = 5.0f; @@ -902,7 +951,7 @@ void EnGeg_Update(Actor* thisx, PlayState* play) { EnGeg* this = THIS; this->actionFunc(this, play); - func_80BB1FCC(this, play); + EnGeg_UpdateSkelAnime(this, play); func_80BB2088(this, play); func_80BB1C8C(this); SubS_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENGEG_FIDGET_TABLE_LEN); diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.h b/src/overlays/actors/ovl_En_Geg/z_en_geg.h index 522312fc2..980ada9fd 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h @@ -2,6 +2,7 @@ #define Z_EN_GEG_H #include "global.h" +#include "objects/object_oF1d_map/object_oF1d_map.h" struct EnGeg; @@ -23,8 +24,8 @@ typedef struct EnGeg { /* 0x242 */ s16 unk_242; /* 0x244 */ s16 unk_244; /* 0x248 */ s32 unk_248; - /* 0x24C */ Vec3s jointTable[18]; - /* 0x2B8 */ Vec3s morphTable[18]; + /* 0x24C */ Vec3s jointTable[GORON_LIMB_MAX]; + /* 0x2B8 */ Vec3s morphTable[GORON_LIMB_MAX]; /* 0x324 */ UNK_TYPE1 unk324[0x144]; /* 0x468 */ s16 unk_468; /* 0x46A */ s16 unk_46A; @@ -38,7 +39,7 @@ typedef struct EnGeg { /* 0x498 */ s16 csId; /* 0x49A */ s16 nextCsId; /* 0x49C */ s16 csIdList[8]; - /* 0x4AC */ s32 unk_4AC; + /* 0x4AC */ s32 animIndex; /* 0x4B0 */ s16 unk_4B0; /* 0x4B4 */ Vec3f unk_4B4; /* 0x4C0 */ Vec3f unk_4C0[2]; diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index ab1f8b539..1d59139a4 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -6,7 +6,6 @@ #include "z_en_gg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "objects/object_gg/object_gg.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) @@ -95,15 +94,44 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfo sAnimationInfo[] = { - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGG_ANIM_NONE = -1, + /* 0x00 */ ENGG_ANIM_0, + /* 0x01 */ ENGG_ANIM_1, + /* 0x02 */ ENGG_ANIM_2, + /* 0x03 */ ENGG_ANIM_3, + /* 0x04 */ ENGG_ANIM_4, + /* 0x05 */ ENGG_ANIM_5, + /* 0x06 */ ENGG_ANIM_6, + /* 0x07 */ ENGG_ANIM_7, + /* 0x08 */ ENGG_ANIM_8, + /* 0x09 */ ENGG_ANIM_9, + /* 0x0A */ ENGG_ANIM_10, + /* 0x0B */ ENGG_ANIM_11, + /* 0x0C */ ENGG_ANIM_12, + /* 0x0D */ ENGG_ANIM_13, + /* 0x0E */ ENGG_ANIM_14, + /* 0x0F */ ENGG_ANIM_15, + /* 0x10 */ ENGG_ANIM_MAX +} EnGgAnimation; + +static AnimationInfo sAnimationInfo[ENGG_ANIM_MAX] = { + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_0 + { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_1 + { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_2 + { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG_ANIM_3 + { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_4 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_5 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_6 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_7 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG_ANIM_8 + { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_9 + { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_10 + { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_11 + { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_12 + { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_13 + { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG_ANIM_14 + { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG_ANIM_15 }; void func_80B34F70(EnGg* this) { @@ -149,7 +177,7 @@ void func_80B35108(EnGg* this, PlayState* play) { } void func_80B351A4(EnGg* this) { - if ((this->unk_2E6 == 2) || (this->unk_2E6 == 3)) { + if ((this->animIndex == ENGG_ANIM_2) || (this->animIndex == ENGG_ANIM_3)) { this->unk_2E2 = 3; } else { s16 temp = this->unk_2E4 - 1; @@ -170,57 +198,57 @@ void func_80B351A4(EnGg* this) { void func_80B35250(EnGg* this) { this->unk_2E4 = 20; this->unk_2E2 = 0; - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); this->actionFunc = func_80B35450; } void func_80B352A4(EnGg* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E6].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp26 == lastFrame) { + if (curFrame == endFrame) { switch (this->actor.textId) { case 0xCE5: - this->unk_2E6 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + this->animIndex = ENGG_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_1); break; case 0xCE6: case 0xCEC: - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); break; case 0xCE8: - this->unk_2E6 = 2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + this->animIndex = ENGG_ANIM_2; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_2); break; case 0xCE9: - this->unk_2E6 = 3; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + this->animIndex = ENGG_ANIM_3; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_3); break; case 0xCED: case 0xCEE: - this->unk_2E6 = 4; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = ENGG_ANIM_4; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4); break; default: - this->unk_2E6 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + this->animIndex = ENGG_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_0); break; } SET_WEEKEVENTREG(WEEKEVENTREG_19_80); this->actionFunc = func_80B3556C; - } else if ((this->unk_2E6 == 0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) { - if (sp26 < (lastFrame - 1)) { + } else if ((this->animIndex == ENGG_ANIM_0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) { + if (curFrame < (endFrame - 1)) { this->skelAnime.playSpeed = 2.0f; } else { - this->unk_2E6 = 4; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + this->animIndex = ENGG_ANIM_4; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_4); } } } @@ -249,7 +277,7 @@ void func_80B35450(EnGg* this, PlayState* play) { void func_80B3556C(EnGg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - if (this->unk_2E6 == 4) { + if (this->animIndex == ENGG_ANIM_4) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->unk_308 = 0; @@ -275,47 +303,43 @@ void func_80B35634(EnGg* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->unk_2DA = 0; - this->unk_2E6 = 0; + this->csAnimIndex = ENGG_ANIM_0; + this->animIndex = ENGG_ANIM_0; break; case 2: - this->unk_2DA = 9; - this->unk_2E6 = 9; + this->csAnimIndex = ENGG_ANIM_9; + this->animIndex = ENGG_ANIM_9; break; case 3: - this->unk_2DA = 10; - this->unk_2E6 = 10; + this->csAnimIndex = ENGG_ANIM_10; + this->animIndex = ENGG_ANIM_10; break; case 4: - do { - this->unk_344.unk_30 = this->unk_2DA = 11; - } while (0); - this->unk_2E6 = 11; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_11; + this->animIndex = ENGG_ANIM_11; func_80B364D4(&this->unk_344, play); break; case 5: - do { - this->unk_344.unk_30 = this->unk_2DA = 12; - } while (0); - this->unk_2E6 = 12; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_12; + //! FAKE: + if (1) {} + this->animIndex = ENGG_ANIM_12; break; case 6: - do { - this->unk_344.unk_30 = this->unk_2DA = 13; - } while (0); - this->unk_2E6 = 13; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_13; + //! FAKE: + if (1) {} + this->animIndex = ENGG_ANIM_13; break; case 7: - do { - this->unk_344.unk_30 = this->unk_2DA = 14; - } while (0); - this->unk_2E6 = 14; + this->unk_344.animIndex = this->csAnimIndex = ENGG_ANIM_14; + this->animIndex = ENGG_ANIM_14; func_80B364D4(&this->unk_344, play); break; @@ -324,13 +348,13 @@ void func_80B35634(EnGg* this, PlayState* play) { return; default: - this->unk_2DA = 0; + this->csAnimIndex = ENGG_ANIM_0; break; } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2DA); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } - if (this->unk_2DA == 14) { + if (this->csAnimIndex == ENGG_ANIM_14) { func_80B358D8(this, play); } @@ -345,16 +369,22 @@ u16 func_80B357F0(EnGg* this) { switch (this->actor.textId) { case 0xCE5: return 0xCE6; + case 0xCE6: return 0xCE8; + case 0xCE8: return 0xCE9; + case 0xCE9: return 0xCEC; + case 0xCEC: return 0xCED; + + default: + return 0; } - return 0; } void func_80B3584C(EnGg* this) { @@ -366,12 +396,12 @@ void func_80B3584C(EnGg* this) { } void func_80B358D8(EnGg* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2DA].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation); - if ((this->unk_2E6 == 14) && (sp1E == lastFrame)) { - this->unk_2E6 = 15; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 15); + if ((this->animIndex == ENGG_ANIM_14) && (curFrame == endFrame)) { + this->animIndex = ENGG_ANIM_15; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG_ANIM_15); } } @@ -379,8 +409,8 @@ void func_80B35968(EnGg* this, PlayState* play) { if (this->unk_344.unk_34 != NULL) { this->unk_344.unk_34(&this->unk_344, play); } else { - if ((this->unk_2DA == 11) || (this->unk_2DA == 14)) { - this->unk_344.unk_30 = this->unk_2DA; + if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_14)) { + this->unk_344.animIndex = this->csAnimIndex; } func_80B363E8(&this->unk_344, play, &this->unk_320, &this->unk_32C, &this->unk_338); } @@ -433,7 +463,7 @@ void func_80B35B24(EnGgStruct* ptr, PlayState* play) { } void func_80B35B44(EnGgStruct* ptr, PlayState* play) { - if (ptr->unk_30 == 0xE) { + if (ptr->animIndex == ENGG_ANIM_14) { ptr->unk_40++; if (ptr->unk_40 > 0x46) { ptr->unk_48 = 1; @@ -455,13 +485,13 @@ void func_80B35B44(EnGgStruct* ptr, PlayState* play) { ptr->unk_44 = 0x37; } } - } else if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12)) { + } else if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12)) { ptr->unk_40++; if (ptr->unk_40 > 0x46) { ptr->unk_48 = 1; ptr->unk_40 = 0; } - } else if (ptr->unk_30 == 0xD) { + } else if (ptr->animIndex == ENGG_ANIM_13) { ptr->unk_48 = 0; ptr->unk_40++; if (ptr->unk_40 > 0x46) { @@ -496,7 +526,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { sp74 = ptr->unk_40 % temp; ptr->unk_40 = sp74; phi_s7 = 0x46; - } else if (ptr->unk_30 == 0xD) { + } else if (ptr->animIndex == ENGG_ANIM_13) { sp74 = ptr->unk_40; phi_s7 = 0x46; } else { @@ -519,6 +549,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { temp_f26 = ptr->unk_00.z + (ptr->unk_18.z * temp_f20) + (0.5f * ptr->unk_24.z * temp_f20 * temp_f20); temp_f20 = Rand_ZeroOne() * 0.003f; + //! FAKE: if (1) {} Matrix_Translate(temp_f22, temp_f24, temp_f26, MTXMODE_NEW); @@ -630,9 +661,9 @@ void func_80B363E8(EnGgStruct* ptr, PlayState* play, Vec3f* arg1, Vec3f* arg2, V ptr->unk_00.x += -4.0f; ptr->unk_0C.x += 4.0f; - if ((ptr->unk_30 == 11) || (ptr->unk_30 == 12) || (ptr->unk_30 == 13)) { + if ((ptr->animIndex == ENGG_ANIM_11) || (ptr->animIndex == ENGG_ANIM_12) || (ptr->animIndex == ENGG_ANIM_13)) { ptr->unk_38 = func_80B35C84; - } else if (ptr->unk_30 == 14) { + } else if (ptr->animIndex == ENGG_ANIM_14) { ptr->unk_38 = func_80B3610C; } } @@ -655,7 +686,7 @@ void EnGg_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GG_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -700,11 +731,13 @@ void EnGg_Update(Actor* thisx, PlayState* play) { } if ((play->csCtx.state == CS_STATE_IDLE) && - ((this->unk_2DA != 14) && (this->unk_2DA != 11) && (this->unk_2DA != 12) && (this->unk_2DA != 13))) { + ((this->csAnimIndex != ENGG_ANIM_14) && (this->csAnimIndex != ENGG_ANIM_11) && + (this->csAnimIndex != ENGG_ANIM_12) && (this->csAnimIndex != ENGG_ANIM_13))) { func_80B364D4(&this->unk_344, play); } - if (((this->unk_2DA == 14) || (this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) && + if (((this->csAnimIndex == ENGG_ANIM_14) || (this->csAnimIndex == ENGG_ANIM_11) || + (this->csAnimIndex == ENGG_ANIM_12) || (this->csAnimIndex == ENGG_ANIM_13)) && (this->unk_309 == 1)) { func_80B35968(this, play); } @@ -738,7 +771,7 @@ s32 EnGg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Gfx** gfx) { EnGg* this = THIS; - if (limbIndex == 2) { + if (limbIndex == OBJECT_GG_LIMB_02) { Matrix_RotateZS(this->unk_2E8, MTXMODE_APPLY); } return false; @@ -750,12 +783,13 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30 = { 0.0f, 0.0f, 0.0f }; Vec3f sp24 = { 0.0f, 0.0f, 0.0f }; - if (this->unk_2DA == 14) { + if (this->csAnimIndex == ENGG_ANIM_14) { sp30.y = 3.0f; sp30.z = -1.0f; sp24.y = -0.07f; this->unk_309 = 1; - } else if ((this->unk_2DA == 11) || (this->unk_2DA == 12) || (this->unk_2DA == 13)) { + } else if ((this->csAnimIndex == ENGG_ANIM_11) || (this->csAnimIndex == ENGG_ANIM_12) || + (this->csAnimIndex == ENGG_ANIM_13)) { sp30.x = 3.0f; sp24.x = 0.5f; this->unk_309 = 1; @@ -763,7 +797,7 @@ void EnGg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->unk_309 = 0; } - if (limbIndex == 4) { + if (limbIndex == OBJECT_GG_LIMB_04) { Matrix_MultVec3f(&D_80B36DF0, &this->unk_320); Matrix_Push(); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.h b/src/overlays/actors/ovl_En_Gg/z_en_gg.h index 802024897..436d5a4ab 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h @@ -2,6 +2,7 @@ #define Z_EN_GG_H #include "global.h" +#include "objects/object_gg/object_gg.h" struct EnGg; struct EnGgStruct; @@ -14,7 +15,7 @@ typedef struct EnGgStruct { /* 0x0C */ Vec3f unk_0C; /* 0x18 */ Vec3f unk_18; /* 0x24 */ Vec3f unk_24; - /* 0x30 */ u8 unk_30; + /* 0x30 */ u8 animIndex; /* 0x34 */ EnGgUnkFunc unk_34; /* 0x38 */ EnGgUnkFunc unk_38; /* 0x3C */ s32 unk_3C; @@ -30,16 +31,16 @@ typedef struct EnGg { /* 0x1D4 */ EnGgActionFunc actionFunc; /* 0x1D8 */ Vec3s unk_1D8; /* 0x1DE */ Vec3s unk_1DE; - /* 0x1E4 */ Vec3s jointTable[20]; - /* 0x25C */ Vec3s morphTable[20]; + /* 0x1E4 */ Vec3s jointTable[OBJECT_GG_LIMB_MAX]; + /* 0x25C */ Vec3s morphTable[OBJECT_GG_LIMB_MAX]; /* 0x2D4 */ UNK_TYPE1 unk_2D4[0x6]; - /* 0x2DA */ u8 unk_2DA; + /* 0x2DA */ u8 csAnimIndex; /* 0x2DB */ u8 cueId; /* 0x2DC */ s16 csId; /* 0x2DE */ UNK_TYPE1 unk2DE[4]; /* 0x2E2 */ s16 unk_2E2; /* 0x2E4 */ s16 unk_2E4; - /* 0x2E6 */ s16 unk_2E6; + /* 0x2E6 */ s16 animIndex; /* 0x2E8 */ s16 unk_2E8; /* 0x2EA */ UNK_TYPE1 unk2EA[0x1A]; /* 0x304 */ s16 unk_304; diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index abb80780d..e106c8f88 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -5,7 +5,6 @@ */ #include "z_en_gg2.h" -#include "objects/object_gg/object_gg.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_REACT_TO_LENS) @@ -39,15 +38,44 @@ ActorInit En_Gg2_InitVars = { (ActorFunc)EnGg2_Draw, }; -AnimationInfo D_80B3BF00[] = { - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, 2, -10.0f }, { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, 2, -10.0f }, - { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, 0, -10.0f }, - { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, 0, -10.0f }, { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGG2_ANIM_NONE = -1, + /* 0x00 */ ENGG2_ANIM_0, + /* 0x01 */ ENGG2_ANIM_1, + /* 0x02 */ ENGG2_ANIM_2, + /* 0x03 */ ENGG2_ANIM_3, + /* 0x04 */ ENGG2_ANIM_4, + /* 0x05 */ ENGG2_ANIM_5, + /* 0x06 */ ENGG2_ANIM_6, + /* 0x07 */ ENGG2_ANIM_7, + /* 0x08 */ ENGG2_ANIM_8, + /* 0x09 */ ENGG2_ANIM_9, + /* 0x0A */ ENGG2_ANIM_10, + /* 0x0B */ ENGG2_ANIM_11, + /* 0x0C */ ENGG2_ANIM_12, + /* 0x0D */ ENGG2_ANIM_13, + /* 0x0E */ ENGG2_ANIM_14, + /* 0x0F */ ENGG2_ANIM_15, + /* 0x10 */ ENGG2_ANIM_MAX +} EnGg2Animation; + +static AnimationInfo sAnimationInfo[ENGG2_ANIM_MAX] = { + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_0 + { &object_gg_Anim_00D528, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_1 + { &object_gg_Anim_00D174, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_2 + { &object_gg_Anim_00ECC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -10.0f }, // ENGG2_ANIM_3 + { &object_gg_Anim_00BAF0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_4 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_5 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_6 + { &object_gg_Anim_00AF40, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_7 + { &object_gg_Anim_00F578, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -10.0f }, // ENGG2_ANIM_8 + { &object_gg_Anim_0100C8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_9 + { &object_gg_Anim_00CDA0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_10 + { &object_gg_Anim_00B560, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_11 + { &object_gg_Anim_00A4B4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_12 + { &object_gg_Anim_00E86C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_13 + { &object_gg_Anim_00D99C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGG2_ANIM_14 + { &object_gg_Anim_00E2A4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGG2_ANIM_15 }; Color_RGBA8 D_80B3C080 = { 255, 255, 255, 255 }; @@ -116,38 +144,38 @@ void func_80B3ADD8(EnGg2* this) { void func_80B3AE60(EnGg2* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(D_80B3BF00[this->unk_2EE].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (curFrame == lastFrame) { - switch (this->unk_2EE) { - case 0: - this->unk_2EE = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 1); + if (curFrame == endFrame) { + switch (this->animIndex) { + case ENGG2_ANIM_0: + this->animIndex = ENGG2_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_1); this->actionFunc = func_80B3B0A0; break; - case 1: - case 8: - this->unk_2EE = 5; + case ENGG2_ANIM_1: + case ENGG2_ANIM_8: + this->animIndex = ENGG2_ANIM_5; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5); this->actionFunc = func_80B3B120; break; - case 5: - this->unk_2EE = 6; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + case ENGG2_ANIM_5: + this->animIndex = ENGG2_ANIM_6; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B21C; break; - case 6: - this->unk_2EE = 7; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 5); + case ENGG2_ANIM_6: + this->animIndex = ENGG2_ANIM_7; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_5); this->actionFunc = func_80B3B294; break; default: - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3AFB0; break; } @@ -338,7 +366,7 @@ f32 func_80B3B7E4(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { void func_80B3B8A4(EnGg2* this) { f32 sp1C; - if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) { + if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) { this->unk_2F2 += 0x62C; sp1C = 1100.0f; } else { @@ -368,7 +396,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GG_LIMB_MAX); this->path = SubS_GetPathByIndex(play, ENGG2_GET_PATH_INDEX(&this->actor), ENGG2_PATH_INDEX_NONE); this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; this->unk_2F0 = 0; @@ -384,15 +412,15 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); - this->unk_2EE = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3AFB0; } else if (play->sceneId == SCENE_17SETUGEN) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); - this->unk_2EE = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B05C; } else { Actor_Kill(&this->actor); @@ -401,8 +429,8 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); - this->unk_2EE = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); + this->animIndex = ENGG2_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGG2_ANIM_0); this->actionFunc = func_80B3B05C; } else { Actor_Kill(&this->actor); @@ -424,7 +452,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) { this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS; this->actor.flags |= ACTOR_FLAG_TARGETABLE; - if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) { + if ((this->animIndex == ENGG2_ANIM_5) && (this->animIndex == ENGG2_ANIM_7)) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; } } else { @@ -441,7 +469,7 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { func_80B3B8A4(this); Actor_TrackPlayer(play, &this->actor, &this->unk_1E0, &this->unk_1E6, this->actor.focus.pos); - if ((this->unk_2EE == 5) || (this->unk_2EE == 7)) { + if ((this->animIndex == ENGG2_ANIM_5) || (this->animIndex == ENGG2_ANIM_7)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG); if ((play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) && ((play->state.frames % 4) == 0)) { func_80B3B4B0(this, play); @@ -454,12 +482,12 @@ void EnGg2_Update(Actor* thisx, PlayState* play) { s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnGg2* this = THIS; - if ((this->unk_2EE != 5) && (this->unk_2EE != 7)) { - if (limbIndex == 1) { + if ((this->animIndex != ENGG2_ANIM_5) && (this->animIndex != ENGG2_ANIM_7)) { + if (limbIndex == OBJECT_GG_LIMB_01) { Matrix_RotateYS(this->unk_2F6, MTXMODE_APPLY); } - if (limbIndex == 2) { + if (limbIndex == OBJECT_GG_LIMB_02) { Matrix_RotateZS(this->unk_2F4, MTXMODE_APPLY); } } @@ -469,7 +497,7 @@ s32 func_80B3BD44(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s void func_80B3BDC0(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { EnGg2* this = THIS; - if (limbIndex == 4) { + if (limbIndex == OBJECT_GG_LIMB_04) { Matrix_MultVec3f(&D_80B3C0A0, &this->unk_304); } } diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h index 83b4bad42..dd68c20b1 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h @@ -2,6 +2,7 @@ #define Z_EN_GG2_H #include "global.h" +#include "objects/object_gg/object_gg.h" struct EnGg2; @@ -20,14 +21,14 @@ typedef struct EnGg2 { /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ Vec3s unk_1E0; /* 0x1E6 */ Vec3s unk_1E6; - /* 0x1EC */ Vec3s jointTable[20]; - /* 0x264 */ Vec3s morphTable[20]; + /* 0x1EC */ Vec3s jointTable[OBJECT_GG_LIMB_MAX]; + /* 0x264 */ Vec3s morphTable[OBJECT_GG_LIMB_MAX]; /* 0x2DC */ UNK_TYPE1 unk2DC[0x8]; /* 0x2E4 */ s16 csId; /* 0x2E6 */ UNK_TYPE1 unk2E6[4]; /* 0x2EA */ s16 unk_2EA; /* 0x2EC */ s16 unk_2EC; - /* 0x2EE */ s16 unk_2EE; + /* 0x2EE */ s16 animIndex; /* 0x2F0 */ u8 unk_2F0; /* 0x2F1 */ u8 unk_2F1; /* 0x2F2 */ s16 unk_2F2; diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c index 8d244c09c..d68e6902f 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -28,10 +28,45 @@ void EnGiant_PerformCutsceneActions(EnGiant* this, PlayState* play); #define GIANT_TYPE_IS_CLOCK_TOWER_FAILURE(type) \ (type >= GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE && type <= GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE) +/** + * Used as values for cueId. The UNKNOWN ones are never used in-game. + */ +typedef enum { + /* 0 */ GIANT_CUEID_NONE, + /* 1 */ GIANT_CUEID_IDLE, + /* 2 */ GIANT_CUEID_WALKING, + /* 3 */ GIANT_CUEID_LOOKING_UP, + /* 4 */ GIANT_CUEID_RAISING_ARMS, + /* 5 */ GIANT_CUEID_STRUGGLING, + /* 6 */ GIANT_CUEID_FALLING_OVER, + /* 7 */ GIANT_CUEID_IDLE_FADE_IN, + /* 8 */ GIANT_CUEID_TALKING, + /* 9 */ GIANT_CUEID_DONE_TALKING, + /* 10 */ GIANT_CUEID_TEACHING_OATH_TO_ORDER, + /* 11 */ GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER, + /* 12 */ GIANT_CUEID_UNKNOWN_12, + /* 13 */ GIANT_CUEID_UNKNOWN_13, + /* 14 */ GIANT_CUEID_UNKNOWN_14, + /* 15 */ GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER +} GiantCueId; + +ActorInit En_Giant_InitVars = { + ACTOR_EN_GIANT, + ACTORCAT_NPC, + FLAGS, + OBJECT_GIANT, + sizeof(EnGiant), + (ActorFunc)EnGiant_Init, + (ActorFunc)EnGiant_Destroy, + (ActorFunc)EnGiant_Update, + (ActorFunc)EnGiant_Draw, +}; + /** * These values are used to index into sAnimations to pick the appropriate animation. */ typedef enum { + /* -1 */ GIANT_ANIM_NONE = -1, /* 0 */ GIANT_ANIM_LOOK_UP_START, /* 1 */ GIANT_ANIM_LOOK_UP_LOOP, /* 2 */ GIANT_ANIM_FALLING_OVER, @@ -50,49 +85,26 @@ typedef enum { /* 15 */ GIANT_ANIM_MAX } GiantAnimation; -/** - * Used as values for cueId. The UNKNOWN ones are never used in-game. - */ -typedef enum { - /* 0 */ GIANT_CUE_ID_NONE, - /* 1 */ GIANT_CUE_ID_IDLE, - /* 2 */ GIANT_CUE_ID_WALKING, - /* 3 */ GIANT_CUE_ID_LOOKING_UP, - /* 4 */ GIANT_CUE_ID_RAISING_ARMS, - /* 5 */ GIANT_CUE_ID_STRUGGLING, - /* 6 */ GIANT_CUE_ID_FALLING_OVER, - /* 7 */ GIANT_CUE_ID_IDLE_FADE_IN, - /* 8 */ GIANT_CUE_ID_TALKING, - /* 9 */ GIANT_CUE_ID_DONE_TALKING, - /* 10 */ GIANT_CUE_ID_TEACHING_OATH_TO_ORDER, - /* 11 */ GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER, - /* 12 */ GIANT_CUE_ID_UNKNOWN_12, - /* 13 */ GIANT_CUE_ID_UNKNOWN_13, - /* 14 */ GIANT_CUE_ID_UNKNOWN_14, - /* 15 */ GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER -} GiantCueId; - -ActorInit En_Giant_InitVars = { - ACTOR_EN_GIANT, - ACTORCAT_NPC, - FLAGS, - OBJECT_GIANT, - sizeof(EnGiant), - (ActorFunc)EnGiant_Init, - (ActorFunc)EnGiant_Destroy, - (ActorFunc)EnGiant_Update, - (ActorFunc)EnGiant_Draw, -}; - -static AnimationHeader* sAnimations[] = { - &gGiantLookUpStartAnim, &gGiantLookUpLoopAnim, &gGiantFallingOverAnim, &gGiantRaisedArmsStartAnim, - &gGiantRaisedArmsLoopAnim, &gGiantStruggleStartAnim, &gGiantStruggleLoopAnim, &gGiantIdleAnim, - &gGiantWalkingAnim, &gGiantBigCallStartAnim, &gGiantBigCallLoopAnim, &gGiantBigCallEndAnim, - &gGiantSmallCallStartAnim, &gGiantSmallCallLoopAnim, &gGiantSmallCallEndAnim, +static AnimationHeader* sAnimations[GIANT_ANIM_MAX] = { + &gGiantLookUpStartAnim, // GIANT_ANIM_LOOK_UP_START + &gGiantLookUpLoopAnim, // GIANT_ANIM_LOOK_UP_LOOP + &gGiantFallingOverAnim, // GIANT_ANIM_FALLING_OVER + &gGiantRaisedArmsStartAnim, // GIANT_ANIM_RAISED_ARMS_START + &gGiantRaisedArmsLoopAnim, // GIANT_ANIM_RAISED_ARMS_LOOP + &gGiantStruggleStartAnim, // GIANT_ANIM_STRUGGLE_START + &gGiantStruggleLoopAnim, // GIANT_ANIM_STRUGGLE_LOOP + &gGiantIdleAnim, // GIANT_ANIM_IDLE_LOOP + &gGiantWalkingAnim, // GIANT_ANIM_WALKING_LOOP + &gGiantBigCallStartAnim, // GIANT_ANIM_BIG_CALL_START + &gGiantBigCallLoopAnim, // GIANT_ANIM_BIG_CALL_LOOP + &gGiantBigCallEndAnim, // GIANT_ANIM_BIG_CALL_END + &gGiantSmallCallStartAnim, // GIANT_ANIM_SMALL_CALL_START + &gGiantSmallCallLoopAnim, // GIANT_ANIM_SMALL_CALL_LOOP + &gGiantSmallCallEndAnim, // GIANT_ANIM_SMALL_CALL_END }; void EnGiant_ChangeAnim(EnGiant* this, s16 animIndex) { - if (animIndex >= GIANT_ANIM_LOOK_UP_START && animIndex < GIANT_ANIM_MAX) { + if ((animIndex >= GIANT_ANIM_LOOK_UP_START) && (animIndex < GIANT_ANIM_MAX)) { if (((this->animIndex == GIANT_ANIM_WALKING_LOOP) && (animIndex != GIANT_ANIM_WALKING_LOOP)) || ((animIndex == GIANT_ANIM_WALKING_LOOP) && (this->animIndex != GIANT_ANIM_WALKING_LOOP))) { Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, @@ -160,7 +172,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGiantSkel, &gGiantLargeStrideAnim, this->jointTable, this->morphTable, GIANT_LIMB_MAX); EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); - this->cueId = GIANT_CUE_ID_NONE; + this->cueId = GIANT_CUEID_NONE; this->actionFunc = EnGiant_PerformCutsceneActions; this->actor.draw = NULL; this->alpha = 0; @@ -275,58 +287,58 @@ void EnGiant_ChangeToStartOrLoopAnimation(EnGiant* this, s16 requestedAnimIndex) */ void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) { switch (this->cueId) { - case GIANT_CUE_ID_IDLE: + case GIANT_CUEID_IDLE: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_WALKING: + case GIANT_CUEID_WALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CUE_ID_STRUGGLING: + case GIANT_CUEID_STRUGGLING: EnGiant_ChangeAnim(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: EnGiant_ChangeAnim(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CUE_ID_IDLE_FADE_IN: + case GIANT_CUEID_IDLE_FADE_IN: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); this->alpha = 0; break; - case GIANT_CUE_ID_TALKING: + case GIANT_CUEID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_START); break; - case GIANT_CUE_ID_DONE_TALKING: + case GIANT_CUEID_DONE_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_END); break; - case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: + case GIANT_CUEID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_START); break; - case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: + case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_END); break; - case GIANT_CUE_ID_UNKNOWN_12: + case GIANT_CUEID_UNKNOWN_12: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_UNKNOWN_13: + case GIANT_CUEID_UNKNOWN_13: EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); break; - case GIANT_CUE_ID_UNKNOWN_14: + case GIANT_CUEID_UNKNOWN_14: if (this->animIndex != GIANT_ANIM_WALKING_LOOP) { EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP); } break; - case GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER: + case GIANT_CUEID_HOLDING_UP_MOON_IN_CLOCK_TOWER: Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f, Animation_GetLastFrame(&gGiantRaisedArmsStartAnim) - 1.0f, Animation_GetLastFrame(&gGiantRaisedArmsStartAnim), ANIMMODE_ONCE, 0.0f); @@ -339,14 +351,16 @@ void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) { void EnGiant_UpdateAlpha(EnGiant* this) { switch (this->cueId) { - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: if (this->skelAnime.curFrame >= 90.0f && this->alpha > 0) { this->alpha -= 12; } break; - case GIANT_CUE_ID_UNKNOWN_14: + + case GIANT_CUEID_UNKNOWN_14: this->alpha -= 12; break; + default: if (this->alpha < 255) { this->alpha += 8; @@ -363,36 +377,37 @@ void EnGiant_UpdateAlpha(EnGiant* this) { */ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) { if (SkelAnime_Update(&this->skelAnime) && - (this->animIndex != GIANT_ANIM_FALLING_OVER || this->cueId != GIANT_CUE_ID_FALLING_OVER)) { + ((this->animIndex != GIANT_ANIM_FALLING_OVER) || (this->cueId != GIANT_CUEID_FALLING_OVER))) { EnGiant_ChangeAnim(this, this->animIndex); + switch (this->cueId) { - case GIANT_CUE_ID_LOOKING_UP: + case GIANT_CUEID_LOOKING_UP: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START); break; - case GIANT_CUE_ID_RAISING_ARMS: + case GIANT_CUEID_RAISING_ARMS: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START); break; - case GIANT_CUE_ID_STRUGGLING: + case GIANT_CUEID_STRUGGLING: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START); break; - case GIANT_CUE_ID_FALLING_OVER: + case GIANT_CUEID_FALLING_OVER: // Unused EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER); break; - case GIANT_CUE_ID_TALKING: + case GIANT_CUEID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP); break; - case GIANT_CUE_ID_DONE_TALKING: - case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: + case GIANT_CUEID_DONE_TALKING: + case GIANT_CUEID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; - case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: + case GIANT_CUEID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP); break; @@ -445,7 +460,7 @@ void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) { } EnGiant_PlaySound(this); - if (this->cueId == GIANT_CUE_ID_STRUGGLING) { + if (this->cueId == GIANT_CUEID_STRUGGLING) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG); } EnGiant_PlayAndUpdateAnimation(this); diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index ea3f9fea2..566f35ba0 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -5,7 +5,6 @@ */ #include "z_en_ginko_man.h" -#include "objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -47,15 +46,16 @@ typedef enum { /* 1 */ GINKO_ANIM_SITTING, /* 2 */ GINKO_ANIM_REACHING, /* 3 */ GINKO_ANIM_AMAZED, - /* 4 */ GINKO_ANIM_ADVERTISING + /* 4 */ GINKO_ANIM_ADVERTISING, // looking around for customers + /* 5 */ GINKO_ANIM_MAX } GinkoAnimation; -static AnimationInfo sAnimationInfo[] = { - { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // looking around for customers - { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, +static AnimationInfo sAnimationInfo[GINKO_ANIM_MAX] = { + { &object_boj_Anim_0008C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_LEGSMACKING + { &object_boj_Anim_0043F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_SITTING + { &object_boj_Anim_004F40, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // GINKO_ANIM_REACHING + { &object_boj_Anim_000AC4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_AMAZED + { &object_boj_Anim_004A7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // GINKO_ANIM_ADVERTISING }; void EnGinkoMan_Init(Actor* thisx, PlayState* play) { @@ -71,7 +71,7 @@ void EnGinkoMan_Init(Actor* thisx, PlayState* play) { this->choiceDepositWithdrawl = GINKOMAN_CHOICE_RESET; this->serviceFee = 0; SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, &object_boj_Anim_0043F0, this->jointTable, - this->morphTable, 16); + this->morphTable, OBJECT_BOJ_LIMB_MAX); EnGinkoMan_SetupIdle(this); } @@ -172,7 +172,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; - } else if ((HS_GET_BANK_RUPEES() >= 1000) && ((this->previousBankValue) < 1000) && + } else if ((HS_GET_BANK_RUPEES() >= 1000) && (this->previousBankValue < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); @@ -664,16 +664,16 @@ void EnGinkoMan_Update(Actor* thisx, PlayState* play) { s32 EnGinkoMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGinkoMan* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { *dList = object_boj_DL_00B1D8; } - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->limb15Rot.y, MTXMODE_APPLY); Matrix_RotateZS(this->limb15Rot.x, MTXMODE_APPLY); Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); - } else if (limbIndex == 8) { + } else if (limbIndex == OBJECT_BOJ_LIMB_08) { Matrix_RotateXS(-this->limb8Rot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->limb8Rot.x, MTXMODE_APPLY); } diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h index b8a19d0f3..48ef4bdb1 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h @@ -2,6 +2,7 @@ #define Z_EN_GINKO_MAN_H #include "global.h" +#include "objects/object_boj/object_boj.h" struct EnGinkoMan; @@ -11,8 +12,8 @@ typedef struct EnGinkoMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnGinkoManActionFunc actionFunc; - /* 0x18C */ Vec3s jointTable[0x10]; - /* 0x1EC */ Vec3s morphTable[0x10]; + /* 0x18C */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX]; + /* 0x1EC */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX]; /* 0x24C */ Vec3s limb15Rot; /* 0x252 */ Vec3s limb8Rot; /* 0x258 */ s16 curTextId; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index dd87be400..ad5bc484f 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -5,7 +5,6 @@ */ #include "z_en_gk.h" -#include "objects/object_gk/object_gk.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -102,14 +101,38 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfo sAnimationInfo[] = { - { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, 0, 0.0f }, - { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, 0, 0.0f }, { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, 2, 0.0f }, - { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, 0, 0.0f }, +typedef enum { + /* -1 */ ENGK_ANIM_NONE = -1, + /* 0x0 */ ENGK_ANIM_0, + /* 0x1 */ ENGK_ANIM_1, + /* 0x2 */ ENGK_ANIM_2, + /* 0x3 */ ENGK_ANIM_3, + /* 0x4 */ ENGK_ANIM_4, + /* 0x5 */ ENGK_ANIM_5, + /* 0x6 */ ENGK_ANIM_6, + /* 0x7 */ ENGK_ANIM_7, + /* 0x8 */ ENGK_ANIM_8, + /* 0x9 */ ENGK_ANIM_9, + /* 0xA */ ENGK_ANIM_10, + /* 0xB */ ENGK_ANIM_11, + /* 0xC */ ENGK_ANIM_12, + /* 0xD */ ENGK_ANIM_MAX +} EnGkAnimation; + +static AnimationInfo sAnimationInfo[ENGK_ANIM_MAX] = { + { &object_gk_Anim_00787C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_0 + { &object_gk_Anim_007DC4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_1 + { &object_gk_Anim_0092C0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_2 + { &object_gk_Anim_005EDC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_3 + { &object_gk_Anim_009638, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_4 + { &object_gk_Anim_008774, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_5 + { &object_gk_Anim_00AE34, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_6 + { &object_gk_Anim_00BD90, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_7 + { &object_gk_Anim_00C308, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_8 + { &object_gk_Anim_009858, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_9 + { &object_gk_Anim_009D88, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_10 + { &object_gk_Anim_00A21C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // ENGK_ANIM_11 + { &object_gk_Anim_00AAEC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENGK_ANIM_12 }; Color_RGBA8 D_80B533A0 = { 255, 255, 255, 255 }; @@ -124,18 +147,24 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE7A: return 0xE7B; + case 0xE7B: return 0xE7C; + case 0xE7C: return 0xE7D; + case 0xE7D: return 0xE7E; + case 0xE7E: return 0xE7F; + case 0xE7F: SET_WEEKEVENTREG(WEEKEVENTREG_40_80); this->unk_1E4 |= 1; return 0xE80; + default: return 0xE7A; } @@ -147,16 +176,21 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE82: return 0xE83; + case 0xE83: return 0xE7D; + case 0xE7D: return 0xE7E; + case 0xE7E: return 0xE7F; + case 0xE7F: SET_WEEKEVENTREG(WEEKEVENTREG_41_01); this->unk_1E4 |= 1; return 0xE80; + default: return 0xE82; } @@ -197,10 +231,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) { switch (this->unk_31C) { case 0xE85: return 0xE86; + case 0xE86: SET_WEEKEVENTREG(WEEKEVENTREG_41_02); this->unk_1E4 |= 1; return 0xE87; + default: return 0xE85; } @@ -208,9 +244,9 @@ u16 func_80B50410(EnGk* this, PlayState* play) { this->unk_1E4 |= 1; return 0xE87; } - } else { - return 0; } + + return 0; } u16 func_80B50710(EnGk* this) { @@ -229,8 +265,10 @@ u16 func_80B50710(EnGk* this) { this->unk_1E4 |= 0x10; this->unk_1E4 |= 1; return 0xE8C; + + default: + return 0; } - return 0; } void func_80B507A0(EnGk* this, PlayState* play) { @@ -259,8 +297,8 @@ s32 func_80B50854(EnGk* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); - this->unk_2E4 = 3; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + this->animIndex = ENGK_ANIM_3; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_3); this->actionFunc = func_80B521E8; return true; } @@ -285,12 +323,13 @@ void func_80B509A8(EnGk* this, PlayState* play) { this->unk_30C.y += Rand_ZeroOne(); this->unk_30C.z += 2.0f * Rand_Centered(); - if (this->unk_2E4 == 0) { + if (this->animIndex == ENGK_ANIM_0) { sp4C.x = 0.0f; sp4C.z = 0.0f; sp4C.y = -1.2f; phi_s1 = 25; - } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) { + } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) || + (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) { sp4C.x = 0.0f; sp4C.z = 0.0f; sp4C.y = -0.5f; @@ -307,28 +346,28 @@ void func_80B50B38(EnGk* this, PlayState* play) { s16 i; s16 temp; - switch (this->unk_2E4) { - case 0: + switch (this->animIndex) { + case ENGK_ANIM_0: this->unk_2E0 = 3; for (i = 0; i < 2; i++) { func_80B509A8(this, play); } break; - case 2: + case ENGK_ANIM_2: this->unk_2E0 = 3; func_80B509A8(this, play); break; - case 1: - case 3: - case 12: + case ENGK_ANIM_1: + case ENGK_ANIM_3: + case ENGK_ANIM_12: this->unk_2E0 = 2; break; - case 9: - case 10: - case 11: + case ENGK_ANIM_9: + case ENGK_ANIM_10: + case ENGK_ANIM_11: this->unk_2E0 = 3; func_80B509A8(this, play); break; @@ -483,22 +522,22 @@ s32 func_80B5123C(EnGk* this, PlayState* play) { } void func_80B51308(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_31A].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->csAnimIndex].animation); - if ((this->unk_2E4 == 7) && (sp1E == lastFrame)) { - this->unk_2E4 = 8; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + if ((this->animIndex == ENGK_ANIM_7) && (curFrame == endFrame)) { + this->animIndex = ENGK_ANIM_8; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_8); } } void func_80B51398(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[9].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[9].animation); - if ((this->unk_2E4 == 9) && (sp1E == lastFrame)) { - this->unk_2E4 = 10; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 10); + if ((this->animIndex == ENGK_ANIM_9) && (curFrame == endFrame)) { + this->animIndex = ENGK_ANIM_10; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_10); } } @@ -541,35 +580,35 @@ void func_80B51510(EnGk* this, PlayState* play) { this->cueId = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->unk_31A = 0; - this->unk_2E4 = 0; + this->csAnimIndex = ENGK_ANIM_0; + this->animIndex = ENGK_ANIM_0; break; case 2: - this->unk_31A = 2; - this->unk_2E4 = 2; + this->csAnimIndex = ENGK_ANIM_2; + this->animIndex = ENGK_ANIM_2; break; case 3: - this->unk_31A = 7; - this->unk_2E4 = 7; + this->csAnimIndex = ENGK_ANIM_7; + this->animIndex = ENGK_ANIM_7; break; case 4: - this->unk_31A = 3; - this->unk_2E4 = 3; + this->csAnimIndex = ENGK_ANIM_3; + this->animIndex = ENGK_ANIM_3; break; case 5: - this->unk_31A = 1; - this->unk_2E4 = 1; + this->csAnimIndex = ENGK_ANIM_1; + this->animIndex = ENGK_ANIM_1; this->unk_1E4 |= 0x80; this->actionFunc = func_80B5227C; break; case 6: - this->unk_31A = 12; - this->unk_2E4 = 12; + this->csAnimIndex = ENGK_ANIM_12; + this->animIndex = ENGK_ANIM_12; break; case 7: @@ -579,10 +618,10 @@ void func_80B51510(EnGk* this, PlayState* play) { default: break; } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_31A); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } - if (this->unk_31A == 7) { + if (this->csAnimIndex == ENGK_ANIM_7) { func_80B51308(this, play); } @@ -594,41 +633,44 @@ void func_80B51510(EnGk* this, PlayState* play) { } void func_80B51698(EnGk* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp26 == lastFrame) { - switch (this->unk_2E4) { - case 0: - this->unk_2E4 = 2; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + if (curFrame == endFrame) { + switch (this->animIndex) { + case ENGK_ANIM_0: + this->animIndex = ENGK_ANIM_2; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_2); this->actionFunc = func_80B5216C; break; - case 2: - this->unk_2E4 = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + case ENGK_ANIM_2: + this->animIndex = ENGK_ANIM_0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0); this->actionFunc = func_80B5202C; break; + + default: + break; } } } void func_80B51760(EnGk* this, PlayState* play) { - s16 sp2E = this->skelAnime.curFrame; - s16 lastFrame; + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame; - if (this->unk_2E4 == 11) { - lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); - if (sp2E == lastFrame) { - this->unk_2E4 = 5; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4); + if (this->animIndex == ENGK_ANIM_11) { + endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_5; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } - } else if (this->unk_2E4 == 10) { - lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); - if (sp2E == lastFrame) { - this->unk_2E4 = 11; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_2E4); + } else if (this->animIndex == ENGK_ANIM_10) { + endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_11; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { @@ -643,7 +685,7 @@ void func_80B51760(EnGk* this, PlayState* play) { Message_StartTextbox(play, this->unk_31C, &this->actor); this->actionFunc = func_80B51970; if (this->unk_31C == 0xE81) { - this->unk_2E4 = 0; + this->animIndex = ENGK_ANIM_0; this->unk_1E4 |= 2; } } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isLockedOn) && @@ -673,7 +715,7 @@ void func_80B51970(EnGk* this, PlayState* play) { if (this->unk_1E4 & 1) { this->unk_1E4 &= ~1; this->unk_1E4 &= ~4; - if (this->unk_2E4 == 10) { + if (this->animIndex == ENGK_ANIM_10) { this->unk_1E4 &= ~2; } this->actionFunc = func_80B51760; @@ -691,10 +733,10 @@ void func_80B51970(EnGk* this, PlayState* play) { if (this->unk_1E4 & 2) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); - if (this->unk_2E4 != 10) { - if (this->unk_2E4 != 9) { - this->unk_2E4 = 9; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9); + if (this->animIndex != ENGK_ANIM_10) { + if (this->animIndex != ENGK_ANIM_9) { + this->animIndex = ENGK_ANIM_9; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9); } else { func_80B51398(this, play); } @@ -703,7 +745,7 @@ void func_80B51970(EnGk* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - if (this->unk_2E4 == 6) { + if (this->animIndex == ENGK_ANIM_6) { func_80B50954(this); } } @@ -717,7 +759,7 @@ void func_80B51B40(EnGk* this, PlayState* play) { this->unk_1E4 &= ~1; this->unk_1E4 &= ~4; - if (this->unk_2E4 == 10) { + if (this->animIndex == ENGK_ANIM_10) { this->unk_1E4 &= ~2; } @@ -752,15 +794,18 @@ void func_80B51B40(EnGk* this, PlayState* play) { this->unk_31C = 0xE8A; Message_StartTextbox(play, this->unk_31C, &this->actor); break; + + default: + break; } } if (this->unk_1E4 & 2) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); - if (this->unk_2E4 != 10) { - if (this->unk_2E4 != 9) { - this->unk_2E4 = 9; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9); + if (this->animIndex != ENGK_ANIM_10) { + if (this->animIndex != ENGK_ANIM_9) { + this->animIndex = ENGK_ANIM_9; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_9); } else { func_80B51398(this, play); } @@ -778,8 +823,8 @@ void func_80B51D9C(EnGk* this, PlayState* play) { CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); if (this->unk_1E4 & 4) { this->unk_1E4 &= ~4; - this->unk_2E4 = 6; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6); + this->animIndex = ENGK_ANIM_6; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_6); this->actionFunc = func_80B51EA4; } else { this->unk_1E4 |= 4; @@ -880,21 +925,21 @@ void func_80B5216C(EnGk* this, PlayState* play) { } void func_80B521E8(EnGk* this, PlayState* play) { - s16 sp1E = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if (sp1E == lastFrame) { - this->unk_2E4 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + if (curFrame == endFrame) { + this->animIndex = ENGK_ANIM_1; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_1); this->actionFunc = func_80B5227C; } } void func_80B5227C(EnGk* this, PlayState* play) { - s16 sp26 = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_2E4].animation); + s16 curFrame = this->skelAnime.curFrame; + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); - if ((sp26 + 1) == lastFrame) { + if (curFrame == (endFrame - 1)) { func_800B14D4(play, 20.0f, &this->actor.home.pos); this->unk_350 = 60; if (!(this->unk_1E4 & 0x80)) { @@ -948,6 +993,9 @@ void func_80B52430(EnGk* this, PlayState* play) { this->unk_1E4 &= ~4; this->actionFunc = func_80B51760; return; + + default: + break; } } @@ -1005,7 +1053,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { EnGk* this = THIS; SkelAnime_InitFlex(play, &this->skelAnime, &object_gk_Skel_0079C0, &object_gk_Anim_00787C, this->jointTable, - this->morphTable, 20); + this->morphTable, OBJECT_GK_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -1019,16 +1067,16 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; if (ENGK_GET_F(&this->actor) == ENGK_F_1) { - this->unk_2E4 = 5; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + this->animIndex = ENGK_ANIM_5; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_5); if (play->sceneId == SCENE_17SETUGEN2) { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { Actor_Kill(&this->actor); - } else { - this->csId = this->actor.csId; - this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE); - this->actionFunc = func_80B51760; + return; } + this->csId = this->actor.csId; + this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE); + this->actionFunc = func_80B51760; } else if (play->sceneId == SCENE_GORONRACE) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) { @@ -1054,11 +1102,11 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { - this->unk_2E4 = 0; + this->animIndex = ENGK_ANIM_0; this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_0); this->actionFunc = func_80B5202C; } else { this->actionFunc = func_80B52654; @@ -1111,7 +1159,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp28.x = 1100.0f; sp28.z = -500.0f; - if (this->unk_2E4 == 0) { + if (this->animIndex == ENGK_ANIM_0) { sp34.y = -100.0f; sp28.y = -100.0f; @@ -1121,7 +1169,8 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp4C = sp40; sp4C.x *= -1.0f; - } else if ((this->unk_2E4 == 2) || (this->unk_2E4 == 9) || (this->unk_2E4 == 10) || (this->unk_2E4 == 11)) { + } else if ((this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_9) || + (this->animIndex == ENGK_ANIM_10) || (this->animIndex == ENGK_ANIM_11)) { sp34.y = 400.0f; sp28.y = 400.0f; @@ -1133,7 +1182,7 @@ void EnGk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp4C.x *= -1.0f; } - if (limbIndex == 17) { + if (limbIndex == OBJECT_GK_LIMB_11) { if (ENGK_GET_F(&this->actor) == ENGK_F_1) { phi_f0 = 100.0f; } else { @@ -1164,7 +1213,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { s32 phi_v1; switch (limbIndex) { - case 18: + case OBJECT_GK_LIMB_12: if (this->unk_1E4 & 8) { phi_v1 = true; } else { @@ -1191,7 +1240,7 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_Push(); break; - case 9: + case OBJECT_GK_LIMB_09: if (this->unk_1E4 & 8) { phi_v1 = true; } else { @@ -1216,6 +1265,9 @@ void EnGk_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_Push(); break; + + default: + break; } } @@ -1260,8 +1312,9 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { if (ENGK_GET_F(&this->actor) != ENGK_F_2) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); - if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) || - (this->unk_2E4 == 4)) { + if ((this->animIndex == ENGK_ANIM_0) || (this->animIndex == ENGK_ANIM_1) || + (this->animIndex == ENGK_ANIM_2) || (this->animIndex == ENGK_ANIM_3) || + (this->animIndex == ENGK_ANIM_4)) { pos.x = this->actor.world.pos.x - 15.0f; pos.y = this->actor.world.pos.y; pos.z = this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index 130b97675..6bd28ad94 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -2,6 +2,7 @@ #define Z_EN_GK_H #include "global.h" +#include "objects/object_gk/object_gk.h" struct EnGk; @@ -32,17 +33,17 @@ typedef struct EnGk { /* 0x1E4 */ u16 unk_1E4; /* 0x1E8 */ Path* path; /* 0x1EC */ s32 unk_1EC; - /* 0x1F0 */ Vec3s jointTable[20]; - /* 0x1F0 */ Vec3s morphTable[20]; + /* 0x1F0 */ Vec3s jointTable[OBJECT_GK_LIMB_MAX]; + /* 0x1F0 */ Vec3s morphTable[OBJECT_GK_LIMB_MAX]; /* 0x2E0 */ s16 unk_2E0; /* 0x2E2 */ s16 unk_2E2; - /* 0x2E4 */ s16 unk_2E4; + /* 0x2E4 */ s16 animIndex; /* 0x2E8 */ Vec3f unk_2E8; /* 0x2F4 */ Vec3f unk_2F4; /* 0x300 */ Vec3f unk_300; /* 0x30C */ Vec3f unk_30C; /* 0x318 */ s16 csId; - /* 0x31A */ u8 unk_31A; + /* 0x31A */ u8 csAnimIndex; /* 0x31B */ u8 cueId; /* 0x31C */ u16 unk_31C; /* 0x31E */ s16 unk_31E; diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 787ce43b9..39b705649 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -6,7 +6,6 @@ #include "z_en_gm.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#include "objects/object_in2/object_in2.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -209,20 +208,38 @@ static ColliderSphereInit sSphereInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum { + /* -1 */ ENGM_ANIM_NONE = -1, + /* 0x0 */ ENGM_ANIM_0, + /* 0x1 */ ENGM_ANIM_1, + /* 0x2 */ ENGM_ANIM_2, + /* 0x3 */ ENGM_ANIM_3, + /* 0x4 */ ENGM_ANIM_4, + /* 0x5 */ ENGM_ANIM_5, + /* 0x6 */ ENGM_ANIM_6, + /* 0x7 */ ENGM_ANIM_7, + /* 0x8 */ ENGM_ANIM_8, + /* 0x9 */ ENGM_ANIM_9, + /* 0xA */ ENGM_ANIM_10, + /* 0xB */ ENGM_ANIM_11, + /* 0xC */ ENGM_ANIM_12, + /* 0xD */ ENGM_ANIM_MAX +} EnGmAnimation; + +static AnimationInfoS sAnimationInfo[ENGM_ANIM_MAX] = { + { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_0 + { &object_in2_Anim_009CDC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_1 + { &object_in2_Anim_00A5E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_2 + { &object_in2_Anim_00A70C, 1.0f, 0, 1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_3 + { &object_in2_Anim_008090, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_4 + { &object_in2_Anim_00898C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_5 + { &object_in2_Anim_009450, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENGM_ANIM_6 + { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENGM_ANIM_7 + { &object_in2_Anim_00AD18, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_8 + { &object_in2_Anim_00B8B0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENGM_ANIM_9 + { &object_in2_Anim_00BA80, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_10 + { &object_in2_Anim_00C03C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_11 + { &object_in2_Anim_00B990, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENGM_ANIM_12 }; Actor* func_8094DEE0(EnGm* this, PlayState* play, u8 arg2, s16 arg3) { @@ -286,43 +303,43 @@ EnDoor* func_8094DF90(PlayState* play, s32 arg1) { return SubS_FindDoor(play, phi_a1); } -s32 func_8094DFF8(EnGm* this, PlayState* play) { - s32 ret = false; +s32 EnGm_UpdateSkelAnime(EnGm* this, PlayState* play) { + s32 isAnimFinished = false; if (this->unk_262 < 0) { return false; } if (this->unk_262 >= 0) { - this->skelAnime.playSpeed = this->unk_3A8; - ret = SkelAnime_Update(&this->skelAnime); + this->skelAnime.playSpeed = this->animPlaySpeed; + isAnimFinished = SkelAnime_Update(&this->skelAnime); } - return ret; + return isAnimFinished; } -s32 func_8094E054(EnGm* this, PlayState* play, s32 arg2) { +s32 EnGm_ChangeAnim(EnGm* this, PlayState* play, s32 animIndex) { s8 tmp = this->unk_262; - s32 phi_v1 = false; - s32 ret = false; + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg2 == 0) || (arg2 == 1)) { - if ((this->unk_3E8 != 0) && (this->unk_3E8 != 1)) { - phi_v1 = true; + if ((animIndex == ENGM_ANIM_0) || (animIndex == ENGM_ANIM_1)) { + if ((this->animIndex != ENGM_ANIM_0) && (this->animIndex != ENGM_ANIM_1)) { + changeAnim = true; } - } else if (arg2 != this->unk_3E8) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { + if (changeAnim) { if (tmp >= 0) { - this->unk_3E8 = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); - this->unk_3A8 = this->skelAnime.playSpeed; + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } } - return ret; + return didAnimChange; } s32 func_8094E0F8(EnGm* this, PlayState* play) { @@ -486,6 +503,9 @@ s32 func_8094E52C(EnGm* this, PlayState* play) { this->unk_3E0++; ret = true; break; + + default: + break; } return ret; @@ -502,7 +522,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { switch (this->unk_3E0) { case 0: Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); this->unk_3E2 = 0; this->unk_3E0++; break; @@ -558,6 +578,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { this->unk_3E2 = 0; this->unk_3E0++; break; + case 9: sp48 = this->actor.world.rot.y; this->unk_3E2++; @@ -565,13 +586,16 @@ s32 func_8094E69C(EnGm* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, sp48, 3, 0x2AA8); this->unk_3A4 &= ~0x20; } else { - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); this->actor.shape.rot.y = sp48; this->unk_3E0++; this->unk_3E2 = 0; ret = true; } break; + + default: + break; } return ret; } @@ -639,7 +663,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) { break; } Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); this->unk_3E2 = 0; this->unk_3E0++; @@ -669,7 +693,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, oldYaw, 3, 0x2AA8); this->unk_3A4 &= ~0x20; } else { - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); this->actor.shape.rot.y = oldYaw; this->unk_3E2 = 0; this->unk_3E0++; @@ -763,7 +787,7 @@ s32 func_8094EFC4(EnGm* this, PlayState* play) { if (play->csCtx.state != CS_STATE_IDLE) { if (this->unk_3F8 == 0) { if ((play->sceneId == SCENE_MILK_BAR) && (gSaveContext.sceneLayer == 2)) { - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); this->unk_258 = 255; } this->cueId = 255; @@ -879,9 +903,9 @@ void func_8094F3D0(EnGm* this, PlayState* play) { } s32 func_8094F4EC(EnGm* this, PlayState* play) { - if ((this->unk_258 != 6) && (this->unk_3E8 == 12)) { + if ((this->unk_258 != 6) && (this->animIndex == ENGM_ANIM_12)) { this->unk_3A4 &= ~0x2000; - func_8094E054(this, play, 8); + EnGm_ChangeAnim(this, play, ENGM_ANIM_8); } return true; } @@ -897,30 +921,30 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { if (this->unk_3A6 != sp32) { switch (sp32) { case 0x2B13: - func_8094E054(this, play, 2); + EnGm_ChangeAnim(this, play, ENGM_ANIM_2); break; case 0x2B14: case 0x2B18: - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); break; case 0x2B16: - func_8094E054(this, play, 1); + EnGm_ChangeAnim(this, play, ENGM_ANIM_1); break; case 0x2B15: - func_8094E054(this, play, 5); + EnGm_ChangeAnim(this, play, ENGM_ANIM_5); break; case 0x2B17: - func_8094E054(this, play, 6); + EnGm_ChangeAnim(this, play, ENGM_ANIM_6); break; default: - if ((this->unk_3E8 == 7) || (this->unk_3E8 == 8)) { + if ((this->animIndex == ENGM_ANIM_7) || (this->animIndex == ENGM_ANIM_8)) { this->unk_3A4 |= 0x2000; - func_8094E054(this, play, 12); + EnGm_ChangeAnim(this, play, ENGM_ANIM_12); } break; } @@ -941,6 +965,9 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { this->unk_268 = toto; } break; + + default: + break; } if (sp32 == 0x2AA8) { @@ -963,7 +990,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { this->unk_18C(this, play); } - if ((this->unk_3E8 == 6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) && + if ((this->animIndex == ENGM_ANIM_6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) && Animation_OnFrame(&this->skelAnime, 20.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); } @@ -1039,7 +1066,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; - func_8094E054(this, play, 7); + EnGm_ChangeAnim(this, play, ENGM_ANIM_7); this->actor.gravity = 0.0f; ret = true; } @@ -1087,7 +1114,7 @@ s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; - func_8094E054(this, play, 7); + EnGm_ChangeAnim(this, play, ENGM_ANIM_7); this->actor.gravity = -1.0f; ret = true; } @@ -1102,9 +1129,9 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (this->unk_258 == 0) { Math_Vec3f_Copy(&this->actor.world.pos, &D_80951D90); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); } else { - func_8094E054(this, play, 9); + EnGm_ChangeAnim(this, play, ENGM_ANIM_9); this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_3A4 |= 0x100; @@ -1118,7 +1145,7 @@ s32 func_8094FD88(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 ret = false; if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_RECEPGIRL)) { - func_8094E054(this, play, 11); + EnGm_ChangeAnim(this, play, ENGM_ANIM_11); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; @@ -1134,7 +1161,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL); if (func_8094F7D0(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_TOTO) && (al != NULL) && (al->update != NULL)) { - func_8094E054(this, play, 11); + EnGm_ChangeAnim(this, play, ENGM_ANIM_11); SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_268 = al; if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) { @@ -1176,11 +1203,11 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); func_8094E278(play); } else { Math_Vec3f_Copy(&this->actor.world.pos, &sp30); - func_8094E054(this, play, 9); + EnGm_ChangeAnim(this, play, ENGM_ANIM_9); this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_400 = 0; @@ -1202,7 +1229,7 @@ s32 func_80950088(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x2000 | 0x100); this->unk_3A4 |= 0x200; - func_8094E054(this, play, 12); + EnGm_ChangeAnim(this, play, ENGM_ANIM_12); return true; } @@ -1217,7 +1244,7 @@ s32 func_80950120(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3A4 |= (0x800 | 0x100); this->unk_3A4 |= 0x200; - func_8094E054(this, play, 4); + EnGm_ChangeAnim(this, play, ENGM_ANIM_4); return true; } @@ -1238,7 +1265,7 @@ s32 func_809501B8(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3CC = 8; this->actor.targetMode = TARGET_MODE_6; this->unk_3B4 = 60.0f; - func_8094E054(this, play, 10); + EnGm_ChangeAnim(this, play, ENGM_ANIM_10); return true; } @@ -1334,11 +1361,11 @@ s32 func_80950388(EnGm* this, PlayState* play) { s32 func_809503F8(EnGm* this, PlayState* play) { s32 pad; - if (this->unk_3E8 == 9) { + if (this->animIndex == ENGM_ANIM_9) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); } else { AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f); } @@ -1348,7 +1375,8 @@ s32 func_809503F8(EnGm* this, PlayState* play) { s32 func_80950490(EnGm* this, PlayState* play) { static s32 D_80951DE4[] = { - 1, 5, 5, 1, 6, 5, 1, 5, 6, 1, 5, 6, + ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_5, ENGM_ANIM_1, ENGM_ANIM_6, ENGM_ANIM_5, + ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6, ENGM_ANIM_1, ENGM_ANIM_5, ENGM_ANIM_6, }; s32 pad; @@ -1358,32 +1386,32 @@ s32 func_80950490(EnGm* this, PlayState* play) { this->unk_3CA = 1; this->unk_3CC = 8; this->unk_400 = 1; - func_8094E054(this, play, 3); + EnGm_ChangeAnim(this, play, ENGM_ANIM_3); } return false; } this->unk_400 = 0; - switch (this->unk_3E8) { - case 9: + switch (this->animIndex) { + case ENGM_ANIM_9: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->actor.shape.shadowDraw = ActorShadow_DrawCircle; SubS_SetOfferMode(&this->unk_3A4, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3C8 = 4; this->unk_3CA = 4; this->unk_3CC = 8; - func_8094E054(this, play, 0); + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); func_8094E278(play); } else { AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, 1.0f); } break; - case 5: - case 6: + case ENGM_ANIM_5: + case ENGM_ANIM_6: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8094E054(this, play, D_80951DE4[this->unk_3F4]); + EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]); this->unk_3F4++; this->unk_3F4 %= 12; this->unk_3DE = Rand_S16Offset(30, 30); @@ -1392,7 +1420,7 @@ s32 func_80950490(EnGm* this, PlayState* play) { default: if (DECR(this->unk_3DE) == 0) { - func_8094E054(this, play, D_80951DE4[this->unk_3F4]); + EnGm_ChangeAnim(this, play, D_80951DE4[this->unk_3F4]); this->unk_3F4++; this->unk_3F4 %= 12; this->unk_3DE = Rand_S16Offset(30, 30); @@ -1433,6 +1461,7 @@ s32 func_80950690(EnGm* this, PlayState* play) { break; case 8: + default: break; } @@ -1574,6 +1603,9 @@ void func_80950C24(EnGm* this, PlayState* play) { case 30: func_8095097C(this, play); break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); @@ -1629,7 +1661,7 @@ void func_80950DB8(EnGm* this, PlayState* play) { } void func_80950F2C(EnGm* this, PlayState* play) { - s32 sp50[] = { 0, 0, 3, 2 }; + s32 csAnimIndex[] = { ENGM_ANIM_0, ENGM_ANIM_0, ENGM_ANIM_3, ENGM_ANIM_2 }; Player* player = GET_PLAYER(play); s32 pad; Vec3f sp3C; @@ -1644,7 +1676,7 @@ void func_80950F2C(EnGm* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL); } this->cueId = cueId; - func_8094E054(this, play, sp50[cueId]); + EnGm_ChangeAnim(this, play, csAnimIndex[cueId]); } if ((this->cueId == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) { @@ -1670,9 +1702,10 @@ void EnGm_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 22.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable, 20); - this->unk_3E8 = -1; - func_8094E054(this, play, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_in2_Skel_0078B0, NULL, this->jointTable, this->morphTable, + OBJECT_IN2_LIMB_MAX); + this->animIndex = ENGM_ANIM_NONE; + EnGm_ChangeAnim(this, play, ENGM_ANIM_0); Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); @@ -1698,7 +1731,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { if (!func_8094E0F8(this, play)) { if (!func_8094EE84(this, play) && func_8094EFC4(this, play)) { func_80950F2C(this, play); - func_8094DFF8(this, play); + EnGm_UpdateSkelAnime(this, play); func_8094E2D0(this); return; } @@ -1708,7 +1741,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { func_8094F53C(this, play); if (this->unk_258 != 0) { - func_8094DFF8(this, play); + EnGm_UpdateSkelAnime(this, play); func_8094E2D0(this); func_8094F2E8(this); SubS_Offer(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & SUBS_OFFER_MODE_MASK); @@ -1726,20 +1759,20 @@ s32 EnGm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po EnGm* this = THIS; s32 fidgetIndex; - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN2_LIMB_10) { func_8094F3D0(this, play); } switch (limbIndex) { - case 9: + case OBJECT_IN2_LIMB_09: fidgetIndex = 0; break; - case 10: + case OBJECT_IN2_LIMB_0A: fidgetIndex = 1; break; - case 13: + case OBJECT_IN2_LIMB_0D: fidgetIndex = 2; break; @@ -1763,20 +1796,20 @@ void EnGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp30; s32 pad2; - if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == 16)) { + if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == OBJECT_IN2_LIMB_10)) { Matrix_MultVec3f(&D_80951E24, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } OPEN_DISPS(play->state.gfxCtx); - if ((limbIndex == 15) && (this->unk_3A4 & 0x800)) { + if ((limbIndex == OBJECT_IN2_LIMB_0F) && (this->unk_3A4 & 0x800)) { gSPDisplayList(POLY_OPA_DISP++, object_in2_DL_007528); } CLOSE_DISPS(play->state.gfxCtx); - if (limbIndex == 9) { + if (limbIndex == OBJECT_IN2_LIMB_09) { Matrix_MultVec3f(&gZeroVec3f, &sp30); Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30); } @@ -1799,7 +1832,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN2_LIMB_10) { SubS_UpdateLimb(BINANG_ADD(this->unk_3BC + this->unk_3C0, 0x4000), BINANG_ADD(this->unk_3BE + this->unk_3C2 + this->actor.shape.rot.y, 0x4000), &this->unk_290, &this->unk_2A8, stepRot, overrideRot); @@ -1810,7 +1843,7 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == 9) { + } else if (limbIndex == OBJECT_IN2_LIMB_09) { SubS_UpdateLimb(BINANG_ADD(this->unk_3C0, 0x4000), BINANG_ADD(this->unk_3C2 + this->actor.shape.rot.y, 0x4000), &this->unk_29C, &this->unk_2AE, stepRot, overrideRot); Matrix_Pop(); @@ -1824,8 +1857,10 @@ void EnGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } void EnGm_Draw(Actor* thisx, PlayState* play) { - static TexturePtr D_80951E30[] = { object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828, - object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68 }; + static TexturePtr D_80951E30[] = { + object_in2_Tex_0054A8, object_in2_Tex_005028, object_in2_Tex_006828, + object_in2_Tex_005028, object_in2_Tex_005CE8, object_in2_Tex_006C68, + }; EnGm* this = THIS; if ((this->unk_258 != 0) && (this->unk_262 >= 0)) { diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h index 572fa322f..968d6dd07 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -2,6 +2,7 @@ #define Z_EN_GM_H #include "global.h" +#include "objects/object_in2/object_in2.h" struct EnGm; @@ -42,11 +43,11 @@ typedef struct EnGm { /* 0x29C */ Vec3f unk_29C; /* 0x2A8 */ Vec3s unk_2A8; /* 0x2AE */ Vec3s unk_2AE; - /* 0x2B4 */ Vec3s jointTable[20]; - /* 0x32C */ Vec3s morphTable[20]; + /* 0x2B4 */ Vec3s jointTable[OBJECT_IN2_LIMB_MAX]; + /* 0x32C */ Vec3s morphTable[OBJECT_IN2_LIMB_MAX]; /* 0x3A4 */ u16 unk_3A4; /* 0x3A6 */ u16 unk_3A6; - /* 0x3A8 */ f32 unk_3A8; + /* 0x3A8 */ f32 animPlaySpeed; /* 0x3AC */ f32 unk_3AC; /* 0x3B0 */ f32 unk_3B0; /* 0x3B4 */ f32 unk_3B4; @@ -69,7 +70,7 @@ typedef struct EnGm { /* 0x3E0 */ s16 unk_3E0; /* 0x3E2 */ s16 unk_3E2; /* 0x3E4 */ EnGmUnkFunc unk_3E4; - /* 0x3E8 */ s32 unk_3E8; + /* 0x3E8 */ s32 animIndex; /* 0x3EC */ UNK_TYPE1 unk3EC[0x4]; /* 0x3F0 */ s32 prevTalkState; /* 0x3F4 */ s32 unk_3F4; diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 10dda353c..f5678eedd 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -82,8 +82,8 @@ typedef enum EnGoEffectType { /* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN } EnGoEffectType; -typedef enum EnGoAnimationIndex { - /* -1 */ ENGO_ANIM_INVALID = -1, +typedef enum EnGoAnimation { + /* -1 */ ENGO_ANIM_NONE = -1, /* 0 */ ENGO_ANIM_GORON_MIN, /* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN, /* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM, @@ -95,21 +95,21 @@ typedef enum EnGoAnimationIndex { /* 7 */ ENGO_ANIM_DROPKEG, /* 8 */ ENGO_ANIM_COVEREARS, /* 9 */ ENGO_ANIM_SHIVERINGSURPRISED, - /* 10 */ ENGO_ANIM_ATHLETICS_MIN, - /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN, - /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, - /* 12 */ ENGO_ANIM_SHAKE_LIMBS, - /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND, - /* 14 */ ENGO_ANIM_SITTING_STRETCH, - /* 15 */ ENGO_ANIM_CHEER, - /* 16 */ ENGO_ANIM_SHOUT, - /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH, - /* 18 */ ENGO_ANIM_SPRING_MIN, - /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN, - /* 19 */ ENGO_ANIM_SHOW_LOOPED, - /* 20 */ ENGO_ANIM_LOOK_AROUND, - /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED -} EnGoAnimationIndex; + /* 10 */ ENGO_ANIM_ATHLETICS_MIN, + /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN, + /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, + /* 12 */ ENGO_ANIM_SHAKE_LIMBS, + /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND, + /* 14 */ ENGO_ANIM_SITTING_STRETCH, + /* 15 */ ENGO_ANIM_CHEER, + /* 16 */ ENGO_ANIM_SHOUT, + /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH, + /* 18 */ ENGO_ANIM_SPRING_MIN, + /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN, + /* 19 */ ENGO_ANIM_SHOW_LOOPED, + /* 20 */ ENGO_ANIM_LOOK_AROUND, + /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED +} EnGoAnimation; void EnGo_Idle(EnGo* this, PlayState* play); void EnGo_Sleep(EnGo* this, PlayState* play); @@ -309,7 +309,7 @@ static DamageTable sDamageTable = { /** * Animations used in the actor. * - * @see EnGoAnimationIndex + * @see EnGoAnimation */ static AnimationInfoS sAnimationInfo[] = { @@ -530,7 +530,7 @@ void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { * @param pos Position around which the effects appear */ void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) { - static u8 effectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = { + static u8 sEffectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = { ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, @@ -570,7 +570,7 @@ void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) { effect->alphaDenom = effect->alphaNumer = 1; // Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3' - effect->type = effectIndexToSnowEffectTable[i]; + effect->type = sEffectIndexToSnowEffectTable[i]; // Initialize the parameters for the paired element randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x; @@ -977,27 +977,27 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { * * @return True if non-repeating animation has finished */ -s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { +s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) { s8 objIndex = this->actor.objBankIndex; s8 extraObjIndex = -1; - s32 ret = false; + s32 isAnimFinished = false; - if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { + if ((this->animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { extraObjIndex = this->hakuginDemoObjIndex; - } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { + } else if ((this->animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { extraObjIndex = this->taisouObjIndex; - } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) { + } else if (this->animIndex < ENGO_ANIM_ATHLETICS_MIN) { extraObjIndex = this->actor.objBankIndex; } if (extraObjIndex >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); - this->skelAnime.playSpeed = this->curAnimPlaySpeed; - ret = SkelAnime_Update(&this->skelAnime); + this->skelAnime.playSpeed = this->animPlaySpeed; + isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } - return ret; + return isAnimFinished; } /** @@ -1005,7 +1005,7 @@ s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { */ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { - if (this->curAnimIndex == ENGO_ANIM_ROLL) { + if (this->animIndex == ENGO_ANIM_ROLL) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); } @@ -1013,7 +1013,7 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 22.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); } - } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) { + } else if ((this->animIndex == ENGO_ANIM_UNROLL) || (this->animIndex == ENGO_ANIM_UNROLL_IMM)) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF); } @@ -1037,10 +1037,10 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { * * @return True if animation was changed */ -s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { s8 objIndex = this->actor.objBankIndex; s8 extraObjIndex = -1; - s32 ret = false; + s32 didAnimChange = false; if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { extraObjIndex = this->hakuginDemoObjIndex; @@ -1052,13 +1052,13 @@ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { if (extraObjIndex >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); - this->curAnimIndex = animIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - this->curAnimPlaySpeed = this->skelAnime.playSpeed; + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } - return ret; + return didAnimChange; } /** @@ -1651,7 +1651,7 @@ void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]); // Move the sitting Goron forward, since their spawn location is the same as their standing counterpart. - if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) { Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset, &newSittingStretcherPos); @@ -1701,7 +1701,7 @@ void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) { Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->curAnimIndex = -1; + this->animIndex = ENGO_ANIM_NONE; EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); this->sleepState = ENGO_AWAKE; this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f; @@ -1899,7 +1899,7 @@ void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - this->curAnimIndex = ENGO_ANIM_INVALID; + this->animIndex = ENGO_ANIM_NONE; EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL); this->actor.draw = EnGo_Draw; @@ -2168,14 +2168,14 @@ void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) { switch (this->springArrivalCueId) { case 3: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && - (this->curAnimIndex == ENGO_ANIM_LOOK_AROUND)) { + (this->animIndex == ENGO_ANIM_LOOK_AROUND)) { EnGo_ChangeAnim(this, play, ENGO_ANIM_LOOK_AROUND_LOOPED); } break; case 4: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && - (this->curAnimIndex == ENGO_ANIM_SHOW)) { + (this->animIndex == ENGO_ANIM_SHOW)) { EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED); } break; @@ -2439,7 +2439,7 @@ void EnGo_Update(Actor* thisx, PlayState* play) { if (!(this->actionFlags & ENGO_FLAG_FROZEN)) { EnGo_UpdateEyes(this); - EnGo_UpdateAnimationToCurrent(this, play); + EnGo_UpdateSkelAnime(this, play); EnGo_UpdateAttentionTargetAndReactions(this, play); EnGo_UpdateSfx(this, play); } @@ -2599,7 +2599,7 @@ void EnGo_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); - if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + if (this->animIndex == ENGO_ANIM_SITTING_STRETCH) { Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY); } SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 0ada7fe1e..97959a03e 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -106,7 +106,7 @@ typedef struct EnGo { /* 0x390 */ u16 actionFlags; /* 0x392 */ u16 lastTextId; /* 0x394 */ u8 springArrivalCueId; - /* 0x398 */ f32 curAnimPlaySpeed; + /* 0x398 */ f32 animPlaySpeed; /* 0x39C */ f32 iceBlockScale; /* 0x3A0 */ f32 iceBlockAlpha; /* 0x3A4 */ f32 scaleFactor; @@ -132,7 +132,7 @@ typedef struct EnGo { /* 0x3CE */ s16 fidgetTableY[ENGO_FIDGET_TABLE_LEN]; /* 0x3D4 */ s16 surprisePhase; /* 0x3D8 */ MsgEventFunc msgEventFunc; - /* 0x3DC */ s32 curAnimIndex; + /* 0x3DC */ s32 animIndex; /* 0x3E0 */ UNK_TYPE1 unk3E0[0x4]; /* 0x3E4 */ s32 indexPathPoint; /* 0x3E8 */ s32 indexEffect; diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index 148b2d116..aa6eb041f 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -674,6 +674,7 @@ void func_80940090(EnGoroiwa* this, PlayState* play) { sp10C.x = this->actor.world.pos.x; sp10C.y = this->actor.world.pos.y + this->unk_1DC; sp10C.z = this->actor.world.pos.z; + //! FAKE: if (1) {} spD8 = spEC * 150.0f; spA8 = 0x10000 / spD8; @@ -1117,8 +1118,8 @@ void func_809419D0(EnGoroiwa* this) { void func_80941A10(EnGoroiwa* this, PlayState* play) { static EnGoroiwaUnkFunc D_80942E94[] = { - &func_8093F498, - &func_8093F34C, + func_8093F498, + func_8093F34C, }; static u16 D_80942E9C[][2] = { { NA_SE_EV_BIGBALL_ROLL - SFX_FLAG, NA_SE_EV_BIGBALL_ROLL_SR - SFX_FLAG }, @@ -1507,6 +1508,9 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { this->actor.floorBgId = 50; } break; + + default: + break; } func_8093FAA4(this, play); diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index 3c0d97d20..90b39f860 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -75,8 +75,9 @@ typedef enum { /* 4 */ DRAGONFLY_ANIM_HOVER, /* 5 */ DRAGONFLY_ANIM_DAMAGE, /* 6 */ DRAGONFLY_ANIM_DEAD, - /* 7 */ DRAGONFLY_ANIM_FALL -} EnGrasshopperAnim; + /* 7 */ DRAGONFLY_ANIM_FALL, + /* 8 */ DRAGONFLY_ANIM_MAX +} DragonflyAnimation; static s32 sOccupiedIndices[] = { false, false, false, false, false, @@ -333,7 +334,7 @@ void EnGrasshopper_Destroy(Actor* thisx, PlayState* play) { sOccupiedIndices[this->index] = false; } -static AnimationHeader* sAnimations[] = { +static AnimationHeader* sAnimations[DRAGONFLY_ANIM_MAX] = { &gDragonflyRaiseTailAnim, // DRAGONFLY_ANIM_RAISE_TAIL &gDragonflyLowerTailAnim, // DRAGONFLY_ANIM_LOWER_TAIL &gDragonflyFlyAnim, // DRAGONFLY_ANIM_FLY @@ -344,7 +345,7 @@ static AnimationHeader* sAnimations[] = { &gDragonflyFallAnim, // DRAGONFLY_ANIM_FALL }; -static u8 sAnimationModes[] = { +static u8 sAnimationModes[DRAGONFLY_ANIM_MAX] = { ANIMMODE_ONCE, // DRAGONFLY_ANIM_RAISE_TAIL ANIMMODE_ONCE, // DRAGONFLY_ANIM_LOWER_TAIL ANIMMODE_LOOP, // DRAGONFLY_ANIM_FLY @@ -358,15 +359,15 @@ static u8 sAnimationModes[] = { void EnGrasshopper_ChangeAnim(EnGrasshopper* this, s32 animIndex) { f32 morphFrames; - this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]); + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); morphFrames = 0.0f; if ((animIndex == DRAGONFLY_ANIM_ATTACK) || (animIndex == DRAGONFLY_ANIM_HOVER) || (animIndex == DRAGONFLY_ANIM_DAMAGE)) { morphFrames = -3.0f; } - Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->endFrame, sAnimationModes[animIndex], - morphFrames); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[animIndex], morphFrames); } void EnGrasshopper_RaiseTail(EnGrasshopper* this) { @@ -389,7 +390,7 @@ void EnGrasshopper_LowerTail(EnGrasshopper* this) { void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { if (this->decision == DRAGONFLY_DECISION_ATTACK) { EnGrasshopper_SetupAttack(this); } else { @@ -580,6 +581,9 @@ void EnGrasshopper_Bank(EnGrasshopper* this, PlayState* play) { this->actionFunc = EnGrasshopper_RoamInCircles; } break; + + default: + break; } } @@ -735,7 +739,7 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.y, this->targetApproachPos.y, 0.1f, this->approachSpeed); Math_ApproachF(&this->approachSpeed, 10.0f, 0.1f, 1.0f); Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0xA); - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { EnGrasshopper_SetupWaitAfterAttack(this); } } @@ -831,7 +835,7 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; } - if (curFrame >= this->endFrame) { + if (curFrame >= this->animEndFrame) { this->actor.flags &= ~ACTOR_FLAG_10; EnGrasshopper_SetupFall(this); } diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index cf0e50cbe..a07091dd8 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -91,7 +91,7 @@ typedef struct EnGrasshopper { /* 0x035E */ s16 type; /* 0x0360 */ f32 dragonflyScale; /* 0x0364 */ f32 angularVelocity; - /* 0x0368 */ f32 endFrame; + /* 0x0368 */ f32 animEndFrame; /* 0x036C */ f32 approachSpeed; /* 0x0370 */ f32 baseFlyHeight; /* 0x0374 */ f32 targetPosY; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index e3ddfee6a..55bd83106 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -250,6 +250,9 @@ void func_80997E4C(EnGs* this, PlayState* play) { case ENGS_2: this->unk_210 = this->unk_195 + 0x20F7; break; + + default: + break; } Message_ContinueTextbox(play, this->unk_210); break; @@ -260,6 +263,9 @@ void func_80997E4C(EnGs* this, PlayState* play) { } } break; + + default: + break; } } @@ -329,6 +335,9 @@ void func_8099807C(EnGs* this, PlayState* play) { func_809984F4(this, play); } break; + + default: + break; } break; @@ -339,6 +348,9 @@ void func_8099807C(EnGs* this, PlayState* play) { case 26: func_80997D14(this, play); break; + + default: + break; } } @@ -444,6 +456,9 @@ void func_8099874C(EnGs* this, PlayState* play) { case 4: phi_v0 = func_809995A4(this, play); break; + + default: + break; } if (phi_v0 == 0) { @@ -483,6 +498,9 @@ void func_8099874C(EnGs* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_77_20); } break; + + default: + break; } if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) { @@ -754,16 +772,16 @@ void func_80999584(Color_RGB8* arg0, Color_RGB8* arg1) { } s32 func_809995A4(EnGs* this, PlayState* play) { - static Color_RGB8 flashColours[] = { + static Color_RGB8 sFlashColours[] = { { 255, 50, 50 }, { 50, 50, 255 }, { 255, 255, 255 }, }; - static Vec3f dustAccel = { 0.0f, -0.3f, 0.0f }; - static Color_RGBA8 dustPrim = { 200, 200, 200, 128 }; - static Color_RGBA8 dustEnv = { 100, 100, 100, 0 }; - static Vec3f bomb2Velocity = { 0.0f, 0.0f, 0.0f }; - static Vec3f bomb2Accel = { 0.0f, 0.0f, 0.0f }; + static Vec3f sDustAccel = { 0.0f, -0.3f, 0.0f }; + static Color_RGBA8 sDustPrimColor = { 200, 200, 200, 128 }; + static Color_RGBA8 sDustEnvColor = { 100, 100, 100, 0 }; + static Vec3f sBomb2Velocity = { 0.0f, 0.0f, 0.0f }; + static Vec3f sBomb2Accel = { 0.0f, 0.0f, 0.0f }; s32 sp7C = -1; if (this->unk_19D == 0) { @@ -784,18 +802,18 @@ s32 func_809995A4(EnGs* this, PlayState* play) { u8 pad; this->unk_1D4--; - func_80999584(&this->unk_1FA, &flashColours[2]); + func_80999584(&this->unk_1FA, &sFlashColours[2]); if (this->unk_1D4 < 80) { if ((this->unk_1D4 % 20) < 8) { if (this->unk_1D4 < 20) { if ((this->unk_1D4 % 20) == 7) { - func_80999584(&this->unk_1FA, &flashColours[0]); + func_80999584(&this->unk_1FA, &sFlashColours[0]); this->unk_1F4 = this->unk_1FA; Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E); this->unk_200 = 0.0f; } } else if ((this->unk_1D4 % 20) == 7) { - func_80999584(&this->unk_1FA, &flashColours[1]); + func_80999584(&this->unk_1FA, &sFlashColours[1]); this->unk_1F4 = this->unk_1FA; Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N); this->unk_200 = 0.0f; @@ -826,7 +844,8 @@ s32 func_809995A4(EnGs* this, PlayState* play) { sp6C.y = this->actor.world.pos.y + 7.0f; sp6C.z = this->actor.world.pos.z + (2.0f * sp60.z); - func_800B0EB0(play, &sp6C, &sp60, &dustAccel, &dustPrim, &dustEnv, Rand_ZeroFloat(50.0f) + 200.0f, 40, 15); + func_800B0EB0(play, &sp6C, &sp60, &sDustAccel, &sDustPrimColor, &sDustEnvColor, + Rand_ZeroFloat(50.0f) + 200.0f, 40, 15); } Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG); @@ -856,7 +875,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { sp54.y = this->actor.world.pos.y; sp54.z = this->actor.world.pos.z; Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); - EffectSsBomb2_SpawnLayered(play, &sp54, &bomb2Velocity, &bomb2Accel, 100, 20); + EffectSsBomb2_SpawnLayered(play, &sp54, &sBomb2Velocity, &sBomb2Accel, 100, 20); this->unk_1D4 = 10; this->unk_19A |= 8; this->unk_216 = 0; diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index d51cf7703..7fcf32bf4 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -61,18 +61,32 @@ s32 sGuardCount = 0; s32 D_80ABBE20 = 0; -static u16 sTextIDs[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C }; +static u16 sTextIds[] = { 0x0824, 0x0825, 0x0826, 0x082D, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C }; s16 D_80ABBE38[] = { 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0002 }; -static AnimationHeader* sAnimations[] = { - &gDekuPalaceGuardWaitAnim, - &gDekuPalaceGuardWalkAnim, - &gDekuPalaceGuardDigAnim, - &gDekuPalaceGuardWalkAnim, +typedef enum { + /* -1 */ GUARD_NUTS_ANIM_NONE = -1, + /* 0 */ GUARD_NUTS_ANIM_WAIT_HEAD_TILT, + /* 1 */ GUARD_NUTS_ANIM_WALK, + /* 2 */ GUARD_NUTS_ANIM_DIG, + /* 3 */ GUARD_NUTS_ANIM_WALK_2, + /* 4 */ GUARD_NUTS_ANIM_MAX +} EnGuardNutsAnimation; + +static AnimationHeader* sAnimations[GUARD_NUTS_ANIM_MAX] = { + &gDekuPalaceGuardWaitAnim, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT + &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK + &gDekuPalaceGuardDigAnim, // GUARD_NUTS_ANIM_DIG + &gDekuPalaceGuardWalkAnim, // GUARD_NUTS_ANIM_WALK_2 }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE }; +static u8 sAnimationModes[GUARD_NUTS_ANIM_MAX] = { + ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WAIT_HEAD_TILT + ANIMMODE_LOOP, // GUARD_NUTS_ANIM_WALK + ANIMMODE_ONCE, // GUARD_NUTS_ANIM_DIG + ANIMMODE_ONCE, // GUARD_NUTS_ANIM_WALK_2 +}; static TexturePtr sEyeTextures[] = { gDekuPalaceGuardEyeOpenTex, @@ -80,13 +94,6 @@ static TexturePtr sEyeTextures[] = { gDekuPalaceGuardEyeClosedTex, }; -typedef enum { - /* 0 */ WAIT_HEAD_TILT_ANIM, - /* 1 */ WALK_ANIM, - /* 2 */ DIG_ANIM, - /* 3 */ WALK_ANIM_2 -} EnGuardNutsAnim; - typedef enum { /* 0 */ GUARD_NUTS_WAIT_STATE, /* 1 */ GUARD_NUTS_TALKING_STATE, @@ -123,20 +130,20 @@ void EnGuardNuts_Destroy(Actor* thisx, PlayState* play) { } /** - * @brief Changes the animation to the provided index. Updates animIndex and animFrameCount for the animation. + * @brief Changes the animation to the provided index. Updates animIndex and animEndFrame for the animation. * * @param this * @param animIndex the index of sAnimations to change to */ void EnGuardNuts_ChangeAnim(EnGuardNuts* this, s32 animIndex) { this->animIndex = animIndex; - this->animFrameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animFrameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -2.0f); } void EnGuardNuts_SetupWait(EnGuardNuts* this) { - EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT); this->state = GUARD_NUTS_WAIT_STATE; this->actionFunc = EnGuardNuts_Wait; } @@ -169,22 +176,22 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { // No place for an outsider this->guardTextIndex = 3; } - this->actor.textId = sTextIDs[this->guardTextIndex]; + this->actor.textId = sTextIds[this->guardTextIndex]; phi_a1 = this->actor.world.rot.y; if (D_80ABBE20 == 2) { EnGuardNuts_Burrow(this, play); return; } if (D_80ABBE20 == 1) { - if (this->animIndex != WALK_ANIM) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM); + if (this->animIndex != GUARD_NUTS_ANIM_WALK) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK); } phi_a1 = (this->actor.home.rot.y + 0x8000); } if (fabsf((f32)(this->actor.shape.rot.y - phi_a1)) < 100.0f) { this->actor.shape.rot.y = phi_a1; - if ((D_80ABBE20 == 1) && (this->animIndex != WALK_ANIM_2)) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM_2); + if ((D_80ABBE20 == 1) && (this->animIndex != GUARD_NUTS_ANIM_WALK_2)) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK_2); } } else { Math_SmoothStepToS(&this->actor.shape.rot.y, phi_a1, 1, 0xBB8, 0); @@ -199,7 +206,7 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { } void func_80ABB540(EnGuardNuts* this) { - EnGuardNuts_ChangeAnim(this, WALK_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WALK); this->targetHeadPos.x = this->targetHeadPos.y = 0; this->timer = 16; this->state = GUARD_NUTS_TALKING_STATE; @@ -216,7 +223,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { if (fabsf((this->actor.shape.rot.y - yaw)) < 100.0f) { this->actor.shape.rot.y = yaw; curFrame = this->skelAnime.curFrame; - if ((curFrame < this->animFrameCount) || (this->guardTextIndex >= 7)) { + if ((curFrame < this->animEndFrame) || (this->guardTextIndex >= 7)) { SkelAnime_Update(&this->skelAnime); } } else { @@ -226,8 +233,8 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) { this->targetHeadPos.y = 0; this->targetHeadPos.x = 0; - if ((this->guardTextIndex == 3) && (this->animIndex == WAIT_HEAD_TILT_ANIM)) { - EnGuardNuts_ChangeAnim(this, WAIT_HEAD_TILT_ANIM); + if ((this->guardTextIndex == 3) && (this->animIndex == GUARD_NUTS_ANIM_WAIT_HEAD_TILT)) { + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_WAIT_HEAD_TILT); } if (Message_ShouldAdvance(play)) { if (D_80ABBE38[this->guardTextIndex] != 1) { @@ -238,7 +245,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { EnGuardNuts_Burrow(this, play); } else { this->guardTextIndex++; - Message_StartTextbox(play, sTextIDs[this->guardTextIndex], &this->actor); + Message_StartTextbox(play, sTextIds[this->guardTextIndex], &this->actor); if (D_80ABBE38[this->guardTextIndex] == 2) { D_80ABBE20 = 1; } @@ -271,7 +278,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { void EnGuardNuts_Burrow(EnGuardNuts* this, PlayState* play) { Vec3f digPos; - EnGuardNuts_ChangeAnim(this, DIG_ANIM); + EnGuardNuts_ChangeAnim(this, GUARD_NUTS_ANIM_DIG); Math_Vec3f_Copy(&digPos, &this->actor.world.pos); digPos.y = this->actor.floorHeight; EffectSsHahen_SpawnBurst(play, &digPos, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -287,7 +294,7 @@ void EnGuardNuts_SetupUnburrow(EnGuardNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; SkelAnime_Update(&this->skelAnime); - if (this->animFrameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->state = GUARD_NUTS_BURROWED_STATE; this->actionFunc = EnGuardNuts_Unburrow; this->actor.world.rot.y = this->actor.home.rot.y; @@ -327,7 +334,7 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 20; } } - if ((this->animIndex == WALK_ANIM) && + if ((this->animIndex == GUARD_NUTS_ANIM_WALK) && (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h index 8cbe26f03..e07e70eaf 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h @@ -25,7 +25,7 @@ typedef struct EnGuardNuts { /* 0x228 */ Vec3f guardPos; /* 0x234 */ Vec3s headRot; /* 0x23A */ Vec3s targetHeadPos; - /* 0x240 */ f32 animFrameCount; + /* 0x240 */ f32 animEndFrame; /* 0x244 */ ColliderCylinder collider; } EnGuardNuts; // size = 0x290 diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index 28b37cc91..92afb3083 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -5,7 +5,6 @@ */ #include "z_en_guruguru.h" -#include "objects/object_fu/object_fu.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -62,9 +61,27 @@ static ColliderCylinderInit sCylinderInit = { { 15, 20, 0, { 0, 0, 0 } }, }; -static AnimationHeader* sAnimations[] = { &gGuruGuruPlayStillAnim, &gGuruGuruPlayAndMoveHeadAnim }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP }; -static f32 sPlaySpeeds[] = { 1.0f, 1.0f }; +typedef enum { + /* 0 */ GURU_GURU_ANIM_PLAY_STILL, + /* 1 */ GURU_GURU_ANIM_PLAY_MOVE_HEAD, + /* 2 */ GURU_GURU_ANIM_MAX +} GuruGuruAnimation; + +static AnimationHeader* sAnimations[GURU_GURU_ANIM_MAX] = { + &gGuruGuruPlayStillAnim, // GURU_GURU_ANIM_PLAY_STILL + &gGuruGuruPlayAndMoveHeadAnim, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + +static u8 sAnimationModes[GURU_GURU_ANIM_MAX] = { + ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_STILL + ANIMMODE_LOOP, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + +static f32 sPlaySpeeds[GURU_GURU_ANIM_MAX] = { + 1.0f, // GURU_GURU_ANIM_PLAY_STILL + 1.0f, // GURU_GURU_ANIM_PLAY_MOVE_HEAD +}; + static TexturePtr sEyeTextures[] = { gGuruGuruEyeClosedTex, gGuruGuruEyeAngryTex }; static TexturePtr sMouthTextures[] = { gGuruGuruMouthOpenTex, gGuruGuruMouthAngryTex }; @@ -74,7 +91,7 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGuruGuruSkel, &gGuruGuruPlayStillAnim, this->jointTable, - this->morphTable, 16); + this->morphTable, GURU_GURU_LIMB_MAX); this->actor.targetMode = TARGET_MODE_0; if (this->actor.params != 2) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -106,8 +123,8 @@ void EnGuruguru_Destroy(Actor* thisx, PlayState* play) { } void EnGuruguru_ChangeAnim(EnGuruguru* this, s32 animIndex) { - this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[animIndex], sPlaySpeeds[animIndex], 0.0f, this->animEndFrame, sAnimationModes[animIndex], -4.0f); } @@ -115,7 +132,7 @@ void EnGuruguru_DoNothing(EnGuruguru* this, PlayState* play) { } void func_80BC6E10(EnGuruguru* this) { - EnGuruguru_ChangeAnim(this, 0); + EnGuruguru_ChangeAnim(this, GURU_GURU_ANIM_PLAY_STILL); this->textIdIndex = 0; this->unk270 = 0; if (this->actor.params == 0) { @@ -373,7 +390,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { s32 EnGuruguru_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGuruguru* this = THIS; - if (limbIndex == 14) { + if (limbIndex == GURU_GURU_LIMB_HEAD) { rot->x += this->headXRot; rot->z += this->headZRot; } diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h index 0158e3ddc..4913d4124 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h @@ -2,6 +2,7 @@ #define Z_EN_GURUGURU_H #include "global.h" +#include "objects/object_fu/object_fu.h" struct EnGuruguru; @@ -10,8 +11,8 @@ typedef void (*EnGuruguruActionFunc)(struct EnGuruguru*, PlayState*); typedef struct EnGuruguru { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[16]; - /* 0x1E8 */ Vec3s morphTable[16]; + /* 0x188 */ Vec3s jointTable[GURU_GURU_LIMB_MAX]; + /* 0x1E8 */ Vec3s morphTable[GURU_GURU_LIMB_MAX]; /* 0x248 */ EnGuruguruActionFunc actionFunc; /* 0x24C */ s16 headZRot; /* 0x24E */ s16 headXRot; @@ -22,7 +23,7 @@ typedef struct EnGuruguru { /* 0x264 */ s16 unusedTimer; // set to 6 and decremented, but never has any effect /* 0x266 */ s16 unk266; /* 0x268 */ s16 unk268; - /* 0x26C */ f32 frameCount; + /* 0x26C */ f32 animEndFrame; /* 0x270 */ u8 unk270; /* 0x272 */ s16 unk272; // set, but never used /* 0x274 */ s16 textIdIndex; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 20be1b6c8..7e30676e2 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -631,7 +631,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->cutsceneAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE; + this->csAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE; if (this->drum != NULL) { Actor_Kill(this->drum); this->drum = NULL; @@ -639,50 +639,49 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { break; case 2: - this->cutsceneAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM; + this->csAnimIndex = EN_JG_ANIM_TAKING_OUT_DRUM; break; case 3: - this->cutsceneAnimIndex = EN_JG_ANIM_DRUM_IDLE; + this->csAnimIndex = EN_JG_ANIM_DRUM_IDLE; break; case 4: - this->cutsceneAnimIndex = EN_JG_ANIM_PLAYING_DRUM; + this->csAnimIndex = EN_JG_ANIM_PLAYING_DRUM; break; case 5: - this->cutsceneAnimIndex = EN_JG_ANIM_THINKING; + this->csAnimIndex = EN_JG_ANIM_THINKING; break; case 6: - this->cutsceneAnimIndex = EN_JG_ANIM_REMEMBERING; + this->csAnimIndex = EN_JG_ANIM_REMEMBERING; break; case 7: - this->cutsceneAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING; + this->csAnimIndex = EN_JG_ANIM_STRONG_REMEMBERING; break; case 8: - this->cutsceneAnimIndex = EN_JG_ANIM_DEPRESSED; + this->csAnimIndex = EN_JG_ANIM_DEPRESSED; break; case 9: - this->cutsceneAnimIndex = EN_JG_ANIM_CRADLE; + this->csAnimIndex = EN_JG_ANIM_CRADLE; break; default: - this->cutsceneAnimIndex = EN_JG_ANIM_IDLE; + this->csAnimIndex = EN_JG_ANIM_IDLE; break; } - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->cutsceneAnimIndex); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->csAnimIndex); } if (!(this->flags & FLAG_DRUM_SPAWNED) && - (((this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) && + (((this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) && Animation_OnFrame(&this->skelAnime, 14.0f) && (this->action != EN_JG_ACTION_LULLABY_INTRO_CS)) || - (((this->cutsceneAnimIndex == EN_JG_ANIM_DRUM_IDLE) || - (this->cutsceneAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) && + (((this->csAnimIndex == EN_JG_ANIM_DRUM_IDLE) || (this->csAnimIndex == EN_JG_ANIM_PLAYING_DRUM)) && (this->action == EN_JG_ACTION_LULLABY_INTRO_CS)))) { this->flags |= FLAG_DRUM_SPAWNED; this->drum = Actor_SpawnAsChildAndCutscene( @@ -691,7 +690,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { this->actor.params, this->actor.csId, this->actor.halfDaysBits, NULL); } - if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { + if (this->csAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) { if (Animation_OnFrame(&this->skelAnime, 23.0f)) { Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_WOOD_BOUND_S); } else if (Animation_OnFrame(&this->skelAnime, 38.0f)) { diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.h b/src/overlays/actors/ovl_En_Jg/z_en_jg.h index b63f34dce..30c84973c 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h @@ -35,7 +35,7 @@ typedef struct EnJg { /* 0x3B0 */ Vec3f breathVelocity; /* 0x3BC */ Vec3f breathAccel; /* 0x3C8 */ s16 csId; - /* 0x3CA */ u8 cutsceneAnimIndex; + /* 0x3CA */ u8 csAnimIndex; /* 0x3CB */ u8 cueId; /* 0x3CC */ u16 flags; /* 0x3CE */ u16 textId; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index 694b9271d..b5819e333 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -17,7 +17,7 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play); void EnKgy_Update(Actor* thisx, PlayState* play); void EnKgy_Draw(Actor* thisx, PlayState* play); -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames); +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames); EnKbt* EnKgy_FindZubora(PlayState* play); ObjIcePoly* EnKgy_FindIceBlock(PlayState* play); void func_80B40D30(PlayState* play); @@ -109,7 +109,7 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); } -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames) { +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { static AnimationHeader* sAnimations[] = { &object_kgy_Anim_004B98, &object_kgy_Anim_0008FC, &object_kgy_Anim_00292C, &object_kgy_Anim_0042E4, &object_kgy_Anim_0101F0, &object_kgy_Anim_001764, &object_kgy_Anim_003334, &object_kgy_Anim_010B84, @@ -117,7 +117,7 @@ void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 mode, f32 morphFrames) { }; Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[animIndex]), mode, morphFrames); + Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); this->unk_2D2 = animIndex; } diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index 04b5b73b8..8113526f2 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -147,11 +147,11 @@ TexturePtr sMonkeyFaceTextures[] = { object_mnk_Tex_017120, object_mnk_Tex_017920, object_mnk_Tex_018120, }; -void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_MonkeyTiedUp_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sMonkeyTiedUpAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyTiedUpAnimations[animIndex]->common), animMode, morphFrames); Animation_Change(&this->propSkelAnime, sMonkeyTiedUpPoleAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyTiedUpPoleAnimations[animIndex]->common), animMode, morphFrames); switch (animIndex) { case MONKEY_TIEDUP_ANIM_KICKAROUND: @@ -184,11 +184,11 @@ void EnMnk_MonkeyTiedUp_SetNewAnim(EnMnk* this, s32 animIndex) { } } -void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_MonkeyHanging_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sMonkeyHangingAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyHangingAnimations[animIndex]->common), animMode, morphFrames); Animation_Change(&this->propSkelAnime, sMonkeyHangingRopeAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyHangingRopeAnimations[animIndex]->common), animMode, morphFrames); this->animIndex = animIndex; } @@ -196,7 +196,7 @@ void EnMnk_MonkeyHanging_SetAnim(EnMnk* this, s32 animIndex) { EnMnk_MonkeyHanging_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); } -void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrames) { +void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 animMode, f32 morphFrames) { s32 pad; if (animIndex == 100) { @@ -204,10 +204,10 @@ void EnMnk_Monkey_ChangeAnim(EnMnk* this, s32 animIndex, u8 mode, f32 morphFrame } if ((animIndex == 4) || (animIndex == 6)) { Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], -1.0f, - Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, mode, morphFrames); + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), 0.0f, animMode, morphFrames); } else { Animation_Change(&this->skelAnime, sMonkeyAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), mode, morphFrames); + Animation_GetLastFrame(&sMonkeyAnimations[animIndex]->common), animMode, morphFrames); } this->unk_3E0 = 0; this->animIndex = animIndex; diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index ad20b3d07..9aa218e2f 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1182,37 +1182,40 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) { this->cueId = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_IDLE; + this->csAnimIndex = EN_RAILGIBUD_ANIM_IDLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_IDLE); break; case 2: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START; + this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START; Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED2); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_START); break; case 3: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION; + this->csAnimIndex = EN_RAILGIBUD_ANIM_CONVULSION; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_CONVULSION); break; case 4: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START; + this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_START; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_START); break; case 5: - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_WALK; + this->csAnimIndex = EN_RAILGIBUD_ANIM_WALK; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK); break; + + default: + break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) { - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP; + if (this->csAnimIndex == EN_RAILGIBUD_ANIM_SLUMP_START) { + this->csAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_LOOP); - } else if (this->cutsceneAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) { - this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP; + } else if (this->csAnimIndex == EN_RAILGIBUD_ANIM_ARMS_UP_START) { + this->csAnimIndex = EN_RAILGIBUD_ANIM_ARMS_UP_LOOP; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_ARMS_UP_LOOP); EnRailgibud_SetupSinkIntoGround(this); } diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h index 42b41ed8a..c9536d235 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -52,7 +52,7 @@ typedef struct EnRailgibud { /* 0x3EE */ s16 shouldWalkForwardNextFrame; // Only used by the "main" Gibdo /* 0x3F0 */ union { s16 grabState; - s16 cutsceneAnimIndex; + s16 csAnimIndex; }; /* 0x3F2 */ union { s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c8330232d..d54b83753 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7580,8 +7580,8 @@ 0x80949BD4:("EnClearTag_DrawEffects",), 0x8094DEE0:("func_8094DEE0",), 0x8094DF90:("func_8094DF90",), - 0x8094DFF8:("func_8094DFF8",), - 0x8094E054:("func_8094E054",), + 0x8094DFF8:("EnGm_UpdateSkelAnime",), + 0x8094E054:("EnGm_ChangeAnim",), 0x8094E0F8:("func_8094E0F8",), 0x8094E1DC:("func_8094E1DC",), 0x8094E278:("func_8094E278",), @@ -9696,7 +9696,7 @@ 0x80A12774:("EnGo_UpdateTalking",), 0x80A12868:("EnGo_DetectCollisions",), 0x80A12954:("EnGo_UpdateSpringArrivalCutscene",), - 0x80A12A64:("EnGo_UpdateAnimationToCurrent",), + 0x80A12A64:("EnGo_UpdateSkelAnime",), 0x80A12B78:("EnGo_UpdateSfx",), 0x80A12C48:("EnGo_ChangeAnim",), 0x80A12D6C:("EnGo_UpdateEyes",), @@ -15302,8 +15302,8 @@ 0x80BB1C8C:("func_80BB1C8C",), 0x80BB1D04:("func_80BB1D04",), 0x80BB1D64:("func_80BB1D64",), - 0x80BB1FCC:("func_80BB1FCC",), - 0x80BB2020:("func_80BB2020",), + 0x80BB1FCC:("EnGeg_UpdateSkelAnime",), + 0x80BB2020:("EnGeg_ChangeAnim",), 0x80BB2088:("func_80BB2088",), 0x80BB217C:("func_80BB217C",), 0x80BB221C:("func_80BB221C",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 4b224cf3f..90edb9bf5 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -14139,7 +14139,7 @@ 0x80B3A9E4:("D_80B3A9E4","f32","",0x4), 0x80B3A9E8:("D_80B3A9E8","f32","",0x4), 0x80B3BEE0:("En_Gg2_InitVars","UNK_TYPE1","",0x1), - 0x80B3BF00:("D_80B3BF00","UNK_TYPE4","",0x4), + 0x80B3BF00:("sAnimationInfo","UNK_TYPE4","",0x4), 0x80B3C080:("D_80B3C080","UNK_TYPE4","",0x4), 0x80B3C084:("D_80B3C084","UNK_TYPE4","",0x4), 0x80B3C088:("D_80B3C088","UNK_TYPE1","",0x1), From d4c41f02633ca059d93122fe750d77062984b099 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 26 Sep 2023 21:24:52 -0700 Subject: [PATCH 32/74] z_message_nes (1 NON_MATCHING) (#1394) * Bring over progress * Some docs * scratch urls + format * Fixes * Match Message_DrawTextNES * String macros * color structs --- include/functions.h | 21 +- include/macros.h | 1 + include/variables.h | 10 +- include/z64save.h | 17 +- spec | 1 - src/code/z_message.c | 8 +- src/code/z_message_nes.c | 1728 ++++++++++++++++++++++++++++++-- tools/disasm/functions.txt | 10 +- tools/disasm/variables.txt | 13 +- tools/sizes/code_functions.csv | 6 +- 10 files changed, 1707 insertions(+), 108 deletions(-) diff --git a/include/functions.h b/include/functions.h index c24ab583d..88d8468e9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1009,14 +1009,14 @@ void func_80148B98(PlayState* play, u8 arg1); void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); void func_80149C18(PlayState* play); // void Message_FindMessage(void); -void func_80149F74(PlayState* play, u32** ppuParm2); +void Message_DrawItemIcon(PlayState* play, Gfx** gfxP); void Message_HandleOcarina(PlayState* play); void func_8014ADBC(PlayState* play, UNK_PTR puParm2); void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); -void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos); +void Message_SetupLoadItemIcon(PlayState* play); // void func_8014CCB4(void); // void func_8014CDF0(void); -// void func_8014CFDC(void); +// void Message_SetupLoadItemIcon(void); void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_8014D62C(void); // void func_8014D7B4(void); @@ -1046,19 +1046,12 @@ void Message_Update(PlayState* play); void func_801586A4(PlayState* play); void Message_Init(PlayState* play); void Message_FindMessageNES(PlayState* play, u16 textId); -// void Message_LoadCharNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -// void Message_LoadPluralRupeesNES(void); -// void Message_LoadLocalizedRupeesNES(void); -// void Message_LoadRupeesNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -// void Message_LoadTimeNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void Message_LoadOwlWarpTextNES(void); -// void func_80159438(void); -void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3); -// void func_8015A144(void); -void func_8015B198(PlayState* play); +void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos); +void Message_DecodeNES(PlayState* play); +void Message_FindCreditsMessage(PlayState* play, u16 textId); void Message_FindCreditsMessage(PlayState* play, u16 textId); void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); -// void func_8015F8A8(UNK_TYPE4 ctxt); +void Message_DecodeCredits(PlayState* play); uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); diff --git a/include/macros.h b/include/macros.h index 46932a0a6..bc7439394 100644 --- a/include/macros.h +++ b/include/macros.h @@ -38,6 +38,7 @@ #define DAY_LENGTH (CLOCK_TIME(24, 0)) #define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000)) +#define TIME_TO_HOURS_F_ALT(time) (TIME_TO_MINUTES_F(time) / 60.0f) #define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f #define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f))) #define TIME_TO_SECONDS_F(time) ((time) * ((24.0f * 60.0f * 60.0f) / 0x10000)) diff --git a/include/variables.h b/include/variables.h index e071b2036..83427f55f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -334,9 +334,9 @@ extern char D_801D039C[]; // extern UNK_TYPE1 D_801D045A; // extern UNK_TYPE1 D_801D0462; //extern UNK_TYPE1 D_801D0468; -// extern UNK_TYPE1 D_801D0470; -// extern char D_801D06F0[]; -// extern UNK_TYPE1 D_801D0710; +// extern UNK_TYPE1 sNESFontWidths; +// extern char sRupeesTextLocalization[]; +// extern UNK_TYPE1 sRupeesTextLength; // extern char D_801D0714[]; // extern UNK_TYPE1 D_801D07C4; // extern UNK_TYPE1 D_801D07DC; @@ -348,8 +348,8 @@ extern char D_801D039C[]; // extern UNK_TYPE1 D_801D08CC; // extern UNK_TYPE1 D_801D08D8; // extern UNK_TYPE1 D_801D08E4; -// extern UNK_TYPE1 D_801D08E8; -// extern UNK_TYPE1 D_801D0900; +// extern UNK_TYPE1 sMaskCodeTextENG; +// extern UNK_TYPE1 sMaskCodeTextLengthENG; extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; // extern UNK_TYPE1 D_801D0B8C; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; diff --git a/include/z64save.h b/include/z64save.h index c8075d9ec..1db5a566d 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -154,12 +154,22 @@ typedef enum { /* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52 } HudVisibility; +// Based on sRupeesTextLocalization +typedef enum Language { + /* 0 */ LANGUAGE_JPN, + /* 1 */ LANGUAGE_ENG, + /* 2 */ LANGUAGE_GER, + /* 3 */ LANGUAGE_FRE, + /* 4 */ LANGUAGE_SPA, + /* 5 */ LANGUAGE_MAX +} Language; + typedef enum HighScore { /* 0 */ HS_BANK_RUPEES, /* 1 */ HS_UNK_1, /* 2 */ HS_FISHING, // Fishing flags /* 3 */ HS_BOAT_ARCHERY, - /* 4 */ HS_HOSRE_BACK_BALLOON, + /* 4 */ HS_HORSE_BACK_BALLOON, /* 5 */ HS_LOTTERY_GUESS, // Lottery code chosen by player (only uses lower three hex digits) /* 6 */ HS_SHOOTING_GALLERY, // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. /* 7 */ HS_MAX @@ -520,6 +530,7 @@ typedef enum { (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10)) #define HIGH_SCORE(type) (gSaveContext.save.saveInfo.highScores[(type)]) +#define GET_HIGH_SCORE(type) ((void)0, gSaveContext.save.saveInfo.highScores[(type)]) #define HS_GET_BANK_RUPEES() (HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF) #define HS_SET_BANK_RUPEES(rupees) (HIGH_SCORE(HS_BANK_RUPEES) = ((HIGH_SCORE(HS_BANK_RUPEES) & 0xFFFF0000) | (rupees))) @@ -529,8 +540,8 @@ typedef enum { #define HS_GET_BOAT_ARCHERY_HIGH_SCORE() ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF0000) >> 0x10) #define HS_SET_BOAT_ARCHERY_HIGH_SCORE(score) (HIGH_SCORE(HS_BOAT_ARCHERY) = ((HIGH_SCORE(HS_BOAT_ARCHERY) & 0xFFFF) | ((u16)(score) << 0x10))) -#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HOSRE_BACK_BALLOON)) -#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HOSRE_BACK_BALLOON) = (time)) +#define HS_GET_HORSE_BACK_BALLOON_TIME() ((s32)HIGH_SCORE(HS_HORSE_BACK_BALLOON)) +#define HS_SET_HORSE_BACK_BALLOON_TIME(time) (HIGH_SCORE(HS_HORSE_BACK_BALLOON) = (time)) #define HS_GET_LOTTERY_CODE_GUESS() (HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF) #define HS_SET_LOTTERY_CODE_GUESS(guess) (HIGH_SCORE(HS_LOTTERY_GUESS) = ((HIGH_SCORE(HS_LOTTERY_GUESS) & 0xFFFF0000) | ((guess) & 0xFFFF))) diff --git a/spec b/spec index ae8d89485..2e2878c69 100644 --- a/spec +++ b/spec @@ -531,7 +531,6 @@ beginseg include "build/data/code/z_message.data.o" include "build/data/code/z_message.bss.o" include "build/src/code/z_message_nes.o" - include "build/data/code/z_message_nes.data.o" include "build/src/code/z_message_staff.o" include "build/src/code/z_player_call.o" include "build/src/code/z_shrink_window.o" diff --git a/src/code/z_message.c b/src/code/z_message.c index 37e392aec..a922f237b 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -223,7 +223,7 @@ void Message_FindMessage(PlayState* play, u16 textId) { font->messageEnd = nextSegment - foundSegment; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149F74.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawItemIcon.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") @@ -272,7 +272,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CDF0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CFDC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s") @@ -363,7 +363,7 @@ void func_80151A68(PlayState* play, u16 textId) { msgCtx->msgLength = 0; func_80150D08(play, textId); func_80150A84(play); - func_8015B198(play); + Message_DecodeNES(play); msgCtx->msgMode = 0x45; msgCtx->textDelayTimer = 0; msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; @@ -548,7 +548,7 @@ void func_80153E7C(PlayState* play, Gfx** gfxP) { } else if (play->msgCtx.textIsCredits) { Message_DrawTextCredits(play, gfxP); } else { - func_8015966C(play, gfxP, 0); + Message_DrawTextNES(play, gfxP, 0); } } diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 1dcb16474..6ace9acc1 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -2,59 +2,20 @@ #include "message_data_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#if 0 - -//fontWidth -extern f32 D_801D0470[159]; - -//rupeesTextLocalization -u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN - { "rubin(e)" }, //DE - { "rubis" }, //FR - { "rupia(s)" } //SPA - }; - -// rupeesTextLength -u8 D_801D0710[4] = {8,8,5,8}; - -// sOwlWarpText -char D_801D0714[OWL_WARP_MAX][16] = { - "Great Bay Coast", // OWL_WARP_GREAT_BAY_COAST - "Zora Cape", // OWL_WARP_ZORA_CAPE - "Snowhead", // OWL_WARP_SNOWHEAD - "Mountain Village", // OWL_WARP_MOUNTAIN_VILLAGE - "Clock Town", // OWL_WARP_CLOCK_TOWN - "Milk Road", // OWL_WARP_MILK_ROAD - "Woodfall", // OWL_WARP_WOODFALL - "Southern Swamp", // OWL_WARP_SOUTHERN_SWAMP - "Ikana Canyon", // OWL_WARP_IKANA_CANYON - "Stone Tower", // OWL_WARP_STONE_TOWER - "Entrance", // OWL_WARP_ENTRANCE +// fontWidth +f32 sNESFontWidths[160] = { + 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, + 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, + 13.0f, 12.0f, 9.0f, 11.0f, 11.0f, 8.0f, 8.0f, 12.0f, 10.0f, 4.0f, 8.0f, 10.0f, 8.0f, 13.0f, 11.0f, 13.0f, + 9.0f, 13.0f, 10.0f, 10.0f, 9.0f, 10.0f, 11.0f, 15.0f, 11.0f, 10.0f, 10.0f, 7.0f, 10.0f, 7.0f, 10.0f, 9.0f, + 5.0f, 8.0f, 9.0f, 8.0f, 9.0f, 9.0f, 6.0f, 9.0f, 8.0f, 4.0f, 6.0f, 8.0f, 4.0f, 12.0f, 9.0f, 9.0f, + 9.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 9.0f, 12.0f, 8.0f, 9.0f, 8.0f, 7.0f, 5.0f, 7.0f, 10.0f, 6.0f, + 12.0f, 12.0f, 12.0f, 12.0f, 11.0f, 8.0f, 8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 10.0f, 13.0f, 13.0f, + 13.0f, 13.0f, 10.0f, 10.0f, 10.0f, 10.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, + 4.0f, 4.0f, 4.0f, 4.0f, 8.0f, 9.0f, 9.0f, 9.0f, 9.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 11.0f, 6.0f, + 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, 14.0f, }; -// sOwlWarpTextLength -s16 D_801D07C4[OWL_WARP_MAX] = { - 15, // OWL_WARP_GREAT_BAY_COAST - 9, // OWL_WARP_ZORA_CAPE - 8, // OWL_WARP_SNOWHEAD - 16, // OWL_WARP_MOUNTAIN_VILLAGE - 10, // OWL_WARP_CLOCK_TOWN - 9, // OWL_WARP_MILK_ROAD - 8, // OWL_WARP_WOODFALL - 14, // OWL_WARP_SOUTHERN_SWAMP - 12, // OWL_WARP_IKANA_CANYON - 11, // OWL_WARP_STONE_TOWER - 8, // OWL_WARP_ENTRANCE -}; - -#endif - -extern f32 D_801D0470[159]; -extern u8 D_801D06F0[4][8]; -extern u8 D_801D0710[4]; -extern u8 D_801D0714[OWL_WARP_MAX][16]; -extern s16 D_801D07C4[OWL_WARP_MAX]; - void Message_FindMessageNES(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; Font* font = &msgCtx->font; @@ -102,7 +63,7 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse s32 o = *offset; f32 f = *arg3; - msgCtx->decodedBuffer.schar[p] = 0x20; + msgCtx->decodedBuffer.schar[p] = ' '; p++; Font_LoadCharNES(play, 'R', o); o += FONT_CHAR_TEX_SIZE; @@ -134,6 +95,25 @@ void Message_LoadPluralRupeesNES(PlayState* play, s16* decodedBufPos, s32* offse *arg3 = f; } +#define RUPEES_STR_EN "Rupee(s)" +#define RUPEES_STR_DE "Rubin(e)" +#define RUPEES_STR_FR "Rubis" +#define RUPEES_STR_SPA "Rupia(s)" + +char sRupeesTextLocalization[LANGUAGE_MAX - 1][8] = { + RUPEES_STR_EN, // EN + RUPEES_STR_DE, // DE + RUPEES_STR_FR, // FR + RUPEES_STR_SPA, // SPA +}; + +u8 sRupeesTextLength[LANGUAGE_MAX - 1] = { + sizeof(RUPEES_STR_EN) - 1, + sizeof(RUPEES_STR_DE) - 1, + sizeof(RUPEES_STR_FR) - 1, + sizeof(RUPEES_STR_SPA) - 1, +}; + void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; @@ -144,15 +124,15 @@ void Message_LoadLocalizedRupeesNES(PlayState* play, s16* decodedBufPos, s32* of msgCtx->decodedBuffer.schar[p] = ' '; p++; - for (j = 0; j < D_801D0710[gSaveContext.options.language - 1]; j++) { - Font_LoadCharNES(play, D_801D06F0[gSaveContext.options.language - 1][j], o); - msgCtx->decodedBuffer.schar[p] = D_801D06F0[gSaveContext.options.language - 1][j]; + for (j = 0; j < sRupeesTextLength[gSaveContext.options.language - 1]; j++) { + Font_LoadCharNES(play, sRupeesTextLocalization[gSaveContext.options.language - 1][j], o); + msgCtx->decodedBuffer.schar[p] = sRupeesTextLocalization[gSaveContext.options.language - 1][j]; o += FONT_CHAR_TEX_SIZE; p++; } p--; - f += 16.0f * msgCtx->textCharScale * (D_801D0710[gSaveContext.options.language - 1] + 1); + f += 16.0f * msgCtx->textCharScale * (sRupeesTextLength[gSaveContext.options.language - 1] + 1); *decodedBufPos = p; *offset = o; *arg3 = f; @@ -201,7 +181,7 @@ void Message_LoadRupeesNES(PlayState* play, s16* decodedBufPos, s32* offset, f32 *arg3 = f; } -void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* decodedBufPos) { +void Message_LoadTimeNES(PlayState* play, u8 curChar, s32* offset, f32* arg3, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; s32 o = *offset; @@ -211,12 +191,11 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* f32 timeLeftInMinutes; s16 i; - if (arg1 == 0xCF) { + if (curChar == 0xCF) { timeLeft = TIME_UNTIL_MOON_CRASH; } else { timeLeft = TIME_UNTIL_NEW_DAY; } - timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft); digits[0] = 0; @@ -252,6 +231,46 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* *arg3 = f; } +#define GREAT_BAY_COAST_STR "Great Bay Coast" +#define ZORA_CAPE_STR "Zora Cape" +#define SNOWHEAD_STR "Snowhead" +#define MOUNTAIN_VILLAGE_STR "Mountain Village" +#define CLOCK_TOWN_STR "Clock Town" +#define MILK_ROAD_STR "Milk Road" +#define WOODFALL_STR "Woodfall" +#define SOUTHERN_SWAMP_STR "Southern Swamp" +#define IKANA_CANYON_STR "Ikana Canyon" +#define STONE_TOWER_STR "Stone Tower" +#define ENTRANCE_STR "Entrance" + +char sOwlWarpTextENG[OWL_WARP_MAX][16] = { + GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST + ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE + SNOWHEAD_STR, // OWL_WARP_SNOWHEAD + MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE + CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN + MILK_ROAD_STR, // OWL_WARP_MILK_ROAD + WOODFALL_STR, // OWL_WARP_WOODFALL + SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP + IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON + STONE_TOWER_STR, // OWL_WARP_STONE_TOWER + ENTRANCE_STR, // OWL_WARP_ENTRANCE +}; + +s16 sOwlWarpTextLengthENG[OWL_WARP_MAX] = { + sizeof(GREAT_BAY_COAST_STR) - 1, // OWL_WARP_GREAT_BAY_COAST + sizeof(ZORA_CAPE_STR) - 1, // OWL_WARP_ZORA_CAPE + sizeof(SNOWHEAD_STR) - 1, // OWL_WARP_SNOWHEAD + sizeof(MOUNTAIN_VILLAGE_STR) - 1, // OWL_WARP_MOUNTAIN_VILLAGE + sizeof(CLOCK_TOWN_STR) - 1, // OWL_WARP_CLOCK_TOWN + sizeof(MILK_ROAD_STR) - 1, // OWL_WARP_MILK_ROAD + sizeof(WOODFALL_STR) - 1, // OWL_WARP_WOODFALL + sizeof(SOUTHERN_SWAMP_STR) - 1, // OWL_WARP_SOUTHERN_SWAMP + sizeof(IKANA_CANYON_STR) - 1, // OWL_WARP_IKANA_CANYON + sizeof(STONE_TOWER_STR) - 1, // OWL_WARP_STONE_TOWER + sizeof(ENTRANCE_STR) - 1, // OWL_WARP_ENTRANCE +}; + void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; s16 p = *decodedBufPos; @@ -267,18 +286,18 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de } else { owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP]; } - stringLimit = D_801D07C4[owlWarpId]; + stringLimit = sOwlWarpTextLengthENG[owlWarpId]; for (i = 0; i < stringLimit; i++) { - msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i]; + msgCtx->decodedBuffer.schar[p] = sOwlWarpTextENG[owlWarpId][i]; currentChar = msgCtx->decodedBuffer.schar[p]; if (currentChar != ' ') { - Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o); + Font_LoadCharNES(play, sOwlWarpTextENG[owlWarpId][i], o); o += FONT_CHAR_TEX_SIZE; } currentChar = msgCtx->decodedBuffer.schar[p]; p++; - f += (D_801D0470[currentChar - ' '] * msgCtx->textCharScale); + f += (sNESFontWidths[currentChar - ' '] * msgCtx->textCharScale); } p--; @@ -288,8 +307,1585 @@ void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* de *arg2 = f; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_80159438.s") +void Message_GetTimerDigitsNES(OSTime time, s16* digits) { + OSTime t = time; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015966C.s") + // 6 minutes + digits[0] = t / SECONDS_TO_TIMER(360); + t -= (digits[0] * SECONDS_TO_TIMER(360)); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/func_8015B198.s") + // minutes + digits[1] = t / SECONDS_TO_TIMER(60); + t -= (digits[1] * SECONDS_TO_TIMER(60)); + + digits[2] = '\''; + + // 10 seconds + digits[3] = t / SECONDS_TO_TIMER(10); + t -= digits[3] * SECONDS_TO_TIMER(10); + + // seconds + digits[4] = t / SECONDS_TO_TIMER(1); + t -= digits[4] * SECONDS_TO_TIMER(1); + + digits[5] = '"'; + + // 100 milliseconds + digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + + // 10 milliseconds + digits[7] = t; + + digits[0] += '0'; + digits[1] += '0'; + digits[3] += '0'; + digits[4] += '0'; + digits[6] += '0'; + digits[7] += '0'; +} + +Color_RGB16 D_801D07DC[] = { + { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 }, + { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D080C[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D083C[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D086C[] = { + { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +Color_RGB16 D_801D089C[] = { + { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +u8 D_801D08CC[] = { + 0x02, 0x01, 0x03, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0x06, +}; + +void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos) { + MessageContext* msgCtx = &play->msgCtx; + u16 i; + u16 j; + Font* font = &msgCtx->font; + u16 charTexIndex; + u16 stateTimerHi; + Gfx* gfx = *gfxP; + u16 character; + s16 sp130; + s16 sp12E; + s16 sp12C; + s16 sp12A; + + msgCtx->textPosX = msgCtx->unk11F1A[0] + msgCtx->unk11FF8; + msgCtx->textPosY = msgCtx->unk11FFA; + + sp130 = 0; + if (!msgCtx->textIsCredits) { + msgCtx->textPosY = msgCtx->unk11FFA; + } else { + msgCtx->textPosY = 48; + } + + if (msgCtx->itemId != 0xFE) { + Message_DrawItemIcon(play, &gfx); + } + + msgCtx->textColorR = msgCtx->unk120C8; + msgCtx->textColorG = msgCtx->unk120CA; + msgCtx->textColorB = msgCtx->unk120CC; + + charTexIndex = 0; + + for (i = textDrawPos; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.schar[i]; + + switch (character) { + case 0x0: + if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: + case 0x8: + if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2) && + (character == 0x2)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + if (msgCtx->unk120D6) { + msgCtx->unk120D4 += 25; + if (msgCtx->unk120D4 >= 100) { + msgCtx->unk120D6 = false; + } + } else { + msgCtx->unk120D4 -= 25; + if (msgCtx->unk120D4 <= -100) { + msgCtx->unk120D6 = true; + } + } + + if (D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4 < 0) { + msgCtx->textColorR = 0; + } else { + msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r + msgCtx->unk120D4; + } + + if (D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4 >= 255) { + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g; + } else { + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g + msgCtx->unk120D4; + } + + if (D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4 < 0) { + msgCtx->textColorB = 0; + } else { + msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b + msgCtx->unk120D4; + } + + } else if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->textColorR = D_801D089C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D089C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D089C[(s16)(character - 1)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textColorR = D_801D07DC[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D07DC[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D07DC[(s16)(character - 1)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textColorR = D_801D086C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D086C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D086C[(s16)(character - 1)].b; + } else { + msgCtx->textColorR = D_801D080C[(s16)(character - 1)].r; + msgCtx->textColorG = D_801D080C[(s16)(character - 1)].g; + msgCtx->textColorB = D_801D080C[(s16)(character - 1)].b; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x20: // ` ` + msgCtx->textPosX += 6; + break; + + case 0x11: + msgCtx->textPosY += msgCtx->unk11FFC; + // fallthrough + case 0x13: + sp130++; + + msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8; + if (msgCtx->choiceNum == 1) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 16; + } else { + msgCtx->textPosX += 50; + } + } else if (msgCtx->choiceNum == 2) { + if (msgCtx->unk120D8 != 3) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 10; + } else { + msgCtx->textPosX += 57; + } + } else if (sp130 >= 2) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 10; + } else { + msgCtx->textPosX += 57; + } + } + } + continue; + + case 0x10: + case 0x12: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + msgCtx->unk120CE = msgCtx->textColorR; + msgCtx->unk120D0 = msgCtx->textColorG; + msgCtx->unk120D2 = msgCtx->textColorB; + } + *gfxP = gfx; + return; + + case 0x17: // MESSAGE_QUICKTEXT_ENABLE + if ((i + 1) == msgCtx->textDrawPos) { + j = i; + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26))) { + //! FAKE: + dummy:; + while (true) { + if ((msgCtx->decodedBuffer.schar[j] != 0x18) && (msgCtx->decodedBuffer.schar[j] != 0x1A) && + (msgCtx->decodedBuffer.schar[j] != 0x19) && (msgCtx->decodedBuffer.schar[j] != 0xE0) && + (msgCtx->decodedBuffer.schar[j] != 0x10) && (msgCtx->decodedBuffer.schar[j] != 0x12)) { + j++; + continue; + } + break; + } + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + } + break; + + case 0x18: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0x1B: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x1C: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->unk11F0C == 3) { + msgCtx->textboxEndType = 0x55; + } else { + msgCtx->textboxEndType = 0x50; + } + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x1D: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x52; + stateTimerHi = msgCtx->decodedBuffer.schar[++i] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[++i]; + msgCtx->stateTimer = stateTimerHi; + Font_LoadMessageBoxEndIcon(font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x1E: // MESSAGE_SFX + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2]; + Audio_PlaySfx(stateTimerHi); + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos += 2; + } + i += 2; + break; + + case 0x1F: + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + msgCtx->msgMode = MSGMODE_9; + stateTimerHi = msgCtx->decodedBuffer.schar[i + 1] << 8; + stateTimerHi |= msgCtx->decodedBuffer.schar[i + 2]; + msgCtx->textDelayTimer = stateTimerHi; + } + i += 2; + break; + + case 0xA: + i++; + character = msgCtx->decodedBuffer.schar[i]; + switch (character) { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + msgCtx->textDelay = character - 0x0; + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + } + break; + + case 0xC1: // MESSAGE_BACKGROUND + msgCtx->textPosX = 0x2D; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 0x60) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 0xC1) << 2, (msgCtx->unk12012 + 0x31) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 0x60) << 2, + (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 0x60) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 0xC0) << 2, (msgCtx->unk12012 + 0x30) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + msgCtx->textPosX += 32; + break; + + case 0xC2: + msgCtx->textboxEndType = 0x10; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(font, 2); + if (msgCtx->unk120D8 != 3) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26); + } + } + break; + + case 0xC3: + msgCtx->textboxEndType = 0x11; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(font, 2); + if (msgCtx->unk120D8 != 3) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0xE); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x1A); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x26); + } + } + break; + + case 0xCC: + msgCtx->textboxEndType = 0x60; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD0: + msgCtx->textboxEndType = 0x61; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD1: + msgCtx->textboxEndType = 0x62; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0xD2: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x41; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + break; + + case 0xD5: + msgCtx->textboxEndType = 0x63; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(font, 1); + } + break; + + case 0x15: + case 0xBF: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == 0) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + if (character == 0xBF) { + Font_LoadMessageBoxEndIcon(font, 1); + } else { + Font_LoadMessageBoxEndIcon(font, 0); + } + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } else { + Audio_PlaySfx(NA_SE_NONE); + } + } + *gfxP = gfx; + return; + + case 0x1A: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x30; + } + *gfxP = gfx; + return; + + case 0x19: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x40; + Font_LoadMessageBoxEndIcon(font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + case 0xE0: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = 0x42; + Font_LoadMessageBoxEndIcon(font, 1); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + switch (character) { + case 0x8169: + case 0x8175: + msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale); + break; + + case 0x8148: + case 0x8149: + msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale); + break; + + default: + break; + } + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { + Audio_PlaySfx(NA_SE_NONE); + } + if ((character >= 0xB0) && (character <= 0xBB)) { + sp12E = msgCtx->textColorR; + sp12C = msgCtx->textColorG; + sp12A = msgCtx->textColorB; + msgCtx->textColorR = D_801D083C[(s16)D_801D08CC[character - 0xB0]].r; + msgCtx->textColorG = D_801D083C[(s16)D_801D08CC[character - 0xB0]].g; + msgCtx->textColorB = D_801D083C[(s16)D_801D08CC[character - 0xB0]].b; + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + msgCtx->textColorR = sp12E; + msgCtx->textColorG = sp12C; + msgCtx->textColorB = sp12A; + } else if (msgCtx->msgMode >= MSGMODE_OWL_SAVE_0) { + if ((i < (msgCtx->decodedTextLen - 6)) || (i >= (msgCtx->decodedTextLen - 4))) { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + } else { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + charTexIndex += FONT_CHAR_TEX_SIZE; + + //! @TODO: u8 character but > 0x255 cases + switch (character) { + case 0x8144: + msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale); + break; + + case 0x816A: + case 0x8176: + msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale); + break; + + case 0x8141: + case 0x8142: + case 0x8168: + msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale); + break; + + case 0x8194: + msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale); + break; + + default: + if (((msgCtx->textboxEndType == 0x62) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 4) >= i)) || + ((msgCtx->textboxEndType == 0x63) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 2) >= i)) || + ((msgCtx->textboxEndType == 0x60) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 2) >= i)) || + ((msgCtx->textboxEndType == 0x61) && (i >= msgCtx->unk120C0) && + ((msgCtx->unk120C0 + 1) >= i))) { + msgCtx->textPosX += (s32)(16.0f * msgCtx->textCharScale); + } else { + msgCtx->textPosX += (s32)(sNESFontWidths[character - ' '] * msgCtx->textCharScale); + } + break; + } + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = 0; + if (msgCtx->msgMode == MSGMODE_9) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + } + } else { + msgCtx->textDelayTimer--; + } + + *gfxP = gfx; +} + +char D_801D08D8[][4] = { + "Fast", + "----", + "Slow", +}; + +u8 D_801D08E4[] = { + 0x01, + 0x03, + 0x04, + 0x02, +}; + +#define RED_STR "RED" +#define BLUE_STR "BLUE" +#define YELLOW_STR "YELLOW" +#define GREEN_STR "GREEN" + +char sMaskCodeTextENG[][6] = { + RED_STR, + BLUE_STR, + YELLOW_STR, + GREEN_STR, +}; + +u8 sMaskCodeTextLengthENG[] = { + sizeof(RED_STR) - 1, + sizeof(BLUE_STR) - 1, + sizeof(YELLOW_STR) - 1, + sizeof(GREEN_STR) - 1, +}; + +#ifdef NON_MATCHING +// https://decomp.me/scratch/w2ckG +void Message_DecodeNES(PlayState* play) { + f32 var_fs0; + MessageContext* msgCtx = &play->msgCtx; + u8* ptr; + Font* font = &msgCtx->font; // spE0 + Player* player; // spDC + s16 decodedBufPos; // spDA + s16 value; + u32 timeToMoonCrash; + s16 i; // s1 + s16 spD0; // numLines + s16 digits[4]; // spC8/CA/CC/CE + s16 spC6; + f32 timeInSeconds; + s32 charTexIdx; // spBC + s16 loadChar; + s16 spA8[8]; + f32 spA4; + s16 playerNameLen; // s0 + s16 var_v1_3; + u8 curChar; // sp78 + s8 charOffset; + s16 temp_s2_2; + s16 var_s2_9; + + player = GET_PLAYER(play); + decodedBufPos = 0; + spC6 = 0; + charTexIdx = 0; + spD0 = 0; + msgCtx->textDelayTimer = 0; + msgCtx->textDelay = msgCtx->textDelayTimer; + msgCtx->textFade = 0; + spA4 = 0.0f; + font->unk_11D88 = (font->unk_11D88 ^ 1) & 1; + Message_SetupLoadItemIcon(play); + + while (true) { + curChar = font->msgBuf.schar[msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos]; + + if ((curChar == 0x10) || (curChar == 0x12) || (curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D) || + (curChar == 0x19) || (curChar == 0xE0) || (curChar == 0xBF) || (curChar == 0x15) || (curChar == 0x1A)) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + msgCtx->unk11FFA = msgCtx->textboxY + 2; + } else { + msgCtx->unk11FFA = msgCtx->textboxY + 8; + } + msgCtx->unk11F1A[spC6] = 0; + if (msgCtx->unk11F18 != 0) { + msgCtx->unk11F1A[spC6] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) / 2; + } + spA4 = 0.0f; + if (curChar == 0x12) { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spD0 < 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(10); + } else if (spD0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(11); + } else if (spD0 == 3) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(12); + } + } + } else { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spD0 == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(10); + } else if (spD0 == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(11); + } else if (spD0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + XREG(13) + XREG(12); + } + } + } + + //! FAKE: Perhaps a locally required temp for scoping + dummy:; + if ((curChar == 0x1B) || (curChar == 0x1C) || (curChar == 0x1D)) { + //! FAKE: & 0xFFFF to fix regalloc + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 1] & 0xFFFF; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[msgCtx->msgBufPos + 2]; + msgCtx->msgBufPos += 3; + } + msgCtx->decodedTextLen = decodedBufPos; + msgCtx->unk120D8 = spD0; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + msgCtx->unk120C8 = msgCtx->unk120CE; + msgCtx->unk120CA = msgCtx->unk120D0; + msgCtx->unk120CC = msgCtx->unk120D2; + break; + } else if (curChar == 0x16) { + // Substitute the player name control character for the file's player name. + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + curChar = gSaveContext.save.saveInfo.playerData.playerName[i]; + if (curChar == 0x3E) { + curChar = ' '; + } else if (curChar == 0x40) { + curChar = '.'; + } else if (curChar == 0x3F) { + curChar = '-'; + } else if (curChar < 0xA) { + charOffset = curChar; + curChar = '0' + charOffset; + } else if (curChar < 0x24) { + charOffset = curChar; + curChar = 'A' - 10 + charOffset; + } else if (curChar < 0x3E) { + charOffset = curChar; + curChar = 'a' - 36 + charOffset; + } + if (curChar != ' ') { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = curChar; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xC1) { + //! TODO: + 0x900 on the first one? + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + spD0 = 2; + spC6 = 2; + msgCtx->unk12012 = msgCtx->textboxY + 8; + msgCtx->unk11F18 = 1; + msgCtx->unk12010 = XREG(47); + } else if (curChar == 0xC2) { + msgCtx->unk11F18 = 0; + msgCtx->choiceNum = 2; + } else if (curChar == 0xC3) { + msgCtx->unk11F18 = 0; + msgCtx->choiceNum = 3; + msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16; + } else if (curChar == 0xC4) { + Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8); + + loadChar = false; + for (i = 0; i < 5; i++) { + if ((i == 1) || (spA8[i + 3] != '0')) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, spA8[i + 3], &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if ((curChar == 0xC5) || (curChar == 0xC6) || (curChar == 0xC7) || (curChar == 0xC8) || + (curChar == 0xC9)) { + Message_GetTimerDigitsNES(((void)0, gSaveContext.timerCurTimes[curChar - 0xC4]), spA8); + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '0'))) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, spA8[i], &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0xCA) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x22; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, 0x27, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27; + } + } + spA4 += 6 * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xCB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = Flags_GetAllTreasure(play); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if (curChar == 0xCC) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 2; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + + for (i = 0; i < 3; i++) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + Message_LoadLocalizedRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xCD) { + digits[0] = digits[1] = 0; + digits[2] = msgCtx->bankRupeesSelected; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupeesSelected); + } else if (curChar == 0xCE) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = msgCtx->bankRupees; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4, msgCtx->bankRupees); + } else if (curChar == 0xCF) { + Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos); + } else if (curChar == 0xC) { + digits[0] = digits[1] = 0; + digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 1) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 21)) { + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 2) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 22)) { + Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else if ((gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 3) || + (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] == 23)) { + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else { + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xD) { + digits[0] = digits[1] = 0; + digits[2] = Inventory_GetSkullTokenCount(play->sceneId); + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + if ((Inventory_GetSkullTokenCount(play->sceneId) == 1) || + (Inventory_GetSkullTokenCount(play->sceneId) == 21)) { + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 2) || + (Inventory_GetSkullTokenCount(play->sceneId) == 22)) { + Message_LoadCharNES(play, 'n', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else if ((Inventory_GetSkullTokenCount(play->sceneId) == 3) || + (Inventory_GetSkullTokenCount(play->sceneId) == 23)) { + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'd', &charTexIdx, &spA4, decodedBufPos); + } else { + Message_LoadCharNES(play, 't', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xE) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + + decodedBufPos--; + } else if (curChar == 0xF) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0xD0) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + for (i = 0; i < 2; i++) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xD1) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 5; i++) { + msgCtx->unk12054[i] = 1; + Message_LoadCharNES(play, '1', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xD3) { + if (gSaveContext.save.timeSpeedOffset == 18) { + var_s2_9 = 0; + } else if (gSaveContext.save.timeSpeedOffset == 0) { + var_s2_9 = 1; + } else { + var_s2_9 = 2; + } + + for (i = 0; i < 4; i++) { + msgCtx->decodedBuffer.schar[decodedBufPos] = D_801D08D8[var_s2_9][i]; + Font_LoadCharNES(play, D_801D08D8[var_s2_9][i], charTexIdx); + decodedBufPos++; + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos--; + spA4 += 3.0f * (16.0f * msgCtx->textCharScale); + msgCtx->choiceIndex = var_s2_9; + } else if (curChar == 0xD4) { + Message_LoadOwlWarpTextNES(play, &charTexIdx, &spA4, &decodedBufPos); + } else if (curChar == 0xD5) { + decodedBufPos++; + msgCtx->unk120BE = spC6; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 3; i++) { + msgCtx->unk12054[i] = 1; + Font_LoadCharNES(play, '1', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '1'; + spA4 += 16.0f * msgCtx->textCharScale; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0xD6) { + for (i = 0; i < 6; i++) { + msgCtx->decodedBuffer.schar[decodedBufPos] = + (s8)D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])]; + decodedBufPos++; + Message_LoadCharNES(play, i + '1', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + msgCtx->decodedBuffer.schar[decodedBufPos] = 0; + } else if ((curChar >= 0xD7) && (curChar < 0xDB)) { + digits[0] = digits[1] = 0; + digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0xD7]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + } else if (curChar == 0xDB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xDC) || (curChar == 0xDD)) { + if (curChar == 0xDC) { + digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]; + digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]; + digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]; + } else { + digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8; + digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4; + digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF; + } + + for (i = 0; i < 3; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if (curChar == 0xDE) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)]; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadPluralRupeesNES(play, &decodedBufPos, &charTexIdx, &spA4); + } else if (curChar == 0xDF) { + for (i = 0; i < 5; i++) { + digits[i] = gSaveContext.save.saveInfo.bomberCode[i]; + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if ((curChar >= 0xE1) && (curChar < 0xE7)) { + msgCtx->decodedBuffer.schar[decodedBufPos] = + D_801D08E4[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])]; + temp_s2_2 = sMaskCodeTextLengthENG[( + (void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])]; + decodedBufPos++; + + for (i = 0; i < temp_s2_2; i++) { + Message_LoadCharNES( + play, + sMaskCodeTextENG[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0xE1)])] + [i], + &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + + msgCtx->decodedBuffer.schar[decodedBufPos] = 0; + } else if (curChar == 0xE7) { + timeToMoonCrash = TIME_UNTIL_MOON_CRASH; + digits[0] = 0; + digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash); + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + loadChar = false; + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadCharNES(play, digits[i] + '0', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + } + } + msgCtx->decodedBuffer.schar[decodedBufPos] = ' '; + decodedBufPos++; + Message_LoadCharNES(play, 'h', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'o', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'u', &charTexIdx, &spA4, decodedBufPos); + decodedBufPos++; + Message_LoadCharNES(play, 'r', &charTexIdx, &spA4, decodedBufPos); + if ((digits[0] != 0) || (digits[1] != 1)) { + decodedBufPos++; + Message_LoadCharNES(play, 's', &charTexIdx, &spA4, decodedBufPos); + } + } else if (curChar == 0xE8) { + Message_LoadTimeNES(play, curChar, &charTexIdx, &spA4, &decodedBufPos); + + } else if ((curChar == 0xF0) || (curChar == 0xF1) || (curChar == 0xF2) || (curChar == 0xF8)) { + if (curChar == 0xF8) { + value = (s32)HS_GET_HIGH_SCORE_3_LOWER(); + } else { + value = HIGH_SCORE(curChar - 0xF0); + } + if (curChar == 0xF2) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = (s16)((HIGH_SCORE((u8)font->msgBuf.schar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + } + digits[3] = value; + digits[0] = digits[1] = digits[2] = 0; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xF7) || (curChar == 0xF9) || (curChar == 0xFA) || (curChar == 0xFB) || + (curChar == 0xFC)) { + var_fs0 = 8.0f; + if (curChar == 0xF7) { + Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_UNK_1), spA8); + } else if (curChar == 0xF9) { + Message_GetTimerDigitsNES(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spA8); + } else { + Message_GetTimerDigitsNES( + ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0xFA]), spA8); + } + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spA8[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, spA8[i], charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = spA8[i]; + decodedBufPos++; + } else { + var_fs0 -= 1.0f; + } + } + spA4 += var_fs0 * (16.0f * msgCtx->textCharScale); + decodedBufPos--; + } else if ((curChar == 0xF3) || (curChar == 0xF4) || (curChar == 0xF5)) { + value = HIGH_SCORE(curChar - 0xF3 + HS_BOAT_ARCHERY); + digits[0] = digits[1] = digits[2] = 0; + digits[3] = value; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + if (i == 1) { + Font_LoadCharNES(play, '"', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = '"'; + decodedBufPos++; + } else if (i == 3) { + Font_LoadCharNES(play, 0x27, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = 0x27; + } + } + spA4 += 4.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xF6) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0xFD) || (curChar == 0xFE) || (curChar == 0xFF)) { + for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) { + if (gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0xFD)][i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.schar[decodedBufPos + i] = 0xFD; + + for (var_v1_3 = 0; var_v1_3 < FONT_CHAR_TEX_SIZE; var_v1_3 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 0] = ptr[var_v1_3 + 0]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 1] = ptr[var_v1_3 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 2] = ptr[var_v1_3 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v1_3 + 3] = ptr[var_v1_3 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spA4 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0xB) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadCharNES(play, digits[i] + '0', charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.schar[decodedBufPos] = digits[i] + '0'; + decodedBufPos++; + spA4 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if (curChar == 0x14) { + decodedBufPos--; + for (i = 0; i < font->msgBuf.schar[msgCtx->msgBufPos + 1]; i++) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = ' '; + spA4 += 6.0f; + } + msgCtx->msgBufPos++; + } else if ((curChar == 0x13) || (curChar == 0x11)) { + msgCtx->unk11F1A[spC6] = 0; + if (msgCtx->unk11F18 != 0) { + msgCtx->unk11F1A[spC6] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spA4) * 0.5f; + } + spC6++; + spA4 = 0.0f; + if (curChar == 0x11) { + spD0++; + } + } else if ((curChar == 0x17) || (curChar == 0x18) || (curChar == 0x1A)) { + // pass + } else if (curChar == 0xA) { + decodedBufPos++; + } else if (curChar == 0x1C) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if (curChar == 0x1E) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + Audio_PlaySfx((msgCtx->decodedBuffer.schar[decodedBufPos - 1] << 8) | + msgCtx->decodedBuffer.schar[decodedBufPos]); + } + } else if (curChar == 0x1F) { + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + msgCtx->decodedBuffer.schar[++decodedBufPos] = font->msgBuf.schar[++msgCtx->msgBufPos]; + } else if ((curChar != 0x20) && (curChar >= 9)) { + Font_LoadCharNES(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + spA4 += sNESFontWidths[curChar - ' '] * msgCtx->textCharScale; + } else if (curChar == 0x20) { + spA4 += 6.0f; + } + decodedBufPos++; + msgCtx->msgBufPos++; + } +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message_nes/Message_DecodeNES.s") +#endif diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d54b83753..d7350076d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2838,14 +2838,14 @@ 0x8014995C:("Message_DrawTextChar",), 0x80149C18:("func_80149C18",), 0x80149EBC:("Message_FindMessage",), - 0x80149F74:("func_80149F74",), + 0x80149F74:("Message_DrawItemIcon",), 0x8014AAD0:("Message_HandleOcarina",), 0x8014ADBC:("func_8014ADBC",), 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), 0x8014CDF0:("func_8014CDF0",), - 0x8014CFDC:("func_8014CFDC",), + 0x8014CFDC:("Message_SetupLoadItemIcon",), 0x8014D304:("func_8014D304",), 0x8014D62C:("func_8014D62C",), 0x8014D7B4:("func_8014D7B4",), @@ -2881,9 +2881,9 @@ 0x80158D98:("Message_LoadRupeesNES",), 0x80158FB0:("Message_LoadTimeNES",), 0x8015926C:("Message_LoadOwlWarpTextNES",), - 0x80159438:("func_80159438",), - 0x8015966C:("func_8015966C",), - 0x8015B198:("func_8015B198",), + 0x80159438:("Message_GetTimerDigitsNES",), + 0x8015966C:("Message_DrawTextNES",), + 0x8015B198:("Message_DecodeNES",), 0x8015E750:("Message_FindCreditsMessage",), 0x8015E7EC:("Message_DrawTextCredits",), 0x8015F8A8:("Message_DecodeCredits",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 90edb9bf5..f5905b769 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -2058,10 +2058,10 @@ 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1), 0x801D0462:("D_801D0462","UNK_TYPE1","",0x1), 0x801D0468:("D_801D0468","UNK_TYPE1","",0x1), - 0x801D0470:("D_801D0470","UNK_TYPE1","",0x1), - 0x801D06F0:("D_801D06F0","char","[]",0x18), + 0x801D0470:("sNESFontWidths","UNK_TYPE1","",0x1), + 0x801D06F0:("sRupeesTextLocalization","char","[]",0x18), 0x801D0708:("D_801D0708","char","[]",1), - 0x801D0710:("D_801D0710","UNK_TYPE1","",0x1), + 0x801D0710:("sRupeesTextLength","UNK_TYPE1","",0x1), 0x801D0714:("D_801D0714","char","[]",0x1), 0x801D0724:("D_801D0724","char","[]",0x1), 0x801D0730:("D_801D0730","char","[]",0x1), @@ -2083,14 +2083,13 @@ 0x801D07DC:("D_801D07DC","UNK_TYPE1","",0x1), 0x801D080C:("D_801D080C","UNK_TYPE1","",0x1), 0x801D083C:("D_801D083C","UNK_TYPE1","",0x1), - 0x801D086C:("D_801D086C","UNK_TYPE1","",0x1), - 0x801D0890:("D_801D0890","UNK_TYPE1","",0x1), + 0x801D086C:("D_801D086C","UNK_TYPE1","",0x30), 0x801D089C:("D_801D089C","UNK_TYPE1","",0x1), 0x801D08CC:("D_801D08CC","UNK_TYPE1","",0x1), 0x801D08D8:("D_801D08D8","UNK_TYPE1","",0x1), 0x801D08E4:("D_801D08E4","UNK_TYPE1","",0x1), - 0x801D08E8:("D_801D08E8","UNK_TYPE1","",0x1), - 0x801D0900:("D_801D0900","UNK_TYPE1","",0x1), + 0x801D08E8:("sMaskCodeTextENG","UNK_TYPE1","",0x1), + 0x801D0900:("sMaskCodeTextLengthENG","UNK_TYPE1","",0x1), 0x801D0B50:("Player_InitVars","ActorInit","",0x20), 0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38), 0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 767d81514..caaa33d73 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2350,16 +2350,16 @@ asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5 asm/non_matchings/code/z_message/func_8014995C.s,func_8014995C,0x8014995C,0xAF -asm/non_matchings/code/z_message/func_80149C18.s,func_80149C18,0x80149C18,0xA9 +asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149C18,0xA9 asm/non_matchings/code/z_message/Message_FindMessage.s,Message_FindMessage,0x80149EBC,0x2E -asm/non_matchings/code/z_message/func_80149F74.s,func_80149F74,0x80149F74,0x2D7 +asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149F74,0x2D7 asm/non_matchings/code/z_message/func_8014AAD0.s,func_8014AAD0,0x8014AAD0,0xBB asm/non_matchings/code/z_message/func_8014ADBC.s,func_8014ADBC,0x8014ADBC,0x654 asm/non_matchings/code/z_message/func_8014C70C.s,func_8014C70C,0x8014C70C,0x142 asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28 asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F asm/non_matchings/code/z_message/func_8014CDF0.s,func_8014CDF0,0x8014CDF0,0x7B -asm/non_matchings/code/z_message/func_8014CFDC.s,func_8014CFDC,0x8014CFDC,0xCA +asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s,Message_SetupLoadItemIcon,0x8014CFDC,0xCA asm/non_matchings/code/z_message/func_8014D304.s,func_8014D304,0x8014D304,0xCA asm/non_matchings/code/z_message/func_8014D62C.s,func_8014D62C,0x8014D62C,0x62 asm/non_matchings/code/z_message/func_8014D7B4.s,func_8014D7B4,0x8014D7B4,0xCB4 From 0fdd63a350c47b5da87a58f00855bc95b6a32b47 Mon Sep 17 00:00:00 2001 From: Zach North Date: Wed, 27 Sep 2023 23:19:28 -0400 Subject: [PATCH 33/74] Document object_mk (#1389) * Updated object_mk animation, limb, and skeleton names * Updated object_mk texture and DList names * Added comment to object_mk.xml * Remove "ing" from Anim names Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update z_en_mk.c to not use "ing" in names * Running formatter --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_mk.xml | 83 +++++++++++++------------ src/overlays/actors/ovl_En_Mk/z_en_mk.c | 12 ++-- src/overlays/actors/ovl_En_Mk/z_en_mk.h | 4 +- 3 files changed, 50 insertions(+), 49 deletions(-) diff --git a/assets/xml/objects/object_mk.xml b/assets/xml/objects/object_mk.xml index 087fcc9e0..457eadf28 100644 --- a/assets/xml/objects/object_mk.xml +++ b/assets/xml/objects/object_mk.xml @@ -1,45 +1,46 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index ac816517c..43f9a3d99 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -57,8 +57,8 @@ static ColliderCylinderInit sCylinderInit = { s32 func_809592E0(EnMk* this, s16 index) { AnimationHeader* sAnimations[] = { - &object_mk_Anim_001C38, &object_mk_Anim_000438, &object_mk_Anim_0007D8, - &object_mk_Anim_0010F4, &object_mk_Anim_001964, + &gMarineResearcherIdleAnim, &gMarineResearcherHeadWaggleAnim, &gMarineResearcherYellAnim, + &gMarineResearcherShakeInFearAnim, &gMarineResearcherStrokeChinAnim, }; if (index == this->unk_27C) { @@ -82,8 +82,8 @@ void EnMk_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -4.0f; this->actor.gravity = -1.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_mk_Skel_006CA0, &object_mk_Anim_001C38, this->jointTable, - this->morphTable, OBJECT_MK_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gMarineResearcherSkel, &gMarineResearcherIdleAnim, this->jointTable, + this->morphTable, MARINE_RESEARCHER_LIMB_MAX); this->unk_27C = -1; func_809592E0(this, 0); @@ -463,7 +463,7 @@ void EnMk_Update(Actor* thisx, PlayState* play) { s32 EnMk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnMk* this = THIS; - if (limbIndex == OBJECT_MK_LIMB_0B) { + if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) { rot->y -= this->unk_270.y; rot->z += this->unk_270.x; } @@ -475,7 +475,7 @@ Vec3f D_8095A2A0 = { 1000.0f, -100.0f, 0.0f }; void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnMk* this = THIS; - if (limbIndex == OBJECT_MK_LIMB_0B) { + if (limbIndex == MARINE_RESEARCHER_LIMB_HEAD) { Matrix_MultVec3f(&D_8095A2A0, &this->actor.focus.pos); } } diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.h b/src/overlays/actors/ovl_En_Mk/z_en_mk.h index 518b0406d..9d32e9374 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h @@ -12,8 +12,8 @@ typedef struct EnMk { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; - /* 0x1D4 */ Vec3s jointTable[OBJECT_MK_LIMB_MAX]; - /* 0x222 */ Vec3s morphTable[OBJECT_MK_LIMB_MAX]; + /* 0x1D4 */ Vec3s jointTable[MARINE_RESEARCHER_LIMB_MAX]; + /* 0x222 */ Vec3s morphTable[MARINE_RESEARCHER_LIMB_MAX]; /* 0x270 */ Vec3s unk_270; /* 0x276 */ s16 csIdList[2]; /* 0x27A */ u16 unk_27A; From 408a1bba5d879dd43ba40c279c0277c9d5bf78ac Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 12:58:00 +1000 Subject: [PATCH 34/74] Player Docs: Initial framework for "Action Change Lists" (#1397) * copy fig docs * adjust wording * another fix * fix bool * PR Suggestion --- .../actors/ovl_player_actor/z_player.c | 408 +++++++++++++----- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 26 +- 3 files changed, 318 insertions(+), 148 deletions(-) diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 22fca02c8..8c1de93e5 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -233,21 +233,21 @@ void Player_InitItemAction_SpawnExplosive(PlayState* play, Player* this); void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this); void Player_InitItemAction_5(PlayState* play, Player* this); -s32 func_80839518(Player* this, PlayState* play); -s32 func_808365DC(Player* this, PlayState* play); -s32 func_8083D23C(Player* this, PlayState* play); -s32 func_8083CCB4(Player* this, PlayState* play); -s32 func_808391D8(Player* this, PlayState* play); -s32 func_8083DFC4(Player* this, PlayState* play); -s32 func_8083A114(Player* this, PlayState* play); -s32 func_80848570(Player* this, PlayState* play); -s32 func_8083A580(Player* this, PlayState* play); -s32 func_8083D78C(Player* this, PlayState* play); -s32 func_80839B18(Player* this, PlayState* play); -s32 func_8083A274(Player* this, PlayState* play); -s32 func_80834DFC(Player* this, PlayState* play); -s32 func_80838A90(Player* this, PlayState* play); -s32 func_8083A0CC(Player* this, PlayState* play); +s32 Player_ActionChange_0(Player* this, PlayState* play); +s32 Player_ActionChange_1(Player* this, PlayState* play); +s32 Player_ActionChange_2(Player* this, PlayState* play); +s32 Player_ActionChange_3(Player* this, PlayState* play); +s32 Player_ActionChange_4(Player* this, PlayState* play); +s32 Player_ActionChange_5(Player* this, PlayState* play); +s32 Player_ActionChange_6(Player* this, PlayState* play); +s32 Player_ActionChange_7(Player* this, PlayState* play); +s32 Player_ActionChange_8(Player* this, PlayState* play); +s32 Player_ActionChange_9(Player* this, PlayState* play); +s32 Player_ActionChange_10(Player* this, PlayState* play); +s32 Player_ActionChange_11(Player* this, PlayState* play); +s32 Player_ActionChange_12(Player* this, PlayState* play); +s32 Player_ActionChange_13(Player* this, PlayState* play); +s32 Player_ActionChange_14(Player* this, PlayState* play); /* Init Mode functions */ void Player_InitMode_0(PlayState* play, Player* this); @@ -4817,37 +4817,203 @@ s32 Player_GetMovementSpeedAndYaw(Player* this, f32* outSpeedTarget, s16* outYaw return false; } - *outYawTarget += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + *outYawTarget += Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); return true; } +typedef enum ActionChangeIndex { + /* 0x0 */ PLAYER_ACTION_CHG_0, + /* 0x1 */ PLAYER_ACTION_CHG_1, + /* 0x2 */ PLAYER_ACTION_CHG_2, + /* 0x3 */ PLAYER_ACTION_CHG_3, + /* 0x4 */ PLAYER_ACTION_CHG_4, + /* 0x5 */ PLAYER_ACTION_CHG_5, + /* 0x6 */ PLAYER_ACTION_CHG_6, + /* 0x7 */ PLAYER_ACTION_CHG_7, + /* 0x8 */ PLAYER_ACTION_CHG_8, + /* 0x9 */ PLAYER_ACTION_CHG_9, + /* 0xA */ PLAYER_ACTION_CHG_10, + /* 0xB */ PLAYER_ACTION_CHG_11, + /* 0xC */ PLAYER_ACTION_CHG_12, + /* 0xD */ PLAYER_ACTION_CHG_13, + /* 0xE */ PLAYER_ACTION_CHG_14, + /* 0xF */ PLAYER_ACTION_CHG_MAX +} ActionChangeIndex; + /** - * The values of following arrays are used as indices for the `D_8085D054` array. + * The values of following arrays are used as indices for the `sPlayerActionChangeFuncs` array. * Each index correspond to a function which will be called sequentially until any of them return `true`. * Negative marks the end of the array. */ -s8 D_8085CFE4[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; -s8 D_8085CFEC[] = { 13, 1, 2, 5, 3, 4, 9, 10, 11, 7, 8, -6 }; -s8 D_8085CFF8[] = { 13, 1, 2, 3, 4, 9, 10, 11, 8, 7, -6 }; -s8 D_8085D004[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; -s8 D_8085D00C[] = { 13, 2, 4, 9, 10, 11, 12, 8, -7 }; -s8 D_8085D018[] = { -7 }; -s8 D_8085D01C[] = { 0, 11, 1, 2, 3, 5, 4, 9, 8, 7, -6 }; -s8 D_8085D028[] = { 0, 11, 1, 2, 3, 12, 5, 4, 9, 8, 7, -6 }; -s8 D_8085D034[] = { 13, 1, 2, 3, 12, 5, 4, 9, 10, 11, 8, 7, -6 }; -s8 D_8085D044[] = { 10, 8, -7 }; -s8 D_8085D048[] = { 0, 12, 5, 4, -14 }; -s8 D_8085D050[] = { 13, 2, -4 }; - -s32 (*D_8085D054[])(Player*, PlayState*) = { - func_80839518, func_808365DC, func_8083D23C, func_8083CCB4, func_808391D8, - func_8083DFC4, func_8083A114, func_80848570, func_8083A580, func_8083D78C, - func_80839B18, func_8083A274, func_80834DFC, func_80838A90, func_8083A0CC, +s8 sPlayerActionChangeList1[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_8, + /* 7 */ -PLAYER_ACTION_CHG_7, }; -s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { +s8 sPlayerActionChangeList2[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_5, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_4, + /* 6 */ PLAYER_ACTION_CHG_9, + /* 7 */ PLAYER_ACTION_CHG_10, + /* 8 */ PLAYER_ACTION_CHG_11, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ PLAYER_ACTION_CHG_8, + /* 11 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList3[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_3, + /* 4 */ PLAYER_ACTION_CHG_4, + /* 5 */ PLAYER_ACTION_CHG_9, + /* 6 */ PLAYER_ACTION_CHG_10, + /* 7 */ PLAYER_ACTION_CHG_11, + /* 8 */ PLAYER_ACTION_CHG_8, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList4[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_8, + /* 7 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList5[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ PLAYER_ACTION_CHG_4, + /* 3 */ PLAYER_ACTION_CHG_9, + /* 4 */ PLAYER_ACTION_CHG_10, + /* 5 */ PLAYER_ACTION_CHG_11, + /* 6 */ PLAYER_ACTION_CHG_12, + /* 7 */ PLAYER_ACTION_CHG_8, + /* 8 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList6[] = { + /* 0 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList7[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_11, + /* 2 */ PLAYER_ACTION_CHG_1, + /* 3 */ PLAYER_ACTION_CHG_2, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_5, + /* 6 */ PLAYER_ACTION_CHG_4, + /* 7 */ PLAYER_ACTION_CHG_9, + /* 8 */ PLAYER_ACTION_CHG_8, + /* 9 */ PLAYER_ACTION_CHG_7, + /* 10 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList8[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_11, + /* 2 */ PLAYER_ACTION_CHG_1, + /* 3 */ PLAYER_ACTION_CHG_2, + /* 4 */ PLAYER_ACTION_CHG_3, + /* 5 */ PLAYER_ACTION_CHG_12, + /* 6 */ PLAYER_ACTION_CHG_5, + /* 7 */ PLAYER_ACTION_CHG_4, + /* 8 */ PLAYER_ACTION_CHG_9, + /* 9 */ PLAYER_ACTION_CHG_8, + /* 10 */ PLAYER_ACTION_CHG_7, + /* 11 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList9[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_1, + /* 2 */ PLAYER_ACTION_CHG_2, + /* 3 */ PLAYER_ACTION_CHG_3, + /* 4 */ PLAYER_ACTION_CHG_12, + /* 5 */ PLAYER_ACTION_CHG_5, + /* 6 */ PLAYER_ACTION_CHG_4, + /* 7 */ PLAYER_ACTION_CHG_9, + /* 8 */ PLAYER_ACTION_CHG_10, + /* 9 */ PLAYER_ACTION_CHG_11, + /* 10 */ PLAYER_ACTION_CHG_8, + /* 11 */ PLAYER_ACTION_CHG_7, + /* 12 */ -PLAYER_ACTION_CHG_6, +}; + +s8 sPlayerActionChangeList10[] = { + /* 0 */ PLAYER_ACTION_CHG_10, + /* 1 */ PLAYER_ACTION_CHG_8, + /* 2 */ -PLAYER_ACTION_CHG_7, +}; + +s8 sPlayerActionChangeList11[] = { + /* 0 */ PLAYER_ACTION_CHG_0, + /* 1 */ PLAYER_ACTION_CHG_12, + /* 2 */ PLAYER_ACTION_CHG_5, + /* 3 */ PLAYER_ACTION_CHG_4, + /* 4 */ -PLAYER_ACTION_CHG_14, +}; + +s8 sPlayerActionChangeList12[] = { + /* 0 */ PLAYER_ACTION_CHG_13, + /* 1 */ PLAYER_ACTION_CHG_2, + /* 2 */ -PLAYER_ACTION_CHG_4, +}; + +s32 (*sPlayerActionChangeFuncs[PLAYER_ACTION_CHG_MAX])(Player*, PlayState*) = { + Player_ActionChange_0, // PLAYER_ACTION_CHG_0 + Player_ActionChange_1, // PLAYER_ACTION_CHG_1 + Player_ActionChange_2, // PLAYER_ACTION_CHG_2 + Player_ActionChange_3, // PLAYER_ACTION_CHG_3 + Player_ActionChange_4, // PLAYER_ACTION_CHG_4 + Player_ActionChange_5, // PLAYER_ACTION_CHG_5 + Player_ActionChange_6, // PLAYER_ACTION_CHG_6 + Player_ActionChange_7, // PLAYER_ACTION_CHG_7 + Player_ActionChange_8, // PLAYER_ACTION_CHG_8 + Player_ActionChange_9, // PLAYER_ACTION_CHG_9 + Player_ActionChange_10, // PLAYER_ACTION_CHG_10 + Player_ActionChange_11, // PLAYER_ACTION_CHG_11 + Player_ActionChange_12, // PLAYER_ACTION_CHG_12 + Player_ActionChange_13, // PLAYER_ACTION_CHG_13 + Player_ActionChange_14, // PLAYER_ACTION_CHG_14 +}; + +/** + * This function processes "Action Change Lists", which run various functions that + * check if it is appropriate to change to a new action. + * + * Action Change Lists are a list of indices for the `sPlayerActionChangeFuncs` array. + * The functions are ran in order until one of them returns true, or the end of the list is reached. + * An Action Change index having a negative value indicates that it is the last member in the list. + * + * Because these lists are processed sequentially, the order of the indices in the list determines its priority. + * + * If the `updateUpperBody` argument is true, Player's upper body will update before the Action Change List + * is processed. This allows for Upper Action functions to run. + * + * @return true if a new action has been chosen + * + */ +s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeList, s32 updateUpperBody) { if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { - if (arg3) { + if (updateUpperBody) { D_80862B04 = func_8083216C(this, play); if (Player_Action_64 == this->actionFunc) { return true; @@ -4860,14 +5026,16 @@ s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { } if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) { - while (*arg2 >= 0) { - if (D_8085D054[*arg2](this, play)) { + // Process all entries in the Action Change List with a positive index + while (*actionChangeList >= 0) { + if (sPlayerActionChangeFuncs[*actionChangeList](this, play)) { return true; } - arg2++; + actionChangeList++; } - if (D_8085D054[-*arg2](this, play)) { + // Try the last entry in the list. Negate the index to make it positive again. + if (sPlayerActionChangeFuncs[-*actionChangeList](this, play)) { return true; } } @@ -4887,7 +5055,7 @@ s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame f32 speedTarget; s16 yawTarget; - if (func_80833058(play, this, D_8085D01C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) { return 0; } @@ -5637,7 +5805,7 @@ void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlaySta func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N); } -s32 func_80834DFC(Player* this, PlayState* play) { +s32 Player_ActionChange_12(Player* this, PlayState* play) { if ((this->transformation != PLAYER_FORM_GORON) && ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->ledgeClimbType <= PLAYER_LEDGE_CLIMB_3)) && @@ -6229,7 +6397,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { } // door stuff -s32 func_808365DC(Player* this, PlayState* play) { +s32 Player_ActionChange_1(Player* this, PlayState* play) { if ((gSaveContext.save.saveInfo.playerData.health != 0) && (this->doorType != PLAYER_DOORTYPE_NONE)) { if ((this->actor.category != ACTORCAT_PLAYER) || ((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) || @@ -7205,7 +7373,7 @@ PlayerAnimationHeader* D_8085D1F8[] = { &gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here" }; -s32 func_80838A90(Player* this, PlayState* play) { +s32 Player_ActionChange_13(Player* this, PlayState* play) { PlayerBottle bottleAction; if (this->unk_AA5 != PLAYER_UNKAA5_0) { @@ -7382,7 +7550,7 @@ s32 func_80838A90(Player* this, PlayState* play) { return false; } -s32 func_808391D8(Player* this, PlayState* play) { +s32 Player_ActionChange_4(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* talkActor = this->talkActor; Actor* lockOnActor = this->lockOnActor; @@ -7468,9 +7636,9 @@ s32 func_808391D8(Player* this, PlayState* play) { return false; } -s32 func_80839518(Player* this, PlayState* play) { +s32 Player_ActionChange_0(Player* this, PlayState* play) { if (this->unk_AA5 != PLAYER_UNKAA5_0) { - func_80838A90(this, play); + Player_ActionChange_13(this, play); return true; } else if ((this->lockOnActor != NULL) && (CHECK_FLAG_ALL(this->lockOnActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_40000) || @@ -7599,7 +7767,7 @@ s32 func_80839A84(PlayState* play, Player* this) { return true; } -s32 func_80839B18(Player* this, PlayState* play) { +s32 Player_ActionChange_10(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerFloorType != FLOOR_TYPE_7) && (sPlayerFloorEffect != FLOOR_EFFECT_1)) { @@ -7719,14 +7887,14 @@ void func_8083A04C(Player* this) { } } -s32 func_8083A0CC(Player* this, PlayState* play) { +s32 Player_ActionChange_14(Player* this, PlayState* play) { if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) { func_8083A04C(this); } return false; } -s32 func_8083A114(Player* this, PlayState* play) { +s32 Player_ActionChange_6(Player* this, PlayState* play) { if (!D_80862B04 && !(this->stateFlags1 & PLAYER_STATE1_800000) && !func_8082FB68(this)) { if ((this->transformation == PLAYER_FORM_ZORA) && (this->stateFlags1 & PLAYER_STATE1_8000000)) { func_8083A04C(this); @@ -7751,7 +7919,7 @@ s32 func_8083A114(Player* this, PlayState* play) { return false; } -s32 func_8083A274(Player* this, PlayState* play) { +s32 Player_ActionChange_11(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R) && (this->unk_AA5 == PLAYER_UNKAA5_0) && (play->unk_1887C == 0)) { if (Player_IsGoronOrDeku(this) || @@ -7821,7 +7989,7 @@ void func_8083A548(Player* this) { } } -s32 func_8083A580(Player* this, PlayState* play) { +s32 Player_ActionChange_8(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { if (!(this->stateFlags1 & PLAYER_STATE1_400000) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { @@ -8656,7 +8824,7 @@ u16 D_8085D25C[] = { }; // Player_MountHorse -s32 func_8083CCB4(Player* this, PlayState* play) { +s32 Player_ActionChange_3(Player* this, PlayState* play) { EnHorse* rideActor = (EnHorse*)this->rideActor; if (rideActor != NULL) { @@ -8797,7 +8965,7 @@ void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) { Audio_PlaySfx((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); } -s32 func_8083D23C(Player* this, PlayState* play) { +s32 Player_ActionChange_2(Player* this, PlayState* play) { if (gSaveContext.save.saveInfo.playerData.health != 0) { Actor* interactRangeActor = this->interactRangeActor; @@ -8923,7 +9091,7 @@ s32 func_8083D738(Player* this, Actor* heldActor) { return true; } -s32 func_8083D78C(Player* this, PlayState* play) { +s32 Player_ActionChange_9(Player* this, PlayState* play) { if (this->stateFlags1 & PLAYER_STATE1_800) { if ((this->heldActor != NULL) && CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { @@ -9120,7 +9288,7 @@ void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; } -s32 func_8083DFC4(Player* this, PlayState* play) { +s32 Player_ActionChange_5(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (sPlayerShapeYawToTouchedWall < 0x3000)) { if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) { @@ -9290,7 +9458,7 @@ s32 func_8083E7F8(Player* this, f32* arg1, s16* arg2, PlayState* play) { func_8083C6E8(this, play); if ((*arg1 != 0.0f) || (ABS_ALT(this->unk_B4C) > 0x190)) { - s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); u16 temp; temp = (ABS_ALT(temp_a0) - 0x2000); @@ -9730,7 +9898,7 @@ s32 func_8083FD80(Player* this, PlayState* play) { } s32 func_8083FE38(Player* this, PlayState* play) { - return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play); + return Player_ActionChange_13(this, play) || Player_ActionChange_4(this, play) || Player_ActionChange_2(this, play); } void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { @@ -12662,7 +12830,7 @@ s32 func_80847994(PlayState* play, Player* this) { this->stateFlags3 &= ~PLAYER_STATE3_20; this->itemAction = PLAYER_IA_OCARINA; this->unk_AA5 = PLAYER_UNKAA5_5; - func_80838A90(this, play); + Player_ActionChange_13(this, play); return true; } return false; @@ -12966,7 +13134,7 @@ void func_808484F0(Player* this) { } } -s32 func_80848570(Player* this, PlayState* play) { +s32 Player_ActionChange_7(Player* this, PlayState* play) { if (!func_8083A6C0(play, this)) { if (func_808396B8(play, this)) { PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this); @@ -13498,7 +13666,7 @@ void Player_Action_2(Player* this, PlayState* play) { } func_80832F24(this); - if (func_80833058(play, this, D_8085CFE4, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList1, true)) { return; } @@ -13553,7 +13721,7 @@ void Player_Action_3(Player* this, PlayState* play) { } func_80832F24(this); - if (func_80833058(play, this, D_8085CFEC, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList2, true)) { return; } @@ -13622,7 +13790,8 @@ void Player_Action_4(Player* this, PlayState* play) { } func_80832F24(this); - if ((this->actionVar2 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if ((this->actionVar2 == 0) && !func_80847880(play, this) && + !Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true)) { if (func_8082FB68(this)) { func_8083B23C(this, play); return; @@ -13689,7 +13858,7 @@ void Player_Action_5(Player* this, PlayState* play) { Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); } - if (func_80833058(play, this, D_8085CFF8, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList3, true)) { return; } @@ -13741,7 +13910,7 @@ void Player_Action_6(Player* this, PlayState* play) { s32 sp2C; func_8083EE60(this, play); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13781,7 +13950,7 @@ void Player_Action_7(Player* this, PlayState* play) { func_80832F24(this); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13802,7 +13971,7 @@ void Player_Action_7(Player* this, PlayState* play) { void Player_Action_8(Player* this, PlayState* play) { s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); - if (func_80833058(play, this, D_8085D004, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList4, true)) { return; } @@ -13817,7 +13986,7 @@ void Player_Action_9(Player* this, PlayState* play) { s32 var_v0; func_8083F27C(play, this); - if (func_80833058(play, this, D_8085D00C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) { return; } @@ -13887,7 +14056,7 @@ void Player_Action_10(Player* this, PlayState* play) { yawTarget = this->actor.home.rot.y; } - if (func_80833058(play, this, D_8085D018, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList6, true)) { return; } @@ -13910,8 +14079,8 @@ void Player_Action_11(Player* this, PlayState* play) { } PlayerAnimation_Update(play, &this->skelAnime); - if (!func_80847880(play, this) && - (!func_80833058(play, this, D_8085D01C, 1) || (Player_Action_11 == this->actionFunc))) { + if (!func_80847880(play, this) && (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, true) || + (Player_Action_11 == this->actionFunc))) { f32 speedTarget; f32 temp_fv0; f32 temp_fv1; @@ -13951,7 +14120,8 @@ void Player_Action_12(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_80832F24(this); if (!func_80847880(play, this)) { - if (!func_80833058(play, this, D_8085D01C, 0) || (Player_Action_12 == this->actionFunc)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList7, false) || + (Player_Action_12 == this->actionFunc)) { if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { func_80839E74(this, play); } @@ -13965,7 +14135,7 @@ void Player_Action_13(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083F57C(this, play); - if (func_80833058(play, this, D_8085D028, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList8, true)) { return; } @@ -13996,7 +14166,7 @@ void Player_Action_14(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083F57C(this, play); - if (func_80833058(play, this, D_8085D034, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList9, true)) { return; } @@ -14026,7 +14196,7 @@ void Player_Action_15(Player* this, PlayState* play) { f32 speedTarget; s16 yawTarget; - if (func_80833058(play, this, D_8085D00C, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList5, true)) { return; } @@ -14053,7 +14223,7 @@ void Player_Action_16(Player* this, PlayState* play) { s16 yawTarget; func_80832F24(this); - if (func_80833058(play, this, D_8085D044, 1)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList10, true)) { return; } @@ -14080,7 +14250,7 @@ void Player_Action_17(Player* this, PlayState* play) { } if (DECR(this->actionVar2) == 0) { - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); } this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; @@ -14096,7 +14266,7 @@ void Player_Action_18(Player* this, PlayState* play) { SkelAnime_Update(&this->unk_2C8); if (!func_8083FE38(this, play)) { - if (!func_8083A274(this, play)) { + if (!Player_ActionChange_11(this, play)) { this->stateFlags1 &= ~PLAYER_STATE1_400000; if (this->itemAction <= PLAYER_IA_MINUS1) { @@ -14134,7 +14304,7 @@ void Player_Action_18(Player* this, PlayState* play) { if (this->actionVar2 != 0) { f32 yStick = sPlayerControlInput->rel.stick_y * 180; f32 xStick = sPlayerControlInput->rel.stick_x * -120; - s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); s16 var_a1; s16 temp_ft5; s16 var_a2; @@ -14164,7 +14334,7 @@ void Player_Action_18(Player* this, PlayState* play) { this->actionVar1 = 0; } } else if (!func_8083FE38(this, play)) { - if (func_8083A274(this, play)) { + if (Player_ActionChange_11(this, play)) { func_8083FD80(this, play); } else { this->stateFlags1 &= ~PLAYER_STATE1_400000; @@ -14464,7 +14634,7 @@ void Player_Action_25(Player* this, PlayState* play) { func_8083216C(this, play); } - func_80838A90(this, play); + Player_ActionChange_13(this, play); } // sPlayerRollingAnimSfx @@ -14510,7 +14680,7 @@ void Player_Action_26(Player* this, PlayState* play) { } } } else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) { - if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) { + if ((this->skelAnime.curFrame < 15.0f) || !Player_ActionChange_7(this, play)) { f32 speedTarget; s16 yawTarget; @@ -14851,7 +15021,7 @@ void Player_Action_34(Player* this, PlayState* play) { } void Player_Action_35(Player* this, PlayState* play) { - if (func_80838A90(this, play) == 0) { + if (!Player_ActionChange_13(this, play)) { if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { func_80833AA0(this, play); this->stateFlags1 |= PLAYER_STATE1_20000000; @@ -15005,7 +15175,7 @@ void Player_Action_35(Player* this, PlayState* play) { if (play->sceneId == SCENE_20SICHITAI) { play->unk_1887C = 0; } - } else if (!func_808391D8(this, play)) { + } else if (!Player_ActionChange_4(this, play)) { func_8083B2E4(this, play); } } @@ -15206,7 +15376,7 @@ void Player_Action_43(Player* this, PlayState* play) { ((this->unk_AA5 == PLAYER_UNKAA5_1) && CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) || - func_808391D8(this, play)))) { + Player_ActionChange_4(this, play)))) { func_80839ED0(this, play); Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP); } else if ((DECR(this->actionVar2) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { @@ -15239,7 +15409,7 @@ void Player_Action_44(Player* this, PlayState* play) { func_80837BD0(play, this); this->actionVar2 = sp44; } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) && - ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) { + ((this->talkActor != this->interactRangeActor) || !Player_ActionChange_2(this, play))) { if (func_801242B4(this)) { func_808353DC(play, this); } else { @@ -15893,8 +16063,8 @@ void Player_Action_52(Player* this, PlayState* play) { func_8084FD7C(play, this, &rideActor->actor); } } else if ((this->csMode != PLAYER_CSMODE_NONE) || - (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && - !func_80847BF0(this, play) && !func_80838A90(this, play))) { + (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionChange_4(this, play)) && + !func_80847BF0(this, play) && !Player_ActionChange_13(this, play))) { if (this->lockOnActor != NULL) { if (func_800B7128(this)) { this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; @@ -16007,7 +16177,7 @@ void Player_Action_54(Player* this, PlayState* play) { this->actionVar2 = 0; } - if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) && + if (!func_8082DAFC(play) && !Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && !func_8083B3B4(play, this, sPlayerControlInput) && ((this->actionVar2 != 0) || !func_80850734(play, this))) { speedTarget = 0.0f; yawTarget = this->actor.shape.rot.y; @@ -16044,7 +16214,7 @@ void Player_Action_54(Player* this, PlayState* play) { } void Player_Action_55(Player* this, PlayState* play) { - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { this->stateFlags2 |= PLAYER_STATE2_20; func_808477D0(play, this, NULL, this->linearVelocity); func_808475B4(this); @@ -16090,7 +16260,7 @@ void Player_Action_56(Player* this, PlayState* play) { func_808475B4(this); func_8082F164(this, BTN_R); - if (func_80833058(play, this, D_8085D048, false)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList11, false)) { return; } @@ -16217,8 +16387,8 @@ void Player_Action_57(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_808475B4(this); func_8082F164(this, BTN_R); - if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput) && - !func_80850854(play, this)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && + !func_8083B3B4(play, this, sPlayerControlInput) && !func_80850854(play, this)) { func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); if (func_8082DA90(play)) { speedTarget = this->linearVelocity; @@ -16249,7 +16419,8 @@ void Player_Action_58(Player* this, PlayState* play) { func_808475B4(this); func_8082F164(this, BTN_R); - if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) { + if (!Player_TryActionChangeList(play, this, sPlayerActionChangeList11, true) && + !func_8083B3B4(play, this, sPlayerControlInput)) { Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play); if (speedTarget == 0.0f) { @@ -16271,7 +16442,7 @@ void Player_Action_59(Player* this, PlayState* play) { func_8083216C(this, play); func_8082F164(this, BTN_R); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -16292,7 +16463,7 @@ void Player_Action_59(Player* this, PlayState* play) { func_808477D0(play, this, sPlayerControlInput, this->actor.velocity.y); this->unk_AAA = 0x3E80; - if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !func_8083D23C(this, play) && + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !Player_ActionChange_2(this, play) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { func_808481CC(play, this, -2.0f); } else { @@ -16596,7 +16767,7 @@ void Player_Action_63(Player* this, PlayState* play) { this->talkActor = this->tatlActor; this->tatlActor->textId = -this->tatlTextId; Player_TalkWithPlayer(play, this->talkActor); - } else if (!func_80838A90(this, play)) { + } else if (!Player_ActionChange_13(this, play)) { func_80836A5C(this, play); Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } @@ -16775,8 +16946,8 @@ void Player_Action_65(Player* this, PlayState* play) { } else { if ((this->skelAnime.animation == &gPlayerAnim_link_demo_get_itemB) || (this->skelAnime.animation == &gPlayerAnim_pn_getB)) { - Math_ScaledStepToS(&this->actor.shape.rot.y, - BINANG_ADD(Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]), 0x8000), 0xFA0); + Math_ScaledStepToS(&this->actor.shape.rot.y, BINANG_ADD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)), 0x8000), + 0xFA0); } else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) && PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { Player_AnimSfx_PlayFloorLand(this); @@ -17090,7 +17261,7 @@ void Player_Action_70(Player* this, PlayState* play) { if (PlayerAnimation_Update(play, &this->skelAnime)) { Player_StopCutscene(this); - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { func_80839E74(this, play); } } else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) { @@ -17198,11 +17369,11 @@ void Player_Action_73(Player* this, PlayState* play) { Audio_PlaySfx_AtPosWithSyncedFreqAndVolume( &this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), this->actor.speed); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } - if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) { + if ((this->transformation == PLAYER_FORM_GORON) && Player_ActionChange_6(this, play)) { return; } @@ -17326,7 +17497,7 @@ void Player_Action_77(Player* this, PlayState* play) { } void Player_Action_78(Player* this, PlayState* play) { - func_808365DC(this, play); + Player_ActionChange_1(this, play); } void Player_Action_79(Player* this, PlayState* play) { @@ -17482,7 +17653,7 @@ void Player_Action_84(Player* this, PlayState* play) { func_808333CC(this))) { D_80862B48 = this->actionVar2; - if (!func_80848570(this, play)) { + if (!Player_ActionChange_7(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; func_8082DC38(this); @@ -17494,7 +17665,7 @@ void Player_Action_84(Player* this, PlayState* play) { u8 moveFlags = this->skelAnime.moveFlags; if (this->transformation == PLAYER_FORM_ZORA) { - if (func_8083A580(this, play)) { + if (Player_ActionChange_8(this, play)) { anim = this->unk_284.animation; } this->unk_ADC = 0; @@ -17737,10 +17908,10 @@ void Player_Action_86(Player* this, PlayState* play) { func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]); sPlayerControlInput = play->state.input; - Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + Camera_ChangeMode(GET_ACTIVE_CAM(play), (this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); this->stateFlags2 |= PLAYER_STATE2_40; - this->actor.shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]) + 0x8000; + this->actor.shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000; func_80855218(play, this, &sp4C); @@ -17814,8 +17985,7 @@ void Player_Action_86(Player* this, PlayState* play) { } void Player_Action_87(Player* this, PlayState* play) { - Camera_ChangeMode(play->cameraPtrs[play->activeCamId], - (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); + Camera_ChangeMode(GET_ACTIVE_CAM(play), (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); if (R_PLAY_FILL_SCREEN_ON != 0) { R_PLAY_FILL_SCREEN_ALPHA -= R_PLAY_FILL_SCREEN_ON; @@ -18027,7 +18197,7 @@ void Player_Action_93(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -18048,7 +18218,7 @@ void Player_Action_93(Player* this, PlayState* play) { if (this->unk_ABC < -3900.0f) { this->unk_ABC = -3900.0f; this->actionVar1 = 2; - this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + this->actor.shape.rot.y = Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)); this->actor.scale.y = 0.01f; this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y; } else { @@ -18211,7 +18381,7 @@ void Player_Action_94(Player* this, PlayState* play) { this->boomerangActor = NULL; } - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { return; } @@ -18404,7 +18574,7 @@ void Player_Action_95(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30); - if (!func_80838A90(this, play)) { + if (!Player_ActionChange_13(this, play)) { s16 prevYaw = this->currentYaw; f32 speedTarget; s16 yawTarget; @@ -18554,7 +18724,7 @@ void func_80857AEC(PlayState* play, Player* this) { // Goron rolling related void Player_Action_96(Player* this, PlayState* play) { - if (func_80833058(play, this, D_8085D050, 0)) { + if (Player_TryActionChangeList(play, this, sPlayerActionChangeList12, false)) { return; } @@ -19502,7 +19672,7 @@ void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) { if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { func_8083216C(this, play); } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) { - func_8083D23C(this, play); + Player_ActionChange_2(this, play); } } } @@ -19920,7 +20090,7 @@ void Player_CsAction_38(PlayState* play, Player* this, CsCmdActorCue* cue) { void Player_CsAction_39(PlayState* play, Player* this, CsCmdActorCue* cue) { Player_CsAnim_11(play, this, cue); - if (func_8083D23C(this, play)) { + if (Player_ActionChange_2(this, play)) { play->csCtx.state = CS_STATE_STOP; CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); } @@ -20010,8 +20180,8 @@ void Player_CsAction_End(PlayState* play, Player* this, CsCmdActorCue* cue) { func_8082DC64(play, this); } else { func_80839ED0(this, play); - if (!func_808391D8(this, play)) { - func_8083D23C(this, play); + if (!Player_ActionChange_4(this, play)) { + Player_ActionChange_2(this, play); } } @@ -20079,7 +20249,7 @@ void Player_CsAction_48(PlayState* play, Player* this, CsCmdActorCue* cue) { if ((sPlayerCsModes[this->cueId] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { this->unk_AA5 = PLAYER_UNKAA5_5; - if (func_80838A90(this, play)) { + if (Player_ActionChange_13(this, play)) { this->csMode = PLAYER_CSMODE_NONE; } return; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d7350076d..7ecc8c4e3 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4383,7 +4383,7 @@ 0x80832CAC:("Player_CalcSpeedAndYawFromControlStick",), 0x80832F24:("func_80832F24",), 0x80832F78:("Player_GetMovementSpeedAndYaw",), - 0x80833058:("func_80833058",), + 0x80833058:("Player_TryActionChangeList",), 0x808331FC:("func_808331FC",), 0x808332A0:("func_808332A0",), 0x808333CC:("func_808333CC",), @@ -4413,7 +4413,7 @@ 0x80834CD0:("func_80834CD0",), 0x80834D50:("func_80834D50",), 0x80834DB8:("func_80834DB8",), - 0x80834DFC:("func_80834DFC",), + 0x80834DFC:("Player_ActionChange_12",), 0x80835324:("func_80835324",), 0x808353DC:("func_808353DC",), 0x80835428:("func_80835428",), @@ -4430,7 +4430,7 @@ 0x80835EAC:("Player_Door_Staircase",), 0x8083604C:("Player_Door_Sliding",), 0x80836258:("Player_Door_Knob",), - 0x808365DC:("func_808365DC",), + 0x808365DC:("Player_ActionChange_1",), 0x80836888:("func_80836888",), 0x8083692C:("func_8083692C",), 0x80836988:("func_80836988",), @@ -4470,9 +4470,9 @@ 0x808388B8:("func_808388B8",), 0x808389BC:("func_808389BC",), 0x80838A20:("func_80838A20",), - 0x80838A90:("func_80838A90",), - 0x808391D8:("func_808391D8",), - 0x80839518:("func_80839518",), + 0x80838A90:("Player_ActionChange_13",), + 0x808391D8:("Player_ActionChange_4",), + 0x80839518:("Player_ActionChange_0",), 0x808395F0:("func_808395F0",), 0x808396B8:("func_808396B8",), 0x80839770:("func_80839770",), @@ -4481,19 +4481,19 @@ 0x80839978:("func_80839978",), 0x80839A10:("func_80839A10",), 0x80839A84:("func_80839A84",), - 0x80839B18:("func_80839B18",), + 0x80839B18:("Player_ActionChange_10",), 0x80839CD8:("func_80839CD8",), 0x80839E3C:("func_80839E3C",), 0x80839E74:("func_80839E74",), 0x80839ED0:("func_80839ED0",), 0x80839F98:("func_80839F98",), 0x8083A04C:("func_8083A04C",), - 0x8083A0CC:("func_8083A0CC",), - 0x8083A114:("func_8083A114",), - 0x8083A274:("func_8083A274",), + 0x8083A0CC:("Player_ActionChange_14",), + 0x8083A114:("Player_ActionChange_6",), + 0x8083A274:("Player_ActionChange_11",), 0x8083A4A4:("func_8083A4A4",), 0x8083A548:("func_8083A548",), - 0x8083A580:("func_8083A580",), + 0x8083A580:("Player_ActionChange_8",), 0x8083A658:("func_8083A658",), 0x8083A6C0:("func_8083A6C0",), 0x8083A794:("func_8083A794",), @@ -4531,19 +4531,19 @@ 0x8083CB04:("func_8083CB04",), 0x8083CB58:("func_8083CB58",), 0x8083CBC4:("func_8083CBC4",), - 0x8083CCB4:("func_8083CCB4",), + 0x8083CCB4:("Player_ActionChange_3",), 0x8083CF68:("Player_HandleSlopes",), 0x8083D168:("func_8083D168",), - 0x8083D23C:("func_8083D23C",), + 0x8083D23C:("Player_ActionChange_2",), 0x8083D6DC:("func_8083D6DC",), 0x8083D738:("func_8083D738",), - 0x8083D78C:("func_8083D78C",), + 0x8083D78C:("Player_ActionChange_9",), 0x8083D860:("func_8083D860",), 0x8083DCC4:("func_8083DCC4",), 0x8083DD1C:("func_8083DD1C",), 0x8083DEE4:("func_8083DEE4",), 0x8083DF38:("func_8083DF38",), - 0x8083DFC4:("func_8083DFC4",), + 0x8083DFC4:("Player_ActionChange_5",), 0x8083E14C:("func_8083E14C",), 0x8083E234:("func_8083E234",), 0x8083E28C:("func_8083E28C",), @@ -4642,7 +4642,7 @@ 0x808482E0:("func_808482E0",), 0x808484CC:("func_808484CC",), 0x808484F0:("func_808484F0",), - 0x80848570:("func_80848570",), + 0x80848570:("Player_ActionChange_7",), 0x80848640:("func_80848640",), 0x80848780:("Player_UpperAction_0",), 0x808487B8:("Player_UpperAction_1",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f5905b769..01a46d7d1 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4967,19 +4967,19 @@ 0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1), 0x8085CFD4:("D_8085CFD4","UNK_TYPE1","",0x1), 0x8085CFDC:("D_8085CFDC","UNK_TYPE1","",0x1), - 0x8085CFE4:("D_8085CFE4","UNK_TYPE1","",0x1), - 0x8085CFEC:("D_8085CFEC","UNK_TYPE1","",0x1), - 0x8085CFF8:("D_8085CFF8","UNK_TYPE1","",0x1), - 0x8085D004:("D_8085D004","UNK_TYPE1","",0x1), - 0x8085D00C:("D_8085D00C","UNK_TYPE1","",0x1), - 0x8085D018:("D_8085D018","UNK_TYPE1","",0x1), - 0x8085D01C:("D_8085D01C","UNK_TYPE1","",0x1), - 0x8085D028:("D_8085D028","UNK_TYPE1","",0x1), - 0x8085D034:("D_8085D034","UNK_TYPE1","",0x1), - 0x8085D044:("D_8085D044","UNK_TYPE1","",0x1), - 0x8085D048:("D_8085D048","UNK_TYPE1","",0x1), - 0x8085D050:("D_8085D050","UNK_TYPE1","",0x1), - 0x8085D054:("D_8085D054","UNK_PTR","",0x4), + 0x8085CFE4:("sPlayerActionChangeList1","UNK_TYPE1","",0x1), + 0x8085CFEC:("sPlayerActionChangeList2","UNK_TYPE1","",0x1), + 0x8085CFF8:("sPlayerActionChangeList3","UNK_TYPE1","",0x1), + 0x8085D004:("sPlayerActionChangeList4","UNK_TYPE1","",0x1), + 0x8085D00C:("sPlayerActionChangeList5","UNK_TYPE1","",0x1), + 0x8085D018:("sPlayerActionChangeList6","UNK_TYPE1","",0x1), + 0x8085D01C:("sPlayerActionChangeList7","UNK_TYPE1","",0x1), + 0x8085D028:("sPlayerActionChangeList8","UNK_TYPE1","",0x1), + 0x8085D034:("sPlayerActionChangeList9","UNK_TYPE1","",0x1), + 0x8085D044:("sPlayerActionChangeList10","UNK_TYPE1","",0x1), + 0x8085D048:("sPlayerActionChangeList11","UNK_TYPE1","",0x1), + 0x8085D050:("sPlayerActionChangeList12","UNK_TYPE1","",0x1), + 0x8085D054:("sPlayerActionChangeFuncs","UNK_PTR","",0x4), 0x8085D090:("D_8085D090","UNK_TYPE1","",0x1), 0x8085D094:("D_8085D094","UNK_TYPE1","",0x6), 0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4), From 64b1fafd33bd7092c9cd2e703c3ccc41751c01a4 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 13:39:25 +1000 Subject: [PATCH 35/74] Animation Cleanup: En_H* (#1399) * begin H * more cleanup --- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 2 +- src/overlays/actors/ovl_Boss_04/z_boss_04.h | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.h | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 2 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 1 + .../actors/ovl_En_Heishi/z_en_heishi.c | 45 +++--- .../actors/ovl_En_Heishi/z_en_heishi.h | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 55 ++++--- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 68 +++++---- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 107 ++++++++----- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 9 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 113 ++++++++------ .../actors/ovl_En_Hint_Skb/z_en_hint_skb.h | 5 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 140 ++++++++++-------- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 6 +- .../z_en_horse_link_child.c | 92 ++++++------ src/overlays/actors/ovl_En_Hs/z_en_hs.c | 13 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 16 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 2 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.h | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.h | 2 +- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 4 +- 25 files changed, 406 insertions(+), 290 deletions(-) diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index 82495ea1e..c35e6e9b1 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -173,7 +173,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->unk_6F8 = 1.0f; Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements); Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements); - SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphtable, + SkelAnime_InitFlex(play, &this->skelAnime, &gWartSkel, &gWartIdleAnim, this->jointTable, this->morphTable, WART_LIMB_MAX); spA8.y = this->actor.world.pos.y + 200.0f; diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.h b/src/overlays/actors/ovl_Boss_04/z_boss_04.h index 6aa153597..97c296b84 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.h +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.h @@ -12,7 +12,7 @@ typedef struct Boss04 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[WART_LIMB_MAX]; - /* 0x1BE */ Vec3s morphtable[WART_LIMB_MAX]; + /* 0x1BE */ Vec3s morphTable[WART_LIMB_MAX]; /* 0x1F4 */ s16 unk_1F4; /* 0x1F6 */ u8 unk_1F6; /* 0x1F7 */ u8 unk_1F7; diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index 21d8bf309..4f4b15545 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -142,7 +142,7 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f); this->actor.gravity = -1.0f; SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, - this->morphtable, OBJECT_CS_LIMB_MAX); + this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.targetMode = TARGET_MODE_0; Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h index 76013781b..500fff573 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h @@ -25,7 +25,7 @@ typedef struct EnBombers { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[OBJECT_CS_LIMB_MAX]; - /* 0x206 */ Vec3s morphtable[OBJECT_CS_LIMB_MAX]; + /* 0x206 */ Vec3s morphTable[OBJECT_CS_LIMB_MAX]; /* 0x284 */ EnBombersActionFunc actionFunc; /* 0x288 */ s16 unk_288; /* 0x28A */ s16 unk_28A; diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 30dc3de26..89ee2e5fd 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -933,7 +933,7 @@ void EnEgol_Slam(EnEgol* this, PlayState* play) { } EnEgol_DestroyBlocks(this, play, this->rightHandPos, this->leftHandPos); } - if (this->animEndFrame <= curFrame) { + if (curFrame >= this->animEndFrame) { EnEgol_SetupSlamWait(this); } else if ((this->skelAnime.curFrame <= 17.0f) && (this->skelAnime.curFrame >= 10.0f)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base); diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c index 841e6f539..85000e5cb 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -194,6 +194,7 @@ void EnHanabi_Init(Actor* thisx, PlayState* play2) { EnHanabi* this = THIS; s32 i; + //! FAKE: if (1) {} Actor_SetScale(thisx, 1.0f); diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index 83973d9e9..19c2a34a8 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -20,14 +20,6 @@ void EnHeishi_SetHeadRotation(EnHeishi* this); void EnHeishi_SetupIdle(EnHeishi* this); void EnHeishi_Idle(EnHeishi* this, PlayState* play); -typedef enum { - /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ HEISHI_ANIM_WAVE, - /* 3 */ HEISHI_ANIM_SIT_AND_REACH, - /* 4 */ HEISHI_ANIM_STAND_UP -} EnHeishiAnimation; - ActorInit En_Heishi_InitVars = { ACTOR_EN_HEISHI, ACTORCAT_NPC, @@ -97,19 +89,36 @@ void EnHeishi_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); } +typedef enum EnHeishiAnimation { + /* 0 */ HEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ HEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ HEISHI_ANIM_WAVE, + /* 3 */ HEISHI_ANIM_SIT_AND_REACH, + /* 4 */ HEISHI_ANIM_STAND_UP, + /* 5 */ HEISHI_ANIM_MAX +} EnHeishiAnimation; + +static AnimationHeader* sAnimations[HEISHI_ANIM_MAX] = { + &gSoldierStandHandOnHip, // HEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpear, // HEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWave, // HEISHI_ANIM_WAVE + &gSoldierSitAndReach, // HEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUp, // HEISHI_ANIM_STAND_UP +}; + +static u8 sAnimationModes[HEISHI_ANIM_MAX] = { + ANIMMODE_LOOP, // HEISHI_ANIM_STAND_HAND_ON_HIP + ANIMMODE_LOOP, // HEISHI_ANIM_CHEER_WITH_SPEAR + ANIMMODE_LOOP, // HEISHI_ANIM_WAVE + ANIMMODE_LOOP, // HEISHI_ANIM_SIT_AND_REACH + ANIMMODE_ONCE, // HEISHI_ANIM_STAND_UP +}; + void EnHeishi_ChangeAnim(EnHeishi* this, s32 animIndex) { - static AnimationHeader* sAnimations[] = { - &gSoldierStandHandOnHip, &gSoldierCheerWithSpear, &gSoldierWave, &gSoldierSitAndReach, &gSoldierStandUp, - }; - static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - }; this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -10.0f); } diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h index 1758ceae6..4d886cb3c 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.h @@ -25,7 +25,7 @@ typedef struct EnHeishi { /* 0x26C */ s32 shouldSetHeadRotation; /* 0x270 */ s16 timer; /* 0x272 */ s16 yawTowardsPlayer; - /* 0x274 */ f32 frameCount; + /* 0x274 */ f32 animEndFrame; /* 0x278 */ s16 unk278; // set and not used /* 0x27C */ UNK_TYPE1 unk_27C[0x8]; /* 0x284 */ ColliderCylinder colliderCylinder; diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index 2c652f11c..ded070de4 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -29,17 +29,6 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play); s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx); -typedef enum { - /* 0 */ HG_ANIM_IDLE, - /* 1 */ HG_ANIM_LURCH_FORWARD, - /* 2 */ HG_ANIM_RECOIL, - /* 3 */ HG_ANIM_LEAN_FORWARD, - /* 4 */ HG_ANIM_REACH_FORWARD, - /* 5 */ HG_ANIM_CURL_UP, - /* 6 */ HG_ANIM_CROUCHED_PANIC, - /* 7 */ HG_ANIM_PANIC -} HgAnimation; - typedef enum { /* 0 */ HG_CS_FIRST_ENCOUNTER, /* 1 */ HG_CS_GET_MASK, @@ -118,15 +107,27 @@ static CollisionCheckInfoInit2 sColChkInfoInit2 = { 0, 0, 0, 0, 0x80, }; -static AnimationInfo sAnimationInfo[] = { - { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ HG_ANIM_IDLE, + /* 1 */ HG_ANIM_LURCH_FORWARD, + /* 2 */ HG_ANIM_RECOIL, + /* 3 */ HG_ANIM_LEAN_FORWARD, + /* 4 */ HG_ANIM_REACH_FORWARD, + /* 5 */ HG_ANIM_CURL_UP, + /* 6 */ HG_ANIM_CROUCHED_PANIC, + /* 7 */ HG_ANIM_PANIC, + /* 8 */ HG_ANIM_MAX +} HgAnimation; + +static AnimationInfo sAnimationInfo[HG_ANIM_MAX] = { + { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_IDLE + { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_LURCH_FORWARD + { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HG_ANIM_RECOIL + { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_LEAN_FORWARD + { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_REACH_FORWARD + { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HG_ANIM_CURL_UP + { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_CROUCHED_PANIC + { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HG_ANIM_PANIC }; static u32 sHasSoundPlayed = false; @@ -192,7 +193,7 @@ void EnHg_ChasePlayer(EnHg* this, PlayState* play) { s32 pad; this->actor.speed = 1.6f; - if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) { if (((this->skelAnime.curFrame > 9.0f) && (this->skelAnime.curFrame < 16.0f)) || ((this->skelAnime.curFrame > 44.0f) && (this->skelAnime.curFrame < 51.0f))) { Actor_MoveWithGravity(&this->actor); @@ -233,7 +234,6 @@ void EnHg_ReactToHit(EnHg* this, PlayState* play) { void EnHg_HandleTatlDialog(EnHg* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - // "...Sort of looks different..." Message_StartTextbox(play, 0x24F, &this->actor); } else { Actor_OfferTalk(&this->actor, play, 80.0f); @@ -295,7 +295,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id; switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - this->animIndex = 0; + this->animIndex = HG_ANIM_IDLE; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE); break; @@ -329,6 +329,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_75_20); Actor_Kill(&this->actor); break; + + default: + break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->animIndex) { @@ -341,6 +344,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { this->animIndex = HG_ANIM_CROUCHED_PANIC; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CROUCHED_PANIC); break; + + default: + break; } } @@ -360,6 +366,9 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG); } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 15bfd598b..c4d9c0371 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -38,16 +38,6 @@ typedef enum { /* 2 */ HGO_EYE_CLOSED } EyeState; -typedef enum { - /* 0 */ HGO_ANIM_ARMS_FOLDED, - /* 1 */ HGO_ANIM_ASTONISHED, - /* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG, - /* 3 */ HGO_ANIM_CONSOLE, - /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, - /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, - /* 6 */ HGO_ANIM_TOSS -} HgoAnimation; - ActorInit En_Hgo_InitVars = { ACTOR_EN_HGO, ACTORCAT_NPC, @@ -60,14 +50,25 @@ ActorInit En_Hgo_InitVars = { (ActorFunc)EnHgo_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, - { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, - { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ HGO_ANIM_ARMS_FOLDED, + /* 1 */ HGO_ANIM_ASTONISHED, + /* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG, + /* 3 */ HGO_ANIM_CONSOLE, + /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, + /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, + /* 6 */ HGO_ANIM_TOSS, + /* 7 */ HGO_ANIM_MAX +} HgoAnimation; + +static AnimationInfo sAnimationInfo[HGO_ANIM_MAX] = { + { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // HGO_ANIM_ARMS_FOLDED + { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_ASTONISHED + { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_KNEEL_DOWN_AND_HUG + { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE + { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_CONSOLE_HEAD_UP + { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f }, // HGO_ANIM_REACH_DOWN_TO_LIFT + { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // HGO_ANIM_TOSS }; static ColliderCylinderInit sCylinderInit = { @@ -109,6 +110,7 @@ void EnHgo_Init(Actor* thisx, PlayState* play) { this->textId = 0; this->talkFlags = TALK_FLAG_NONE; this->isInCutscene = false; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { EnHgo_SetupTalk(this); } else { @@ -143,7 +145,7 @@ void EnHgo_UpdateCollision(EnHgo* this, PlayState* play) { } void EnHgo_SetupTalk(EnHgo* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED); this->actionFunc = EnHgo_Talk; } @@ -206,6 +208,9 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) { EnHgo_SetupTalk(this); } break; + + default: + break; } Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x71C, 0xB6); @@ -271,6 +276,9 @@ void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) { Message_CloseTextbox(play); EnHgo_SetupTalk(this); break; + + default: + break; } } } @@ -285,33 +293,36 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: this->animIndex = HGO_ANIM_ARMS_FOLDED; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ARMS_FOLDED); break; case 2: this->actor.draw = EnHgo_Draw; this->animIndex = HGO_ANIM_ASTONISHED; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_ASTONISHED); break; case 3: this->animIndex = HGO_ANIM_KNEEL_DOWN_AND_HUG; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_KNEEL_DOWN_AND_HUG); break; case 4: this->animIndex = HGO_ANIM_CONSOLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE); break; case 5: this->animIndex = HGO_ANIM_CONSOLE_HEAD_UP; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE_HEAD_UP); break; case 6: this->animIndex = HGO_ANIM_REACH_DOWN_TO_LIFT; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_REACH_DOWN_TO_LIFT); + break; + + default: break; } } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { @@ -328,12 +339,15 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { case HGO_ANIM_KNEEL_DOWN_AND_HUG: this->animIndex = HGO_ANIM_CONSOLE; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_CONSOLE); break; case HGO_ANIM_REACH_DOWN_TO_LIFT: this->animIndex = HGO_ANIM_TOSS; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HGO_ANIM_TOSS); + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index e07dfb8a9..5d1e0ee24 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -6,7 +6,6 @@ #include "z_en_hidden_nuts.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_hintnuts/object_hintnuts.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_2000000) @@ -63,15 +62,41 @@ static ColliderCylinderInit sCylinderInit = { { 30, 20, 0, { 0, 0, 0 } }, }; -static AnimationHeader* D_80BDC0FC[] = { - &object_hintnuts_Anim_000168, &object_hintnuts_Anim_0024CC, &object_hintnuts_Anim_0026C4, - &object_hintnuts_Anim_002894, &object_hintnuts_Anim_002B90, &object_hintnuts_Anim_002F7C, - &object_hintnuts_Anim_003128, &object_hintnuts_Anim_0029BC, &object_hintnuts_Anim_0024CC, +typedef enum EnHiddenNutsAnimation { + /* 0 */ ENHIDDENNUTS_ANIM_0, + /* 1 */ ENHIDDENNUTS_ANIM_1, + /* 2 */ ENHIDDENNUTS_ANIM_2, + /* 3 */ ENHIDDENNUTS_ANIM_3, + /* 4 */ ENHIDDENNUTS_ANIM_4, + /* 5 */ ENHIDDENNUTS_ANIM_5, + /* 6 */ ENHIDDENNUTS_ANIM_6, + /* 7 */ ENHIDDENNUTS_ANIM_7, + /* 8 */ ENHIDDENNUTS_ANIM_8, + /* 9 */ ENHIDDENNUTS_ANIM_MAX +} EnHiddenNutsAnimation; + +static AnimationHeader* sAnimations[ENHIDDENNUTS_ANIM_MAX] = { + &object_hintnuts_Anim_000168, // ENHIDDENNUTS_ANIM_0 + &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_1 + &object_hintnuts_Anim_0026C4, // ENHIDDENNUTS_ANIM_2 + &object_hintnuts_Anim_002894, // ENHIDDENNUTS_ANIM_3 + &object_hintnuts_Anim_002B90, // ENHIDDENNUTS_ANIM_4 + &object_hintnuts_Anim_002F7C, // ENHIDDENNUTS_ANIM_5 + &object_hintnuts_Anim_003128, // ENHIDDENNUTS_ANIM_6 + &object_hintnuts_Anim_0029BC, // ENHIDDENNUTS_ANIM_7 + &object_hintnuts_Anim_0024CC, // ENHIDDENNUTS_ANIM_8 }; -u8 D_80BDC120[] = { - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_LOOP, +static u8 sAnimationModes[ENHIDDENNUTS_ANIM_MAX] = { + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_0 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_1 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_2 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_3 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_4 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_5 + ANIMMODE_LOOP, // ENHIDDENNUTS_ANIM_6 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_7 + ANIMMODE_ONCE, // ENHIDDENNUTS_ANIM_8 }; void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { @@ -79,7 +104,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_Init(play, &this->skelAnime, &object_hintnuts_Skel_0023B8.sh, &object_hintnuts_Anim_0024CC, - this->jointTable, this->morphTable, 10); + this->jointTable, this->morphTable, OBJECT_HINTNUTS_LIMB_MAX); Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -116,27 +141,29 @@ void EnHiddenNuts_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80BDB1B4(EnHiddenNuts* this, s32 arg1) { - f32 sp34; - f32 sp30; +void EnHiddenNuts_ChangeAnim(EnHiddenNuts* this, s32 animIndex) { + f32 startFrame; + f32 morphFrames; - this->unk_220 = arg1; - sp34 = 0.0f; - sp30 = -4.0f; - this->unk_22C = Animation_GetLastFrame(D_80BDC0FC[arg1]); - if (this->unk_220 == 1) { - sp34 = this->unk_22C; - sp30 = 0.0f; + this->animIndex = animIndex; + startFrame = 0.0f; + morphFrames = -4.0f; + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + + if (this->animIndex == ENHIDDENNUTS_ANIM_1) { + startFrame = this->animEndFrame; + morphFrames = 0.0f; } - Animation_Change(&this->skelAnime, D_80BDC0FC[this->unk_220], 1.0f, sp34, this->unk_22C, D_80BDC120[this->unk_220], - sp30); + + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, startFrame, this->animEndFrame, + sAnimationModes[this->animIndex], morphFrames); } void func_80BDB268(EnHiddenNuts* this) { this->actor.textId = 0x234; this->unk_228 = 1600.0f; this->actor.shape.yOffset = 1600.0f; - func_80BDB1B4(this, 1); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_1); this->unk_21A = 0; this->actionFunc = func_80BDB2B8; } @@ -148,12 +175,12 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG); if (player->stateFlags2 & PLAYER_STATE2_8000000) { - if (this->unk_20A == 0) { + if (!this->unk_20A) { Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); - this->unk_20A = 1; + this->unk_20A = true; } } else { - this->unk_20A = 0; + this->unk_20A = false; } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -263,20 +290,20 @@ void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) { EffectSsHahen_SpawnBurst(play, &sp3C, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP); - func_80BDB1B4(this, 7); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_7); this->actionFunc = func_80BDB8F4; } void func_80BDB8F4(EnHiddenNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { func_80BDB930(this); } } void func_80BDB930(EnHiddenNuts* this) { - func_80BDB1B4(this, 3); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_3); this->unk_21A = 3; this->unk_228 = 500.0f; this->actionFunc = func_80BDB978; @@ -290,7 +317,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUT_FAINT); } - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_224++; if (this->unk_224 >= 2) { func_80BDBA28(this, play); @@ -301,7 +328,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) { void func_80BDBA28(EnHiddenNuts* this, PlayState* play) { Vec3f sp44; - func_80BDB1B4(this, 2); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_2); this->unk_228 = 0.0f; Math_Vec3f_Copy(&sp44, &this->actor.world.pos); @@ -326,10 +353,10 @@ void func_80BDBA28(EnHiddenNuts* this, PlayState* play) { void func_80BDBB48(EnHiddenNuts* this, PlayState* play) { s32 pad[3]; - f32 sp58 = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; WaterBox* sp54; f32 sp50; - s16 sp4E = 0; + s16 sp4E = false; Vec3f sp40; if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp50, &sp54) && @@ -346,23 +373,23 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || Animation_OnFrame(&this->skelAnime, 10.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER); - sp4E = 1; + sp4E = true; } } - if ((sp4E != 0) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || - Animation_OnFrame(&this->skelAnime, 10.0f))) { + if (sp4E && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) || + Animation_OnFrame(&this->skelAnime, 10.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_20C), 1, 0x1388, 0); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 1, 0x3E8, 0); - if (this->unk_220 == 2) { - if (this->unk_22C <= sp58) { + if (this->animIndex == ENHIDDENNUTS_ANIM_2) { + if (curFrame >= this->animEndFrame) { this->actor.speed = 0.0f; this->actor.velocity.y = 0.0f; - func_80BDB1B4(this, 6); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_6); } } else { Math_ApproachF(&this->actor.world.pos.x, this->unk_20C.x, 0.5f, @@ -387,7 +414,7 @@ void func_80BDBE70(EnHiddenNuts* this, PlayState* play) { if (this->switchFlag >= 0) { Flags_SetSwitch(play, this->switchFlag); } - func_80BDB1B4(this, 8); + EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_8); this->unk_21A = 5; this->actionFunc = func_80BDBED4; } @@ -396,7 +423,7 @@ void func_80BDBED4(EnHiddenNuts* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; Vec3f sp38; - if (this->unk_22C <= curFrame) { + if (curFrame >= this->animEndFrame) { Math_Vec3f_Copy(&sp38, &this->actor.world.pos); sp38.y = this->actor.floorHeight; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index 03a0a52b7..df8275aa4 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -2,6 +2,7 @@ #define Z_EN_HIDDEN_NUTS_H #include "global.h" +#include "objects/object_hintnuts/object_hintnuts.h" struct EnHiddenNuts; @@ -16,8 +17,8 @@ typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); typedef struct EnHiddenNuts { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[10]; - /* 0x1C4 */ Vec3s morphTable[10]; + /* 0x188 */ Vec3s jointTable[OBJECT_HINTNUTS_LIMB_MAX]; + /* 0x1C4 */ Vec3s morphTable[OBJECT_HINTNUTS_LIMB_MAX]; /* 0x200 */ EnHiddenNutsActionFunc actionFunc; /* 0x204 */ Path* path; /* 0x208 */ s16 unk_208; @@ -27,11 +28,11 @@ typedef struct EnHiddenNuts { /* 0x21A */ s16 unk_21A; /* 0x21C */ s16 switchFlag; /* 0x21E */ s16 pathIndex; - /* 0x220 */ s32 unk_220; + /* 0x220 */ s32 animIndex; /* 0x224 */ s16 unk_224; /* 0x226 */ s16 csId; /* 0x228 */ f32 unk_228; - /* 0x22C */ f32 unk_22C; + /* 0x22C */ f32 animEndFrame; /* 0x230 */ UNK_TYPE1 unk230[4]; /* 0x234 */ ColliderCylinder collider; } EnHiddenNuts; // size = 0x280 diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index 5ad3e9dcf..f9e51b55c 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -6,7 +6,6 @@ #include "z_en_hint_skb.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "objects/object_skb/object_skb.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -126,20 +125,37 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -static AnimationInfo sAnimationInfo[] = { - { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, +typedef enum EnHinkSkbAnimation { + /* 0 */ ENHINTSKB_ANIM_0, + /* 1 */ ENHINTSKB_ANIM_1, + /* 2 */ ENHINTSKB_ANIM_2, + /* 3 */ ENHINTSKB_ANIM_3, + /* 4 */ ENHINTSKB_ANIM_4, + /* 5 */ ENHINTSKB_ANIM_5, + /* 6 */ ENHINTSKB_ANIM_6, + /* 7 */ ENHINTSKB_ANIM_7, + /* 8 */ ENHINTSKB_ANIM_8, + /* 9 */ ENHINTSKB_ANIM_9, + /* 10 */ ENHINTSKB_ANIM_10, + /* 11 */ ENHINTSKB_ANIM_11, + /* 12 */ ENHINTSKB_ANIM_12, + /* 13 */ ENHINTSKB_ANIM_MAX +} EnHinkSkbAnimation; + +static AnimationInfo sAnimationInfo[ENHINTSKB_ANIM_MAX] = { + { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_0 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // ENHINTSKB_ANIM_1 + { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, // ENHINTSKB_ANIM_2 + { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_3 + { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_4 + { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_5 + { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_6 + { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_7 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_8 + { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, // ENHINTSKB_ANIM_9 + { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_10 + { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_11 + { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENHINTSKB_ANIM_12 }; static InitChainEntry sInitChain[] = { @@ -153,7 +169,7 @@ void EnHintSkb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable, - this->morphtable, 20); + this->morphTable, OBJECT_SKB_LIMB_MAX); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElement); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -181,7 +197,7 @@ void func_80C1FE20(EnHintSkb* this, PlayState* play) { } void func_80C1FE30(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); this->actor.speed = 1.6f; this->actionFunc = func_80C1FE80; } @@ -200,7 +216,7 @@ void func_80C1FE80(EnHintSkb* this, PlayState* play) { void func_80C1FF30(EnHintSkb* this) { this->collider.base.atFlags &= ~AT_BOUNCED; this->actor.speed = 0.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_2); this->actionFunc = func_80C1FF88; } @@ -274,12 +290,12 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) { void func_80C20274(EnHintSkb* this) { if (this->skelAnime.animation == &object_skb_Anim_00697C) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); this->actor.gravity = -1.0f; this->actor.speed = 1.0f; } else { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -4.0f; } @@ -317,7 +333,7 @@ void func_80C20334(EnHintSkb* this, PlayState* play) { } void func_80C20484(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_4); this->unk_3E8 |= 4; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -6.0f; @@ -349,7 +365,7 @@ void func_80C20590(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -376,7 +392,7 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -405,10 +421,10 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { this->actor.speed = 2.4f; this->actor.gravity = -1.0f; this->actor.velocity.y = 3.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); } } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; } @@ -449,6 +465,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) { case TEXT_STATE_NONE: case TEXT_STATE_1: case TEXT_STATE_CLOSING: + default: break; } @@ -467,7 +484,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) { Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); } } @@ -542,7 +559,7 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) { case 0x1147: Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); break; case 0x1148: @@ -578,6 +595,9 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) { func_80C2075C(this); } break; + + default: + break; } } @@ -591,7 +611,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if (this->actionFunc == func_80C1FE80) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_12); } func_80C2075C(this); } @@ -682,6 +702,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { this->unk_3E8 |= 1; func_80C20274(this); break; + case 3: if (this->actor.colChkInfo.health != 0) { Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); @@ -695,6 +716,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); func_80C20540(this); break; + case 4: this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; @@ -702,14 +724,14 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { this->drawDmgEffScale = 0.5f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); func_80C2066C(this); break; case 12: case 14: this->unk_3E8 |= 1; - + // fallthrough case 15: if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) || @@ -717,11 +739,11 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) { this->unk_3E8 |= 1; } - + // fallthrough case 13: Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); func_80C20274(this); break; @@ -731,6 +753,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { case 8: case 9: case 10: + default: break; } } @@ -850,7 +873,7 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 EnHintSkb* this = THIS; f32 temp_f10; - if (limbIndex == 11) { + if (limbIndex == OBJECT_SKB_LIMB_0B) { OPEN_DISPS(play->state.gfxCtx); temp_f10 = fabsf(Math_SinS(play->state.frames * 6000) * 95.0f) + 160.0f; @@ -859,13 +882,13 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 gDPSetEnvColor(POLY_OPA_DISP++, (s16)temp_f10, (s16)temp_f10, (s16)temp_f10, 255); CLOSE_DISPS(play->state.gfxCtx); - } else if (limbIndex == 10) { + } else if (limbIndex == OBJECT_SKB_LIMB_0A) { Matrix_MultZero(&this->actor.focus.pos); - } else if ((limbIndex == 12) && (this->unk_3DE == 1)) { + } else if ((limbIndex == OBJECT_SKB_LIMB_0C) && (this->unk_3DE == 1)) { Matrix_RotateZS(0x71C, MTXMODE_APPLY); } - if (((limbIndex == 11) || (limbIndex == 12)) && (this->unk_3E8 & 2)) { + if (((limbIndex == OBJECT_SKB_LIMB_0B) || (limbIndex == OBJECT_SKB_LIMB_0C)) && (this->unk_3E8 & 2)) { *dList = NULL; } @@ -879,21 +902,25 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if (!(this->unk_3E8 & 8)) { Collider_UpdateSpheres(limbIndex, &this->collider); - if ((limbIndex == 11) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { + if ((limbIndex == OBJECT_SKB_LIMB_0B) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); this->unk_3E8 |= 2; - } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && ((limbIndex != 11) || !(this->unk_3E8 & 1)) && - (limbIndex != 12)) { + } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && + ((limbIndex != OBJECT_SKB_LIMB_0B) || !(this->unk_3E8 & 1)) && (limbIndex != OBJECT_SKB_LIMB_0C)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); } if (this->drawDmgEffTimer != 0) { - if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || - (limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) || - (limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) { + if ((limbIndex == OBJECT_SKB_LIMB_02) || (limbIndex == OBJECT_SKB_LIMB_04) || + (limbIndex == OBJECT_SKB_LIMB_05) || (limbIndex == OBJECT_SKB_LIMB_06) || + (limbIndex == OBJECT_SKB_LIMB_07) || (limbIndex == OBJECT_SKB_LIMB_08) || + (limbIndex == OBJECT_SKB_LIMB_09) || (limbIndex == OBJECT_SKB_LIMB_0D) || + (limbIndex == OBJECT_SKB_LIMB_0E) || (limbIndex == OBJECT_SKB_LIMB_0F) || + (limbIndex == OBJECT_SKB_LIMB_10) || (limbIndex == OBJECT_SKB_LIMB_11) || + (limbIndex == OBJECT_SKB_LIMB_12)) { Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; - } else if ((limbIndex == 11) && !(this->unk_3E8 & 2)) { + } else if ((limbIndex == OBJECT_SKB_LIMB_0B) && !(this->unk_3E8 & 2)) { Matrix_MultVec3f(&D_80C21E70, &this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; } diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h index e263b9de0..95576210d 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h @@ -2,6 +2,7 @@ #define Z_EN_HINT_SKB_H #include "global.h" +#include "objects/object_skb/object_skb.h" struct EnHintSkb; @@ -37,8 +38,8 @@ typedef struct EnHintSkb { /* 0x2D4 */ f32 drawDmgEffAlpha; /* 0x2D8 */ f32 drawDmgEffScale; /* 0x2DC */ s32 bodyPartsCount; - /* 0x2E0 */ Vec3s jointTable[20]; - /* 0x358 */ Vec3s morphtable[20]; + /* 0x2E0 */ Vec3s jointTable[OBJECT_SKB_LIMB_MAX]; + /* 0x358 */ Vec3s morphTable[OBJECT_SKB_LIMB_MAX]; /* 0x3D0 */ UNK_TYPE1 unk3D0[0xC]; /* 0x3DC */ s16 unk_3DC; /* 0x3DE */ s16 unk_3DE; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 00a5fd3b1..fe386b2ff 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -40,10 +40,10 @@ void EnHorse_StartReversing(EnHorse* this); void EnHorse_StartLowJump(EnHorse* this, PlayState* play); void EnHorse_StartHighJump(EnHorse* this, PlayState* play); void EnHorse_InitInactive(EnHorse* this); -void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames); +void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames); void EnHorse_ResetIdleAnimation(EnHorse* this); void EnHorse_StartIdleRidable(EnHorse* this); -void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames); +void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames); void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play); void EnHorse_InitIngoHorse(EnHorse* this); void EnHorse_UpdateIngoHorseAnim(EnHorse* this); @@ -109,33 +109,56 @@ typedef struct { /* 0x4 */ RaceWaypoint* waypoints; } RaceInfo; // size = 0x8 -static AnimationHeader* sEponaAnimations[] = { - &gEponaIdleAnim, - &gEponaWhinnyAnim, - &object_horse_link_child_Anim_005F64, - &object_horse_link_child_Anim_004DE8, - &gEponaWalkAnim, - &gEponaTrotAnim, - &gEponaGallopAnim, - &object_horse_link_child_Anim_0035B0, - &object_horse_link_child_Anim_003D38, +static AnimationHeader* sEponaAnimations[ENHORSE_ANIM_MAX] = { + &gEponaIdleAnim, // ENHORSE_ANIM_IDLE + &gEponaWhinnyAnim, // ENHORSE_ANIM_WHINNY + &object_horse_link_child_Anim_005F64, // ENHORSE_ANIM_STOPPING + &object_horse_link_child_Anim_004DE8, // ENHORSE_ANIM_REARING + &gEponaWalkAnim, // ENHORSE_ANIM_WALK + &gEponaTrotAnim, // ENHORSE_ANIM_TROT + &gEponaGallopAnim, // ENHORSE_ANIM_GALLOP + &object_horse_link_child_Anim_0035B0, // ENHORSE_ANIM_LOW_JUMP + &object_horse_link_child_Anim_003D38, // ENHORSE_ANIM_HIGH_JUMP }; -static AnimationHeader* sHniAnimations[] = { - &gHorseIdleAnim, &gHorseShakeHeadAnim, &gHorseStopAnim, &gHorseWhinnyAnim, &gHorseWalkAnim, - &gHorseTrotAnim, &gHorseGallopAnim, &gHorseJumpLowAnim, &gHorseJumpHighAnim, +static AnimationHeader* sHniAnimations[ENHORSE_ANIM_MAX] = { + &gHorseIdleAnim, // ENHORSE_ANIM_IDLE + &gHorseShakeHeadAnim, // ENHORSE_ANIM_WHINNY + &gHorseStopAnim, // ENHORSE_ANIM_STOPPING + &gHorseWhinnyAnim, // ENHORSE_ANIM_REARING @TODO: Does not line up + &gHorseWalkAnim, // ENHORSE_ANIM_WALK + &gHorseTrotAnim, // ENHORSE_ANIM_TROT + &gHorseGallopAnim, // ENHORSE_ANIM_GALLOP + &gHorseJumpLowAnim, // ENHORSE_ANIM_LOW_JUMP + &gHorseJumpHighAnim, // ENHORSE_ANIM_HIGH_JUMP }; -static AnimationHeader** sAnimationHeaders[] = { - NULL, NULL, sEponaAnimations, sHniAnimations, sHniAnimations, +static AnimationHeader** sAnimationHeaders[HORSE_TYPE_MAX] = { + NULL, // HORSE_TYPE_EPONA + NULL, // HORSE_TYPE_HNI + sEponaAnimations, // HORSE_TYPE_2 + sHniAnimations, // HORSE_TYPE_BANDIT + sHniAnimations, // HORSE_TYPE_DONKEY }; -static f32 sPlaybackSpeeds[] = { - 2.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 3.0f / 3.0f, 2.0f / 3.0f, 2.0f / 3.0f, +static f32 sPlaybackSpeeds[ENHORSE_ANIM_MAX] = { + 2.0f / 3.0f, // ENHORSE_ANIM_IDLE + 2.0f / 3.0f, // ENHORSE_ANIM_WHINNY + 3.0f / 3.0f, // ENHORSE_ANIM_STOPPING + 3.0f / 3.0f, // ENHORSE_ANIM_REARING + 3.0f / 3.0f, // ENHORSE_ANIM_WALK + 3.0f / 3.0f, // ENHORSE_ANIM_TROT + 3.0f / 3.0f, // ENHORSE_ANIM_GALLOP + 2.0f / 3.0f, // ENHORSE_ANIM_LOW_JUMP + 2.0f / 3.0f, // ENHORSE_ANIM_HIGH_JUMP }; -static SkeletonHeader* sSkeletonHeaders[] = { - NULL, NULL, &gEponaSkel, NULL, NULL, +static SkeletonHeader* sSkeletonHeaders[HORSE_TYPE_MAX] = { + NULL, // HORSE_TYPE_EPONA + NULL, // HORSE_TYPE_HNI + &gEponaSkel, // HORSE_TYPE_2 + NULL, // HORSE_TYPE_BANDIT + NULL, // HORSE_TYPE_DONKEY }; ActorInit En_Horse_InitVars = { @@ -570,7 +593,8 @@ void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) { } else { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST); } - } else if ((this->animIndex == 3) && (this->curFrame > 25.0f) && !(this->stateFlags & ENHORSE_LAND2_SOUND)) { + } else if ((this->animIndex == ENHORSE_ANIM_REARING) && (this->curFrame > 25.0f) && + !(this->stateFlags & ENHORSE_LAND2_SOUND)) { this->stateFlags |= ENHORSE_LAND2_SOUND; if (this->type == HORSE_TYPE_2) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2); @@ -836,7 +860,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); } - this->animIndex = 0; + this->animIndex = ENHORSE_ANIM_IDLE; this->numBoosts = 6; this->boostRegenTime = 0; this->postDrawFunc = NULL; @@ -1900,21 +1924,21 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play) { } } -void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) { +void EnHorse_PlayIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) { this->action = ENHORSE_ACTION_IDLE; this->actor.speed = 0.0f; - if ((anim != ENHORSE_ANIM_IDLE) && (anim != ENHORSE_ANIM_WHINNY) && (anim != ENHORSE_ANIM_REARING)) { - anim = ENHORSE_ANIM_IDLE; + if ((animIndex != ENHORSE_ANIM_IDLE) && (animIndex != ENHORSE_ANIM_WHINNY) && (animIndex != ENHORSE_ANIM_REARING)) { + animIndex = ENHORSE_ANIM_IDLE; } - if (sAnimationHeaders[this->type][anim] == NULL) { - anim = ENHORSE_ANIM_IDLE; + if (sAnimationHeaders[this->type][animIndex] == NULL) { + animIndex = ENHORSE_ANIM_IDLE; } - if (anim != this->animIndex) { - this->animIndex = anim; - if (anim == ENHORSE_ANIM_IDLE) { + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + if (animIndex == ENHORSE_ANIM_IDLE) { this->stateFlags &= ~ENHORSE_SANDDUST_SOUND; } else { if (this->animIndex == ENHORSE_ANIM_WHINNY) { @@ -1942,8 +1966,8 @@ void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 sta } } -void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames) { - EnHorse_PlayIdleAnimation(this, anim, morphFrames, this->curFrame); +void EnHorse_ChangeIdleAnimation(EnHorse* this, s32 animIndex, f32 morphFrames) { + EnHorse_PlayIdleAnimation(this, animIndex, morphFrames, this->curFrame); } void EnHorse_ResetIdleAnimation(EnHorse* this) { @@ -1999,16 +2023,16 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) { } } -void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) { +void EnHorse_StartMovingAnimation(EnHorse* this, s32 animIndex, f32 morphFrames, f32 startFrames) { this->action = ENHORSE_ACTION_FOLLOW_PLAYER; this->stateFlags &= ~ENHORSE_TURNING_TO_PLAYER; - if ((anim != ENHORSE_ANIM_TROT) && (anim != ENHORSE_ANIM_GALLOP) && (anim != ENHORSE_ANIM_WALK)) { - anim = ENHORSE_ANIM_WALK; + if ((animIndex != ENHORSE_ANIM_TROT) && (animIndex != ENHORSE_ANIM_GALLOP) && (animIndex != ENHORSE_ANIM_WALK)) { + animIndex = ENHORSE_ANIM_WALK; } - if (anim != this->animIndex) { - this->animIndex = anim; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, startFrames, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, morphFrames); @@ -2019,38 +2043,38 @@ void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 } void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) { - s32 anim = ENHORSE_ANIM_WALK; + s32 animIndex = ENHORSE_ANIM_WALK; f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else if (!(distToPlayer <= 300.0f) && (distToPlayer <= 400.0f)) { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } if (this->animIndex == ENHORSE_ANIM_GALLOP) { if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } } else if (this->animIndex == ENHORSE_ANIM_TROT) { if (distToPlayer > 400.0f) { - anim = ENHORSE_ANIM_GALLOP; + animIndex = ENHORSE_ANIM_GALLOP; } else if (distToPlayer < 300.0f) { - anim = ENHORSE_ANIM_WALK; + animIndex = ENHORSE_ANIM_WALK; } else { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } } else if (this->animIndex == ENHORSE_ANIM_WALK) { if (distToPlayer > 300.0f) { - anim = ENHORSE_ANIM_TROT; + animIndex = ENHORSE_ANIM_TROT; } else { - anim = ENHORSE_ANIM_WALK; + animIndex = ENHORSE_ANIM_WALK; } } - EnHorse_StartMovingAnimation(this, anim, -3.0f, 0.0f); + EnHorse_StartMovingAnimation(this, animIndex, -3.0f, 0.0f); } void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { @@ -2155,7 +2179,7 @@ void EnHorse_InitIngoHorse(EnHorse* this) { void EnHorse_SetIngoAnimation(s32 animIndex, f32 curFrame, s32 arg2, s16* animIndexOut) { *animIndexOut = sIngoAnimIndices[animIndex]; - if (arg2 == ENIN_ANIM_1) { + if (arg2 == 1) { if (animIndex == ENHORSE_ANIM_TROT) { *animIndexOut = ENIN_ANIM_4; } else if (animIndex == ENHORSE_ANIM_GALLOP) { @@ -2286,7 +2310,7 @@ void func_80881290(EnHorse* this, PlayState* play) { void func_80881398(EnHorse* this, PlayState* play) { Vec3s* jointTable; f32 y; - s32 animeUpdated; + s32 isAnimFinished; f32 curFrame; this->stateFlags |= ENHORSE_JUMPING; @@ -2294,7 +2318,7 @@ void func_80881398(EnHorse* this, PlayState* play) { this->actor.speed = 14.0f; } - animeUpdated = SkelAnime_Update(&this->skin.skelAnime); + isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); curFrame = this->skin.skelAnime.curFrame; if (curFrame > 23.0f) { @@ -2313,8 +2337,8 @@ void func_80881398(EnHorse* this, PlayState* play) { this->actor.world.pos.y = this->jumpStartY + (y * 0.01f * this->unk_528 * 0.01f); } - if (animeUpdated || ((curFrame > 17.0f) && - (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { + if (isAnimFinished || ((curFrame > 17.0f) && + (this->actor.world.pos.y < ((this->actor.floorHeight - this->actor.velocity.y) + 80.0f)))) { if (this->type == HORSE_TYPE_2) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_LAND); } else { @@ -2962,7 +2986,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { f32 playerDistToHome; f32 distToPlayer; s32 nextAnimIndex = this->animIndex; - s32 animFinished; + s32 isAnimFinished; s16 yaw; if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) { @@ -3041,7 +3065,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; } - animFinished = SkelAnime_Update(&this->skin.skelAnime); + isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); if (((this->animIndex == ENHORSE_ANIM_IDLE) || (this->animIndex == ENHORSE_ANIM_WHINNY)) && ((nextAnimIndex == ENHORSE_ANIM_GALLOP) || (nextAnimIndex == ENHORSE_ANIM_TROT) || @@ -3054,7 +3078,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { } else if (this->animIndex == ENHORSE_ANIM_TROT) { func_8087C178(this); } - } else if (animFinished) { + } else if (isAnimFinished) { if (nextAnimIndex == ENHORSE_ANIM_GALLOP) { func_8087C1C0(this); } else if (nextAnimIndex == ENHORSE_ANIM_TROT) { @@ -3499,7 +3523,7 @@ void EnHorse_ObstructMovement(EnHorse* this, PlayState* play, s32 obstacleType, this->actor.world.pos = this->lastPos; this->stateFlags |= ENHORSE_OBSTACLE; if (this->playerControlled == 0) { - if (this->animIndex != 3) {} + if (this->animIndex != ENHORSE_ANIM_REARING) {} } else if (this->action != ENHORSE_ACTION_MOUNTED_REARING) { if (this->stateFlags & ENHORSE_JUMPING) { this->stateFlags &= ~ENHORSE_JUMPING; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 75f0254fc..f3c868c85 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -93,7 +93,8 @@ typedef enum EnHorseAnimation { /* 5 */ ENHORSE_ANIM_TROT, /* 6 */ ENHORSE_ANIM_GALLOP, /* 7 */ ENHORSE_ANIM_LOW_JUMP, - /* 8 */ ENHORSE_ANIM_HIGH_JUMP + /* 8 */ ENHORSE_ANIM_HIGH_JUMP, + /* 9 */ ENHORSE_ANIM_MAX } EnHorseAnimation; typedef enum HorseType { @@ -101,7 +102,8 @@ typedef enum HorseType { /* 1 */ HORSE_TYPE_HNI, /* 2 */ HORSE_TYPE_2, /* 3 */ HORSE_TYPE_BANDIT, - /* 4 */ HORSE_TYPE_DONKEY // Cremia's donkey + /* 4 */ HORSE_TYPE_DONKEY, // Cremia's donkey + /* 5 */ HORSE_TYPE_MAX } HorseType; #define ENHORSE_PARAM_BANDIT 0x2000 diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index bba55073b..78d6f8624 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -19,7 +19,7 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play); void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play); void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play); -void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex); +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex); void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play); void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this); void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play); @@ -51,7 +51,7 @@ typedef enum { /* 5 */ OOT_CHILD_EPONA_ANIM_MAX } OoTEponaAnimation; -AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = { +static AnimationHeader* sAnimations[OOT_CHILD_EPONA_ANIM_MAX] = { &gEponaIdleAnim, // OOT_CHILD_EPONA_ANIM_IDLE &gEponaWhinnyAnim, // OOT_CHILD_EPONA_ANIM_WHINNY &gEponaWalkAnim, // OOT_CHILD_EPONA_ANIM_WALK @@ -221,7 +221,7 @@ void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play) { void EnHorseLinkChild_SetupActionFunc0(EnHorseLinkChild* this) { this->action = OOT_CHILD_EPONA_ACTION_0; this->animIndex++; - if (this->animIndex >= ARRAY_COUNT(sAnimPlaySpeeds)) { + if (this->animIndex >= OOT_CHILD_EPONA_ANIM_MAX) { this->animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animIndex]); @@ -238,16 +238,16 @@ void EnHorseLinkChild_ActionFunc0(EnHorseLinkChild* this, PlayState* play) { } } -void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimIndex) { +void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 animIndex) { this->action = OOT_CHILD_EPONA_ACTION_WAIT_FOR_PLAYER; this->actor.speed = 0.0f; - if ((nextAnimIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (nextAnimIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; + if ((animIndex != OOT_CHILD_EPONA_ANIM_IDLE) && (animIndex != OOT_CHILD_EPONA_ANIM_WHINNY)) { + animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } @@ -258,7 +258,7 @@ void EnHorseLinkChild_SetupWaitForPlayer(EnHorseLinkChild* this, s32 nextAnimInd */ void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) { f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); - s32 nextAnimIndex; + s32 animIndex; if (SkelAnime_Update(&this->skin.skelAnime)) { if ((distToPlayer < 1000.0f) && (distToPlayer > 70.0f)) { @@ -267,13 +267,13 @@ void EnHorseLinkChild_WaitForPlayer(EnHorseLinkChild* this, PlayState* play) { } if (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = OOT_CHILD_EPONA_ANIM_WHINNY; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -297,7 +297,7 @@ void EnHorseLinkChild_SetupGreetPlayer(EnHorseLinkChild* this) { void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { f32 distToPlayer; s16 yawTowardPlayerDiff; - s32 nextAnimIndex; + s32 animIndex; if ((this->animIndex == OOT_CHILD_EPONA_ANIM_GALLOP) || (this->animIndex == OOT_CHILD_EPONA_ANIM_TROT) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WALK)) { @@ -321,13 +321,13 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { } if ((distToPlayer < 1000.0f) && (distToPlayer >= 300.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if ((distToPlayer < 300.0f) && (distToPlayer >= 150.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if ((distToPlayer < 150.0f) && (distToPlayer >= 70.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { @@ -335,8 +335,8 @@ void EnHorseLinkChild_GreetPlayer(EnHorseLinkChild* this, PlayState* play) { return; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -394,16 +394,16 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) { Player* player; f32 distToPlayer; s32 isAnimFinished; - s32 nextAnimIndex; + s32 animIndex; func_808DF088(this, play); player = GET_PLAYER(play); distToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); - nextAnimIndex = this->animIndex; + animIndex = this->animIndex; isAnimFinished = SkelAnime_Update(&this->skin.skelAnime); - if ((isAnimFinished) || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) || + if (isAnimFinished || (this->animIndex == OOT_CHILD_EPONA_ANIM_WHINNY) || (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE)) { //! @bug: The carry-over of this flag from OoT was not done correctly if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) { @@ -412,55 +412,53 @@ void EnHorseLinkChild_LonLonIdle(EnHorseLinkChild* this, PlayState* play) { if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) > 250.0f) { if (distToHome >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if ((distToHome < 300.0f) && (distToHome >= 150.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if ((distToHome < 150.0f) && (distToHome >= 70.0f)) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = - (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = - (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } else if (distToPlayer < 200.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToPlayer < 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if (distToPlayer < 400.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } else { this->actor.speed = 0.0f; if (this->animIndex == OOT_CHILD_EPONA_ANIM_IDLE) { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_WHINNY : OOT_CHILD_EPONA_ANIM_IDLE; } else { - nextAnimIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; + animIndex = (isAnimFinished == true) ? OOT_CHILD_EPONA_ANIM_IDLE : OOT_CHILD_EPONA_ANIM_WHINNY; } } } - if ((nextAnimIndex != this->animIndex) || (isAnimFinished == true)) { - this->animIndex = nextAnimIndex; + if ((this->animIndex != animIndex) || (isAnimFinished == true)) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { @@ -526,7 +524,7 @@ void EnHorseLinkChild_SetupActionFunc4(EnHorseLinkChild* this) { void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 distToTargetPos; - s32 nextAnimIndex; + s32 animIndex; this->timer++; if (this->timer > 300) { @@ -551,24 +549,24 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { if (!this->isReturningHome) { if (distToTargetPos >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToTargetPos >= 150.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } } else if (distToTargetPos >= 300.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_GALLOP; + animIndex = OOT_CHILD_EPONA_ANIM_GALLOP; this->actor.speed = 6.0f; } else if (distToTargetPos >= 150.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_TROT; + animIndex = OOT_CHILD_EPONA_ANIM_TROT; this->actor.speed = 4.0f; } else if (distToTargetPos >= 70.0f) { - nextAnimIndex = OOT_CHILD_EPONA_ANIM_WALK; + animIndex = OOT_CHILD_EPONA_ANIM_WALK; this->footstepCounter = 0; this->actor.speed = 2.0f; } else { @@ -576,8 +574,8 @@ void EnHorseLinkChild_ActionFunc4(EnHorseLinkChild* this, PlayState* play) { return; } - if (nextAnimIndex != this->animIndex) { - this->animIndex = nextAnimIndex; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; Animation_Change(&this->skin.skelAnime, sAnimations[this->animIndex], EnHorseLinkChild_GetAnimSpeed(this), 0.0f, Animation_GetLastFrame(sAnimations[this->animIndex]), ANIMMODE_ONCE, -5.0f); } else { diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index 5146f4fcd..b665b5d02 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -110,7 +110,7 @@ void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) { Math_Vec3f_Diff(&src, dst, &diff); - distance = SQ(diff.x) + SQ(diff.z); // gets un-squared after we check if we are too close + distance = SQXZ(diff); // gets un-squared after we check if we are too close if (SQ(offset) > distance) { return; @@ -176,20 +176,20 @@ void func_80953098(EnHs* this, PlayState* play) { void func_80953180(EnHs* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { - case 0x33F4: // text: laughing that they are all roosters (!) - case 0x33F6: // text: Grog regrets not being able to see his chicks reach adult hood + case 0x33F4: // laughing that they are all roosters (!) + case 0x33F6: // Grog regrets not being able to see his chicks reach adult hood Message_CloseTextbox(play); this->actionFunc = func_8095345C; break; - case 0x33F7: // text: notice his chicks are grown up, happy, wants to give you bunny hood + case 0x33F7: // notice his chicks are grown up, happy, wants to give you bunny hood this->actor.flags &= ~ACTOR_FLAG_10000; Message_CloseTextbox(play); this->actionFunc = func_80953098; func_80953098(this, play); break; - case 0x33F9: // text: laughing that they are all roosters (.) + case 0x33F9: // laughing that they are all roosters (.) this->actor.flags &= ~ACTOR_FLAG_10000; Message_CloseTextbox(play); this->actionFunc = func_8095345C; @@ -341,6 +341,9 @@ s32 EnHs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po return false; } break; + + default: + break; } return false; } diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 7e30676e2..9fbd7ff85 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -417,11 +417,11 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { */ void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->animIndex == EN_JG_ANIM_SURPRISE_START) { - if (currentFrame == lastFrame) { + if (curFrame == lastFrame) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -472,11 +472,11 @@ void EnJg_Walk(EnJg* this, PlayState* play) { void EnJg_Talk(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); u16 temp; - if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (currentFrame == lastFrame)) { + if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == lastFrame)) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -542,7 +542,7 @@ void EnJg_SetupWalk(EnJg* this, PlayState* play) { } void EnJg_Freeze(EnJg* this, PlayState* play) { - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->action == EN_JG_ACTION_SPAWNING) { @@ -557,7 +557,7 @@ void EnJg_Freeze(EnJg* this, PlayState* play) { this->actionFunc = EnJg_FrozenIdle; } else if (this->animIndex == EN_JG_ANIM_FROZEN_START) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; - if (currentFrame == lastFrame) { + if (curFrame == lastFrame) { this->freezeTimer = 1000; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, @@ -898,7 +898,7 @@ void EnJg_SpawnBreath(EnJg* this, PlayState* play) { * handing it off to EnJg_Freeze. */ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play) { - s16 currentFrame = this->skelAnime.curFrame; + s16 curFrame = this->skelAnime.curFrame; s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -924,7 +924,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play } this->freezeTimer--; - if ((this->freezeTimer <= 0) && (currentFrame == lastFrame)) { + if ((this->freezeTimer <= 0) && (curFrame == lastFrame)) { this->animIndex = EN_JG_ANIM_FROZEN_START; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index 73f1111a5..5ebdcd43f 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -115,7 +115,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.damageTable = &sDamageTable; SkelAnime_InitFlex(play, &this->skelAnime, &object_pr_Skel_004188, &object_pr_Anim_004340, this->jointTable, - this->morphtable, 5); + this->morphTable, 5); this->unk_1E0 = ENPR2_GET_F(&this->actor); this->actor.colChkInfo.mass = 10; Math_Vec3f_Copy(&this->unk_228, &this->actor.home.pos); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h index 94fb7e033..7d462b639 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h @@ -17,7 +17,7 @@ typedef struct EnPr2 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[5]; - /* 0x1A6 */ Vec3s morphtable[5]; + /* 0x1A6 */ Vec3s morphTable[5]; /* 0x1C4 */ EnPr2ActionFunc actionFunc; /* 0x1C8 */ s16 pathIndex; /* 0x1CC */ Path* path; diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 605761711..c7006f087 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -636,7 +636,7 @@ void EnSsh_Init(Actor* thisx, PlayState* play) { EnSsh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); - SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphtable, 30); + SkelAnime_Init(play, &this->skelAnime, &object_ssh_Skel_006470, NULL, this->jointTable, this->morphTable, 30); Animation_Change(&this->skelAnime, &object_ssh_Anim_001494, 1.0f, 0.0f, frameCount, ANIMMODE_LOOP_INTERP, 0.0f); this->blureIdx = EnSsh_CreateBlureEffect(play); EnSsh_InitColliders(this, play); diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h index 6f19a5e51..8c95ea628 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h @@ -31,7 +31,7 @@ typedef struct EnSsh { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[30]; - /* 0x23C */ Vec3s morphtable[30]; + /* 0x23C */ Vec3s morphTable[30]; /* 0x2F0 */ EnSshActionFunc actionFunc; /* 0x2F4 */ ColliderCylinder collider1[6]; /* 0x4BC */ ColliderJntSph collider2; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 7ecc8c4e3..9a4244bc2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -15951,7 +15951,7 @@ 0x80BDAF24:("ObjHsStump_Draw",), 0x80BDB040:("EnHiddenNuts_Init",), 0x80BDB188:("EnHiddenNuts_Destroy",), - 0x80BDB1B4:("func_80BDB1B4",), + 0x80BDB1B4:("EnHiddenNuts_ChangeAnim",), 0x80BDB268:("func_80BDB268",), 0x80BDB2B8:("func_80BDB2B8",), 0x80BDB580:("func_80BDB580",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 01a46d7d1..9320ca10e 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -15810,8 +15810,8 @@ 0x80BDAFA0:("D_80BDAFA0","f32","",0x4), 0x80BDC0B0:("En_Hidden_Nuts_InitVars","UNK_TYPE1","",0x1), 0x80BDC0D0:("D_80BDC0D0","UNK_TYPE1","",0x1), - 0x80BDC0FC:("D_80BDC0FC","UNK_TYPE1","",0x1), - 0x80BDC120:("D_80BDC120","UNK_TYPE1","",0x1), + 0x80BDC0FC:("sAnimations","UNK_TYPE1","",0x1), + 0x80BDC120:("sAnimationModes","UNK_TYPE1","",0x1), 0x80BDC12C:("D_80BDC12C","UNK_TYPE1","",0x1), 0x80BDC138:("D_80BDC138","UNK_TYPE1","",0x1), 0x80BDC144:("D_80BDC144","UNK_TYPE1","",0x1), From 9b1335aa7b5f33231e7bde444d77b38df3bfa87a Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 29 Sep 2023 23:14:05 +1000 Subject: [PATCH 36/74] Animation Cleanup: En_I* (#1400) * cleanup I * oops --- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 8 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 168 ++++++++++------- src/overlays/actors/ovl_En_Ig/z_en_ig.h | 9 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 8 +- src/overlays/actors/ovl_En_In/z_en_in.c | 174 ++++++++++-------- src/overlays/actors/ovl_En_In/z_en_in.h | 29 ++- .../actors/ovl_En_Insect/z_en_insect.c | 5 +- .../actors/ovl_En_Insect/z_en_insect.h | 5 +- .../z_en_invisible_ruppe.c | 3 + tools/disasm/functions.txt | 4 +- 10 files changed, 242 insertions(+), 171 deletions(-) diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index fe386b2ff..088e3fae0 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -2491,10 +2491,10 @@ void func_808819D8(EnHorse* this, PlayState* play) { } if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) { - this->rider->unk488 = 7; + this->rider->animIndex2 = ENIN_ANIM2_7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, - &this->rider->unk488); + &this->rider->animIndex2); } } @@ -3447,10 +3447,10 @@ void func_80884E0C(EnHorse* this, PlayState* play) { this->unk_56C = Math3D_Distance(&this->actor.world.pos, &this->actor.prevPos); if (((this->unk_550 == 5) || (this->unk_550 == 7)) && (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER)) { - this->rider->unk488 = 7; + this->rider->animIndex2 = ENIN_ANIM2_7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, - &this->rider->unk488); + &this->rider->animIndex2); } pos = this->actor.world.pos; diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index bd90f48c1..3006c7bfe 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -6,7 +6,6 @@ #include "z_en_ig.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" -#include "objects/object_dai/object_dai.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -143,17 +142,32 @@ static ColliderSphereInit sSphereInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum EnIgAnimation { + /* -1 */ ENIG_ANIM_NONE = -1, + /* 0 */ ENIG_ANIM_0, + /* 1 */ ENIG_ANIM_1, + /* 2 */ ENIG_ANIM_2, + /* 3 */ ENIG_ANIM_3, + /* 4 */ ENIG_ANIM_4, + /* 5 */ ENIG_ANIM_5, + /* 6 */ ENIG_ANIM_6, + /* 7 */ ENIG_ANIM_7, + /* 8 */ ENIG_ANIM_8, + /* 9 */ ENIG_ANIM_9, + /* 10 */ ENIG_ANIM_MAX +} EnIgAnimation; + +static AnimationInfoS sAnimationInfo[ENIG_ANIM_MAX] = { + { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_0 + { &object_dai_Anim_0048B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_1 + { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_2 + { &object_dai_Anim_005100, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_3 + { &object_dai_Anim_0010F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_4 + { &object_dai_Anim_001E44, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_5 + { &object_dai_Anim_0014BC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIG_ANIM_6 + { &object_dai_Anim_003CAC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIG_ANIM_7 + { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIG_ANIM_8 + { &object_dai_Anim_0040E0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIG_ANIM_9 }; Actor* func_80BF1150(EnIg* this, PlayState* play, u8 actorCat, s16 actorId) { @@ -204,44 +218,44 @@ EnDoor* func_80BF1200(PlayState* play, s32 arg1) { return SubS_FindDoor(play, phi_a1); } -void func_80BF1258(EnIg* this) { - this->skelAnime.playSpeed = this->unk_3D4; +void EnIg_UpdateSkelAnime(EnIg* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BF1284(EnIg* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnIg_ChangeAnim(EnIg* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - switch (arg1) { - case 0: - case 1: - if ((this->unk_3FC != 0) && (this->unk_3FC != 1)) { - phi_v1 = true; + switch (animIndex) { + case ENIG_ANIM_0: + case ENIG_ANIM_1: + if ((this->animIndex != ENIG_ANIM_0) && (this->animIndex != ENIG_ANIM_1)) { + changeAnim = true; } break; - case 2: - case 3: - if ((this->unk_3FC != 2) && (this->unk_3FC != 3)) { - phi_v1 = true; + case ENIG_ANIM_2: + case ENIG_ANIM_3: + if ((this->animIndex != ENIG_ANIM_2) && (this->animIndex != ENIG_ANIM_3)) { + changeAnim = true; } break; default: - if (arg1 != this->unk_3FC) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } break; } - if (phi_v1) { - this->unk_3FC = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_3D4 = this->skelAnime.playSpeed; + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + return didAnimChange; } void func_80BF1354(EnIg* this, PlayState* play) { @@ -358,16 +372,18 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { switch (this->unk_3F6) { case 0: - if (func_80BF16C8(this, csId)) { - case 2: - case 4: - if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { - Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), - this->actor.child); - } - this->unk_3F6++; - ret = true; + if (!func_80BF16C8(this, csId)) { + break; } + // fallthrough + case 2: + case 4: + if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { + Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), + this->actor.child); + } + this->unk_3F6++; + ret = true; break; case 1: @@ -387,6 +403,9 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { this->unk_3F6++; ret = true; break; + + default: + break; } return ret; } @@ -438,10 +457,10 @@ s32 func_80BF19A0(EnIg* this, PlayState* play) { void func_80BF1A60(EnIg* this, PlayState* play) { if (this->unk_3F4 == 0) { - func_80BF1284(this, 4); + EnIg_ChangeAnim(this, ENIG_ANIM_4); this->unk_3F4++; } else if ((this->unk_3F4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80BF1284(this, 5); + EnIg_ChangeAnim(this, ENIG_ANIM_5); this->unk_3F4++; } } @@ -449,7 +468,7 @@ void func_80BF1A60(EnIg* this, PlayState* play) { s32 func_80BF1AE0(EnIg* this, PlayState* play) { switch (this->scheduleResult) { case 3: - func_80BF1284(this, 0); + EnIg_ChangeAnim(this, ENIG_ANIM_0); break; case 10: @@ -457,7 +476,10 @@ s32 func_80BF1AE0(EnIg* this, PlayState* play) { case 12: case 13: case 14: - func_80BF1284(this, 2); + EnIg_ChangeAnim(this, ENIG_ANIM_2); + break; + + default: break; } return true; @@ -471,8 +493,8 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { if (player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_400 | PLAYER_STATE1_800)) { this->unk_3D0 |= 0x400; if (this->unk_3D2 != temp) { - if ((this->unk_3FC == 2) || (this->unk_3FC == 3)) { - func_80BF1284(this, 0); + if ((this->animIndex == ENIG_ANIM_2) || (this->animIndex == ENIG_ANIM_3)) { + EnIg_ChangeAnim(this, ENIG_ANIM_0); } if ((temp == 0x28B0) || (temp == 0x28B7)) { @@ -484,7 +506,10 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { } else if (this->unk_3D0 & 0x400) { this->unk_3D2 = 0; this->unk_3D0 &= ~0x400; + + //! FAKE: if (1) {} + func_80BF1AE0(this, play); } @@ -529,7 +554,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 sp2C = 0; if (func_80BF1C44(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_AN)) { - func_80BF1284(this, 0); + EnIg_ChangeAnim(this, ENIG_ANIM_0); SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x20; this->unk_3D0 |= 0x100; @@ -575,7 +600,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3E2 = sp56 - scheduleOutput->time0; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_3D0 |= 0x100; - func_80BF1284(this, 3); + EnIg_ChangeAnim(this, ENIG_ANIM_3); this->actor.gravity = 0.0f; ret = true; } @@ -626,7 +651,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_3D0 &= ~0x10; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 2); + EnIg_ChangeAnim(this, ENIG_ANIM_2); this->actor.gravity = -1.0f; ret = true; } @@ -662,7 +687,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.home.rot.y += 0x8000; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 1); + EnIg_ChangeAnim(this, ENIG_ANIM_1); break; case 4: @@ -670,7 +695,10 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.shape.rot.y = this->actor.world.rot.y; SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_3D0 |= 0x100; - func_80BF1284(this, 8); + EnIg_ChangeAnim(this, ENIG_ANIM_8); + break; + + default: break; } ret = true; @@ -710,6 +738,9 @@ s32 func_80BF2368(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 3: ret = func_80BF1D78(this, play, scheduleOutput); break; + + default: + break; } return ret; } @@ -765,6 +796,7 @@ s32 func_80BF25E8(EnIg* this, PlayState* play) { s32 pad; SubS_TimePathing_FillKnots(knots, SUBS_TIME_PATHING_ORDER, this->timePath->count + SUBS_TIME_PATHING_ORDER); + if (!(this->unk_3D0 & 8)) { timePathTargetPos = gZeroVec3f; SubS_TimePathing_Update(this->timePath, &this->timePathProgress, &this->timePathElapsedTime, @@ -830,11 +862,11 @@ s32 func_80BF293C(EnIg* this, PlayState* play) { Math_ApproachS(&this->actor.world.rot.y, this->actor.home.rot.y, 3, 0x2AA8); } else { this->actor.world.rot.y = this->actor.home.rot.y; - func_80BF1284(this, 7); + EnIg_ChangeAnim(this, ENIG_ANIM_7); } - } else if ((this->unk_3FC == 7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + } else if ((this->animIndex == ENIG_ANIM_7) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { SubS_SetOfferMode(&this->unk_3D0, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); - func_80BF1284(this, 9); + EnIg_ChangeAnim(this, ENIG_ANIM_9); } return true; } @@ -868,6 +900,9 @@ void func_80BF2A50(EnIg* this, PlayState* play) { case 4: func_80BF2890(this, play); break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); } @@ -916,9 +951,10 @@ void EnIg_Init(Actor* thisx, PlayState* play) { EnIg* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 28.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, 19); - this->unk_3FC = -1; - func_80BF1284(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, + OBJECT_DAI_LIMB_MAX); + this->animIndex = ENIG_ANIM_NONE; + EnIg_ChangeAnim(this, ENIG_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit); Collider_InitAndSetSphere(play, &this->collider2, &this->actor, &sSphereInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); @@ -946,7 +982,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) { func_80BF1B40(this, play); if (this->scheduleResult != 0) { - func_80BF1258(this); + EnIg_UpdateSkelAnime(this); func_80BF13E4(this); func_80BF15EC(this); SubS_Offer(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & SUBS_OFFER_MODE_MASK); @@ -960,7 +996,7 @@ s32 EnIg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Gfx** gfx) { EnIg* this = THIS; - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { *dList = NULL; } return false; @@ -973,7 +1009,7 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnIg* this = THIS; Vec3f sp2C; - if (limbIndex == 11) { + if (limbIndex == OBJECT_DAI_LIMB_0B) { Matrix_MultVec3f(&D_80BF3528, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); @@ -981,17 +1017,17 @@ void EnIg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList((*gfx)++, object_dai_DL_0087B8); } - if (limbIndex == 12) { + if (limbIndex == OBJECT_DAI_LIMB_0C) { gSPDisplayList((*gfx)++, object_dai_DL_0089D8); } - if (limbIndex == 9) { + if (limbIndex == OBJECT_DAI_LIMB_09) { gSPDisplayList((*gfx)++, object_dai_DL_008B00); Matrix_MultVec3f(&D_80BF351C, &sp2C); Math_Vec3f_ToVec3s(&this->collider2.dim.worldSphere.center, &sp2C); } - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { Matrix_Get(&this->unk_190); } } @@ -1013,7 +1049,7 @@ void EnIg_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx, Gfx** stepRot = false; } - if (limbIndex == 9) { + if (limbIndex == OBJECT_DAI_LIMB_09) { SubS_UpdateLimb(this->unk_3E8 + 0x4000, this->unk_3EA + this->actor.shape.rot.y + 0x4000, &this->unk_2D4, &this->unk_2E6, stepRot, overrideRot); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.h b/src/overlays/actors/ovl_En_Ig/z_en_ig.h index 274338a11..71c7c509d 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h @@ -2,6 +2,7 @@ #define Z_EN_IG_H #include "global.h" +#include "objects/object_dai/object_dai.h" struct EnIg; @@ -38,11 +39,11 @@ typedef struct EnIg { /* 0x2D4 */ Vec3f unk_2D4; /* 0x2E0 */ UNK_TYPE1 unk2E0[0x6]; /* 0x2E6 */ Vec3s unk_2E6; - /* 0x2EC */ Vec3s jointTable[19]; - /* 0x35E */ Vec3s morphTable[19]; + /* 0x2EC */ Vec3s jointTable[OBJECT_DAI_LIMB_MAX]; + /* 0x35E */ Vec3s morphTable[OBJECT_DAI_LIMB_MAX]; /* 0x3D0 */ u16 unk_3D0; /* 0x3D2 */ u16 unk_3D2; - /* 0x3D4 */ f32 unk_3D4; + /* 0x3D4 */ f32 animPlaySpeed; /* 0x3D8 */ UNK_TYPE1 unk3D8[0x8]; /* 0x3E0 */ s16 unk_3E0; /* 0x3E2 */ s16 unk_3E2; @@ -57,7 +58,7 @@ typedef struct EnIg { /* 0x3F4 */ s16 unk_3F4; /* 0x3F6 */ s16 unk_3F6; /* 0x3F8 */ EnIgUnkFunc unk_3F8; - /* 0x3FC */ s32 unk_3FC; + /* 0x3FC */ s32 animIndex; /* 0x400 */ UNK_TYPE1 unk400[0x8]; /* 0x408 */ s32 unk_408; } EnIg; // size = 0x40C diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index 96ce3db8c..7f3ed6de4 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -365,15 +365,15 @@ void EnIk_CheckActions(EnIk* this, PlayState* play) { } void EnIk_SetupIdle(EnIk* this) { - f32 frameCount = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim); + f32 endFrame = Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim); if (this->drawArmorFlags != 0) { this->timer = 10; } else { this->timer = 0; } - Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, frameCount, frameCount, - ANIMMODE_ONCE, this->timer); + Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, + this->timer); this->actionFunc = EnIk_Idle; this->actor.speed = 0.0f; } @@ -461,7 +461,7 @@ void EnIk_SetupVerticalAttack(EnIk* this) { playbackSpeed = 1.2f; } Animation_Change(&this->skelAnime, &gIronKnuckleVerticalAttackAnim, playbackSpeed, 0.0f, - Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), 3, -4.0f); + Animation_GetLastFrame(&gIronKnuckleVerticalAttackAnim.common), ANIMMODE_ONCE_INTERP, -4.0f); this->timer = 0; this->blurEffectSpawnLock = -1; this->actionFunc = EnIk_VerticalAttack; diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 1c0fc091d..19fbd436e 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -118,25 +118,25 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, +static AnimationInfoS sAnimationInfo[ENIN_ANIM_MAX] = { + { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_0 + { &object_in_Anim_001D10, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_1 + { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_2 + { &object_in_Anim_014F8C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_3 + { &object_in_Anim_000CB0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_4 + { &object_in_Anim_0003B4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_5 + { &object_in_Anim_001BE0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_6 + { &object_in_Anim_015918, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_7 + { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_8 + { &object_in_Anim_01C0B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_9 + { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_10 + { &object_in_Anim_01A140, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_11 + { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_12 + { &object_in_Anim_01B904, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_13 + { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENIN_ANIM_14 + { &object_in_Anim_01B3C4, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENIN_ANIM_15 + { &object_in_Anim_01B3C4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENIN_ANIM_16 + { &object_in_Anim_019EB4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENIN_ANIM_17 }; static TrackOptionsSet sTrackOptions = { @@ -147,20 +147,20 @@ static TrackOptionsSet sTrackOptions = { }; s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { - s16 frameCount; - s32 ret = false; + s16 endFrame; + s32 didAnimChange = false; - if ((animIndex >= 0) && (animIndex < 18)) { - ret = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); + if ((animIndex > ENIN_ANIM_NONE) && (animIndex < ENIN_ANIM_MAX)) { + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); } Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, - sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); } - return ret; + return didAnimChange; } s32 func_808F3178(EnIn* this, PlayState* play) { @@ -298,12 +298,19 @@ void func_808F3690(EnIn* this, PlayState* play) { } void func_808F374C(EnIn* this, PlayState* play) { - AnimationHeader* sAnimations[] = { - &object_in_Anim_015E38, &object_in_Anim_016A60, &object_in_Anim_0177AC, &object_in_Anim_016484, - &object_in_Anim_0170DC, &object_in_Anim_018240, &object_in_Anim_0187C8, &object_in_Anim_0198A8, + AnimationHeader* sAnimations[ENIN_ANIM2_MAX] = { + &object_in_Anim_015E38, // ENIN_ANIM2_0 + &object_in_Anim_016A60, // ENIN_ANIM2_1 + &object_in_Anim_0177AC, // ENIN_ANIM2_2 + &object_in_Anim_016484, // ENIN_ANIM2_3 + &object_in_Anim_0170DC, // ENIN_ANIM2_4 + &object_in_Anim_018240, // ENIN_ANIM2_5 + &object_in_Anim_0187C8, // ENIN_ANIM2_6 + &object_in_Anim_0198A8, // ENIN_ANIM2_7 }; - if (this->skelAnime.animation == &object_in_Anim_016484 || this->skelAnime.animation == &object_in_Anim_0170DC) { + if ((this->skelAnime.animation == &object_in_Anim_016484) || + (this->skelAnime.animation == &object_in_Anim_0170DC)) { if (Animation_OnFrame(&this->skelAnime, 8.0f)) { Audio_PlaySfx_Randomized(&this->actor.projectedPos, NA_SE_VO_IN_LASH_0, 2); if (Rand_ZeroOne() < 0.3f) { @@ -312,14 +319,16 @@ void func_808F374C(EnIn* this, PlayState* play) { Audio_PlaySfx_AtPos(&this->actor.projectedPos, NA_SE_IT_LASH); } } - if (this->skelAnime.animation == &object_in_Anim_0198A8 && Animation_OnFrame(&this->skelAnime, 20.0f)) { + + if ((this->skelAnime.animation == &object_in_Anim_0198A8) && Animation_OnFrame(&this->skelAnime, 20.0f)) { Actor_PlaySfx(&this->actor, NA_SE_VO_IN_CRY_0); } + if (SkelAnime_Update(&this->skelAnime)) { - this->unk488 %= ARRAY_COUNT(sAnimations); - this->unk486 = this->unk488; - Animation_Change(&this->skelAnime, sAnimations[this->unk488], 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[this->unk488]), ANIMMODE_ONCE, -10.0f); + this->animIndex2 %= ENIN_ANIM2_MAX; + this->unk486 = this->animIndex2; + Animation_Change(&this->skelAnime, sAnimations[this->animIndex2], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[this->animIndex2]), ANIMMODE_ONCE, -10.0f); } } @@ -407,7 +416,7 @@ void func_808F3B40(EnIn* this, PlayState* play) { this->actor.parent = NULL; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = func_808F3AD4; - textId = gSaveContext.save.day != 3 ? 0x3481 : 0x34A4; + textId = (gSaveContext.save.day != 3) ? 0x3481 : 0x34A4; this->actor.textId = textId; } else { Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f); @@ -958,6 +967,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347E: func_808F35D8(this, play); if (Inventory_HasEmptyBottle()) { @@ -1430,7 +1440,7 @@ void func_808F5A94(EnIn* this, PlayState* play) { void func_808F5B58(EnIn* this, PlayState* play) { if (Horse_IsActive(play, &play->actorCtx)) { - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + if (((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 6, &this->unk48C); @@ -1438,8 +1448,8 @@ void func_808F5B58(EnIn* this, PlayState* play) { func_808F5728(play, this, 2, &this->unk48C); } } - } else if (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER || - (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) { + } else if ((Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER) || + ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 4, &this->unk48C); } else { @@ -1452,7 +1462,7 @@ void func_808F5C98(EnIn* this, PlayState* play) { if (this->unk4B0 == WEEKEVENTREG_HORSE_RACE_STATE_END) { this->actionFunc = func_808F5B58; } - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + if (((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day != 3) { func_808F5728(play, this, 2, &this->unk48C); @@ -1484,7 +1494,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable, 20); + SkelAnime_InitFlex(play, &this->skelAnime, &object_in_Skel_014EA8, NULL, this->jointTable, this->morphTable, + OBJECT_IN_LIMB_MAX); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0); Collider_InitCylinder(play, &this->colliderCylinder); Collider_SetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); @@ -1499,7 +1510,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { } if ((type == ENIN_HORSE_RIDER_YELLOW_SHIRT) || (type == ENIN_HORSE_RIDER_BLUE_SHIRT)) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - this->unk488 = 1; + this->animIndex2 = ENIN_ANIM2_1; Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f, Animation_GetLastFrame(&object_in_Anim_016A60), ANIMMODE_ONCE, 0.0f); Actor_SetScale(&this->actor, 0.01f); @@ -1623,41 +1634,41 @@ void func_808F6334(EnIn* this, PlayState* play) { s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnIn* this = THIS; s32 pad; - Gfx* sp50[] = { - NULL, - NULL, - object_in_DL_0149A8, - object_in_DL_014AE0, - object_in_DL_014C30, - object_in_DL_0145D8, - object_in_DL_014710, - object_in_DL_014860, - object_in_DL_014420, - object_in_DL_012A78, - object_in_DL_013DE0, - object_in_DL_013F10, - object_in_DL_014040, - object_in_DL_0137A0, - object_in_DL_0138D0, - object_in_DL_013A00, - object_in_DL_012DF8, - object_in_DL_013670, - object_in_DL_013540, - object_in_DL_013440, + Gfx* sp50[OBJECT_IN_LIMB_MAX] = { + NULL, // OBJECT_IN_LIMB_NONE + NULL, // OBJECT_IN_LIMB_01 + object_in_DL_0149A8, // OBJECT_IN_LIMB_02 + object_in_DL_014AE0, // OBJECT_IN_LIMB_03 + object_in_DL_014C30, // OBJECT_IN_LIMB_04 + object_in_DL_0145D8, // OBJECT_IN_LIMB_05 + object_in_DL_014710, // OBJECT_IN_LIMB_06 + object_in_DL_014860, // OBJECT_IN_LIMB_07 + object_in_DL_014420, // OBJECT_IN_LIMB_08 + object_in_DL_012A78, // OBJECT_IN_LIMB_09 + object_in_DL_013DE0, // OBJECT_IN_LIMB_0A + object_in_DL_013F10, // OBJECT_IN_LIMB_0B + object_in_DL_014040, // OBJECT_IN_LIMB_0C + object_in_DL_0137A0, // OBJECT_IN_LIMB_0D + object_in_DL_0138D0, // OBJECT_IN_LIMB_0E + object_in_DL_013A00, // OBJECT_IN_LIMB_0F + object_in_DL_012DF8, // OBJECT_IN_LIMB_10 + object_in_DL_013670, // OBJECT_IN_LIMB_11 + object_in_DL_013540, // OBJECT_IN_LIMB_12 + object_in_DL_013440, // OBJECT_IN_LIMB_13 }; - if ((this->unk23C != 0) && (limbIndex != 16)) { + if ((this->unk23C != 0) && (limbIndex != OBJECT_IN_LIMB_10)) { if (sp50[limbIndex] != NULL) { *dList = sp50[limbIndex]; } } - if ((this->unk4AC & 4) && (limbIndex == 16)) { + if ((this->unk4AC & 4) && (limbIndex == OBJECT_IN_LIMB_10)) { *dList = object_in_DL_01C528; } OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 }; gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp38[this->unk482])); @@ -1668,31 +1679,34 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po CLOSE_DISPS(play->state.gfxCtx); - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->headRot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->headRot.x, MTXMODE_APPLY); Matrix_Translate(-1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); func_808F6334(this, play); } - if (limbIndex == 9) { + + if (limbIndex == OBJECT_IN_LIMB_09) { Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY); } - if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) { + + if ((limbIndex == OBJECT_IN_LIMB_09) || (limbIndex == OBJECT_IN_LIMB_0A) || (limbIndex == OBJECT_IN_LIMB_0D)) { rot->y += (s16)(Math_SinS(this->fidgetTableY[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->fidgetTableZ[limbIndex]) * 200.0f); } + if (this->unk4AC & 0x40) { - if (limbIndex == 18) { + if (limbIndex == OBJECT_IN_LIMB_12) { rot->x = 0x1F40; rot->y = -0x3E8; rot->z = 0x1D4C; - } else if (limbIndex == 17) { + } else if (limbIndex == OBJECT_IN_LIMB_11) { rot->x = -0x1F40; rot->y = 0x3E8; rot->z = 0x1D4C; - } else if (limbIndex == 19) { + } else if (limbIndex == OBJECT_IN_LIMB_13) { rot->x = 0; rot->y = 0x7FFF; rot->z = -0x2328; @@ -1706,26 +1720,26 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Vec3f sp50 = { 1600.0f, 0.0f, 0.0f }; Vec3f sp44 = { 0.0f, 0.0f, 0.0f }; - if (limbIndex == 16) { + if (limbIndex == OBJECT_IN_LIMB_10) { Matrix_MultVec3f(&sp50, &this->unk4B4); Math_Vec3f_Copy(&this->actor.focus.pos, &this->unk4B4); } if (this->unk23D == 0) { Collider_UpdateSpheres(limbIndex, &this->colliderJntSph); - if (limbIndex == 4) { + if (limbIndex == OBJECT_IN_LIMB_04) { Matrix_MultVec3f(&sp44, &this->unk248); } - if (limbIndex == 7) { + if (limbIndex == OBJECT_IN_LIMB_07) { Matrix_MultVec3f(&sp44, &this->unk254); } if (this->unk23C == 0) { if (!(this->unk4AC & 8)) { OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 12) { + if (limbIndex == OBJECT_IN_LIMB_0C) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70); } - if (limbIndex == 15) { + if (limbIndex == OBJECT_IN_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } @@ -1736,7 +1750,7 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (this->unk4AC & 0x20) { OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 12) { + if (limbIndex == OBJECT_IN_LIMB_0C) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h index c4833568c..ab774606a 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -16,7 +16,13 @@ typedef enum { /* 4 */ ENIN_BLUE_SHIRT } EnInType; -typedef enum { +#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) +#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE + +#define ENIN_PATH_INDEX_NONE 0x3F + +typedef enum EnInAnimation { + /* -1 */ ENIN_ANIM_NONE = -1, /* 0 */ ENIN_ANIM_0, /* 1 */ ENIN_ANIM_1, /* 2 */ ENIN_ANIM_2, @@ -34,13 +40,22 @@ typedef enum { /* 14 */ ENIN_ANIM_14, /* 15 */ ENIN_ANIM_15, /* 16 */ ENIN_ANIM_16, - /* 17 */ ENIN_ANIM_17 + /* 17 */ ENIN_ANIM_17, + /* 18 */ ENIN_ANIM_MAX } EnInAnimation; -#define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) -#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE - -#define ENIN_PATH_INDEX_NONE 0x3F +typedef enum EnInAnimation2 { + /* -1 */ ENIN_ANIM2_NONE = -1, + /* 0 */ ENIN_ANIM2_0, + /* 1 */ ENIN_ANIM2_1, + /* 2 */ ENIN_ANIM2_2, + /* 3 */ ENIN_ANIM2_3, + /* 4 */ ENIN_ANIM2_4, + /* 5 */ ENIN_ANIM2_5, + /* 6 */ ENIN_ANIM2_6, + /* 7 */ ENIN_ANIM2_7, + /* 8 */ ENIN_ANIM2_MAX +} EnInAnimation2; typedef struct EnIn { /* 0x000 */ Actor actor; @@ -70,7 +85,7 @@ typedef struct EnIn { /* 0x482 */ s16 unk482; /* 0x484 */ s16 unk484; /* 0x486 */ s16 unk486; - /* 0x488 */ s16 unk488; + /* 0x488 */ s16 animIndex2; /* 0x48A */ u16 unk48A; /* 0x48C */ s32 unk48C; /* 0x490 */ UNK_TYPE1 unk490[0x4]; diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c index 6a51e9486..9d8667f0a 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -5,7 +5,6 @@ */ #include "z_en_insect.h" -#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS 0x00000000 @@ -132,7 +131,7 @@ void EnInsect_Init(Actor* thisx, PlayState* play) { func_8091A8A0(this); SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_0527A0, &gameplay_keep_Anim_05140C, this->jointTable, - this->morphTable, 24); + this->morphTable, BUG_LIMB_MAX); Animation_Change(&this->skelAnime, &gameplay_keep_Anim_05140C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, 0.0f); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); @@ -278,7 +277,9 @@ void func_8091B07C(EnInsect* this, PlayState* play) { yaw -= 0x2000; } + //! FAKE: if (play) {} + Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 0x7D0); } diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.h b/src/overlays/actors/ovl_En_Insect/z_en_insect.h index 4e1f5b762..4fd2985f1 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h @@ -2,6 +2,7 @@ #define Z_EN_INSECT_H #include "global.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnInsect; @@ -16,8 +17,8 @@ typedef struct EnInsect { /* 0x144 */ ColliderJntSph collider; /* 0x164 */ ColliderJntSphElement colliderElements[1]; /* 0x1A4 */ SkelAnime skelAnime; - /* 0x1E8 */ Vec3s jointTable[24]; - /* 0x278 */ Vec3s morphTable[24]; + /* 0x1E8 */ Vec3s jointTable[BUG_LIMB_MAX]; + /* 0x278 */ Vec3s morphTable[BUG_LIMB_MAX]; /* 0x308 */ EnInsectActionFunc actionFunc; /* 0x30C */ u16 unk_30C; /* 0x30E */ s16 unk_30E; diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c index ef64e3954..3a6c54983 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c @@ -75,6 +75,9 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_GET_RUPY); Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_RED); break; + + default: + break; } if (this->unk_190 >= 0) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9a4244bc2..0ecbdb9b1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16283,8 +16283,8 @@ 0x80BF0F10:("EffStk_Draw",), 0x80BF1150:("func_80BF1150",), 0x80BF1200:("func_80BF1200",), - 0x80BF1258:("func_80BF1258",), - 0x80BF1284:("func_80BF1284",), + 0x80BF1258:("EnIg_UpdateSkelAnime",), + 0x80BF1284:("EnIg_ChangeAnim",), 0x80BF1354:("func_80BF1354",), 0x80BF13E4:("func_80BF13E4",), 0x80BF146C:("func_80BF146C",), From 33aaaea2c40228e4df2b3508b3f206eaf4186d92 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 30 Sep 2023 17:28:14 +1000 Subject: [PATCH 37/74] Start Player Item Docs (#1396) * Copy Fig Docs * small cleanup * ItemChangeType comment * bool * item change comments * PR Review * rm comments --- include/functions.h | 2 +- include/z64player.h | 12 +- src/code/z_player_lib.c | 26 +- .../actors/ovl_player_actor/z_player.c | 588 ++++++++++-------- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 18 +- tools/sizes/code_functions.csv | 2 +- 7 files changed, 387 insertions(+), 293 deletions(-) diff --git a/include/functions.h b/include/functions.h index 88d8468e9..849329d94 100644 --- a/include/functions.h +++ b/include/functions.h @@ -884,7 +884,7 @@ s32 func_80123448(PlayState* play); s32 Player_IsGoronOrDeku(Player* player); s32 func_801234D4(PlayState* play); s32 func_80123590(PlayState* play, Actor* actor); -ItemId func_8012364C(PlayState* play, Player* player, s32 arg2); +ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot); PlayerItemAction func_80123810(PlayState* play); PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction); void Player_SetModelsForHoldingShield(Player* player); diff --git a/include/z64player.h b/include/z64player.h index 11145480e..3f0af150a 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1040,7 +1040,7 @@ typedef enum PlayerCueId { // breman mask march? #define PLAYER_STATE3_20000000 (1 << 29) // -#define PLAYER_STATE3_40000000 (1 << 30) +#define PLAYER_STATE3_START_CHANGING_HELD_ITEM (1 << 30) // TARGETING_HOSTILE? #define PLAYER_STATE3_80000000 (1 << 31) @@ -1095,7 +1095,7 @@ typedef struct Player { /* 0x14B */ u8 transformation; // PlayerTransformation enum /* 0x14C */ u8 modelGroup; // PlayerModelGroup enum /* 0x14D */ u8 nextModelGroup; - /* 0x14E */ s8 unk_14E; + /* 0x14E */ s8 itemChangeType; // ItemChangeType enum /* 0x14F */ u8 modelAnimType; // PlayerAnimType enum /* 0x150 */ u8 leftHandType; /* 0x151 */ u8 rightHandType; @@ -1122,7 +1122,7 @@ typedef struct Player { /* 0x238 */ OSMesg maskObjectLoadMsg; /* 0x23C */ void* maskObjectSegment; /* 0x240 */ SkelAnime skelAnime; - /* 0x284 */ SkelAnime unk_284; + /* 0x284 */ SkelAnime skelAnimeUpper; /* 0x2C8 */ SkelAnime unk_2C8; /* 0x30C */ Vec3s jointTable[5]; /* 0x32A */ Vec3s morphTable[5]; @@ -1176,8 +1176,8 @@ typedef struct Player { /* 0x74C */ u8 jointTableBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0x7EB */ u8 morphTableBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0x88A */ u8 blendTableBuffer[PLAYER_LIMB_BUF_SIZE]; - /* 0x929 */ u8 unk_929[PLAYER_LIMB_BUF_SIZE]; - /* 0x9C8 */ u8 unk_9C8[PLAYER_LIMB_BUF_SIZE]; + /* 0x929 */ u8 jointTableUpperBuffer[PLAYER_LIMB_BUF_SIZE]; + /* 0x9C8 */ u8 morphTableUpperBuffer[PLAYER_LIMB_BUF_SIZE]; /* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"? /* 0xA6C */ u32 stateFlags1; /* 0xA70 */ u32 stateFlags2; @@ -1206,7 +1206,7 @@ typedef struct Player { /* 0xABC */ f32 unk_ABC; /* 0xAC0 */ f32 unk_AC0; /* 0xAC4 */ PlayerUpperActionFunc upperActionFunc; // Upper body/item action functions - /* 0xAC8 */ f32 unk_AC8; + /* 0xAC8 */ f32 skelAnimeUpperBlendWeight; /* 0xACC */ s16 unk_ACC; /* 0xACE */ s8 unk_ACE; /* 0xACF */ u8 putAwayCountdown; // Frames to wait before showing "Put Away" on A diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index db9a8c974..24b55cfea 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -570,12 +570,12 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) { return false; } -ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { - if (arg2 >= 4) { +ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) { + if (slot >= EQUIP_SLOT_A) { return ITEM_NONE; } - if (arg2 == 0) { + if (slot == EQUIP_SLOT_B) { ItemId item = Inventory_GetBtnBItem(play); if (item >= ITEM_FD) { @@ -597,18 +597,24 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { return item; } - if (arg2 == 1) { + if (slot == EQUIP_SLOT_C_LEFT) { return C_BTN_ITEM(EQUIP_SLOT_C_LEFT); } - if (arg2 == 2) { + if (slot == EQUIP_SLOT_C_DOWN) { return C_BTN_ITEM(EQUIP_SLOT_C_DOWN); } + // EQUIP_SLOT_C_RIGHT + return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT); } -u16 sCItemButtons[] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT }; +u16 sCItemButtons[] = { + BTN_CLEFT, + BTN_CDOWN, + BTN_CRIGHT, +}; PlayerItemAction func_80123810(PlayState* play) { Player* player = GET_PLAYER(play); @@ -630,7 +636,7 @@ PlayerItemAction func_80123810(PlayState* play) { for (i = 0; i < ARRAY_COUNT(sCItemButtons); i++) { if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, sCItemButtons[i])) { i++; - itemId = func_8012364C(play, player, i); + itemId = Player_GetItemOnButton(play, player, i); play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; @@ -2092,7 +2098,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** EnArrow* bubble = NULL; if (((player->skelAnime.animation == &gPlayerAnim_pn_drinkend)) || - (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) || + (player->skelAnimeUpper.animation == &gPlayerAnim_pn_tamahaki) || ((player->stateFlags3 & PLAYER_STATE3_40) && ((bubble = (EnArrow*)player->heldActor) != NULL))) { Matrix_TranslateRotateZYX(pos, rot); func_80125340(); @@ -2108,7 +2114,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** } else if (player->skelAnime.animation == &gPlayerAnim_pn_drinkend) { func_80124618(D_801C03E0, player->skelAnime.curFrame, player->unk_AF0); } else { - func_80124618(D_801C03C0, player->unk_284.curFrame, player->unk_AF0); + func_80124618(D_801C03C0, player->skelAnimeUpper.curFrame, player->unk_AF0); } Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); @@ -3784,7 +3790,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos); Matrix_MultVec3f(&D_801C0E94, sPlayerCurBodyPartPos); if ((player->skelAnime.animation == &gPlayerAnim_pn_drinkend) || - (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) || + (player->skelAnimeUpper.animation == &gPlayerAnim_pn_tamahaki) || ((player->stateFlags3 & PLAYER_STATE3_40) && ((spA8 = player->heldActor) != NULL))) { if (spA8 != NULL) { static Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f }; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 8c1de93e5..d01dbd3be 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -64,9 +64,9 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input); s32 Player_StartFishing(PlayState* play); void func_8085B170(PlayState* play, Player* this); s32 func_8083A658(PlayState* play, Player* this); -void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction); +void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction); -void func_80831990(PlayState* play, Player* this, ItemId item); +void Player_UseItem(PlayState* play, Player* this, ItemId item); void func_80836988(Player* this, PlayState* play); @@ -210,7 +210,7 @@ void Player_Action_97(Player* this, PlayState* play); s32 Player_UpperAction_0(Player* this, PlayState* play); s32 Player_UpperAction_1(Player* this, PlayState* play); -s32 Player_UpperAction_2(Player* this, PlayState* play); +s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play); s32 Player_UpperAction_3(Player* this, PlayState* play); s32 Player_UpperAction_4(Player* this, PlayState* play); s32 Player_UpperAction_5(Player* this, PlayState* play); @@ -468,10 +468,10 @@ typedef struct MeleeWeaponDamageInfo { /* 0x7 */ u8 dmgHumanStrong; } MeleeWeaponDamageInfo; // size = 0x8 -typedef struct struct_8085CC88 { +typedef struct ItemChangeInfo { /* 0x0 */ PlayerAnimationHeader* anim; - /* 0x4 */ u8 frame; -} struct_8085CC88; // size = 0x8 + /* 0x4 */ u8 changeFrame; +} ItemChangeInfo; // size = 0x8 typedef struct { /* 0x0 */ u8 itemId; @@ -504,7 +504,7 @@ typedef struct struct_8085D200 { f32 sPlayerControlStickMagnitude; s16 sPlayerControlStickAngle; s16 D_80862B02; // analog stick yaw + camera yaw -s32 D_80862B04; // boolean, set to the return value of func_8083216C +s32 D_80862B04; // boolean, set to the return value of Player_UpdateUpperBody FloorType sPlayerFloorType; u32 sPlayerTouchedWallFlags; ConveyorSpeed sPlayerConveyorSpeedIndex; @@ -520,10 +520,10 @@ Vec3f sPlayerInteractWallCheckResult; f32 D_80862B3C; FloorEffect sPlayerFloorEffect; Input* sPlayerControlInput; -s32 D_80862B48; -s32 D_80862B4C; -EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings -s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? +s32 sPlayerUseHeldItem; // When true, the current held item is used. Is reset to false every frame. +s32 sPlayerHeldItemButtonIsHeldDown; // Indicates if the button for the current held item is held down. +EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings +s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? s32 func_8082DA90(PlayState* play) { return (play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF); @@ -586,7 +586,7 @@ void func_8082DC64(PlayState* play, Player* this) { this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800); } -void func_8082DCA0(PlayState* play, Player* this) { +void Player_DetachHeldActor(PlayState* play, Player* this) { Actor* heldActor = this->heldActor; if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) { @@ -598,7 +598,7 @@ void func_8082DCA0(PlayState* play, Player* this) { } if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) { - func_8082F8BC(play, this, PLAYER_IA_NONE); + Player_InitItemAction(play, this, PLAYER_IA_NONE); this->heldItemId = ITEM_FE; } } @@ -632,7 +632,7 @@ void func_8082DD2C(PlayState* play, Player* this) { s32 func_8082DE14(PlayState* play, Player* this) { if (this->heldItemAction > PLAYER_IA_LAST_USED) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return true; } else { return false; @@ -641,7 +641,7 @@ s32 func_8082DE14(PlayState* play, Player* this) { void func_8082DE50(PlayState* play, Player* this) { func_8082DD2C(play, this); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { @@ -663,7 +663,7 @@ void func_8082DF2C(PlayState* play) { } } -u8 D_8085B9F0[PLAYER_LIMB_MAX] = { +u8 sPlayerUpperBodyLimbCopyMap[PLAYER_LIMB_MAX] = { false, // PLAYER_LIMB_NONE false, // PLAYER_LIMB_ROOT false, // PLAYER_LIMB_WAIST @@ -2863,30 +2863,30 @@ void func_8082F1AC(PlayState* play, Player* this) { void Player_SetUpperAction(PlayState* play, Player* this, PlayerUpperActionFunc upperActionFunc) { this->upperActionFunc = upperActionFunc; this->unk_ACE = 0; - this->unk_AC8 = 0.0f; + this->skelAnimeUpperBlendWeight = 0.0f; func_8082E00C(this); } #define GET_PLAYER_ANIM(group, type) ((PlayerAnimationHeader**)D_8085BE84)[group * PLAYER_ANIMTYPE_MAX + type] -void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) { +void Player_InitItemActionWithAnim(PlayState* play, Player* this, PlayerItemAction itemAction) { PlayerAnimationHeader* curAnim = this->skelAnime.animation; PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType]; - s32 i; + s32 animGroup; this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000); - for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) { + for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) { if (curAnim == **iter) { break; } iter++; } - func_8082F8BC(play, this, itemAction); + Player_InitItemAction(play, this, itemAction); - if (i < PLAYER_ANIMGROUP_MAX) { - this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType); + if (animGroup < PLAYER_ANIMGROUP_MAX) { + this->skelAnime.animation = GET_PLAYER_ANIM(animGroup, this->modelAnimType); } } @@ -2988,7 +2988,7 @@ PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) { } } -PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = { +PlayerUpperActionFunc sPlayerUpperActionUpdateFuncs[PLAYER_IA_MAX] = { Player_UpperAction_0, // PLAYER_IA_NONE Player_UpperAction_0, // PLAYER_IA_LAST_USED Player_UpperAction_0, // PLAYER_IA_FISHING_ROD @@ -3076,7 +3076,7 @@ PlayerUpperActionFunc D_8085C9F0[PLAYER_IA_MAX] = { typedef void (*PlayerInitItemActionFunc)(PlayState*, Player*); -PlayerInitItemActionFunc sPlayerInitItemActionFuncs[PLAYER_IA_MAX] = { +PlayerInitItemActionFunc sPlayerItemActionInitFuncs[PLAYER_IA_MAX] = { Player_InitItemAction_DoNothing, // PLAYER_IA_NONE Player_InitItemAction_DoNothing, // PLAYER_IA_LAST_USED Player_InitItemAction_DoNothing, // PLAYER_IA_FISHING_ROD @@ -3189,27 +3189,94 @@ void func_8082F5FC(Player* this, Actor* actor) { this->stateFlags1 |= PLAYER_STATE1_800; } -struct_8085CC88 D_8085CC88[] = { - { &gPlayerAnim_link_normal_free2free, 12 }, - { &gPlayerAnim_link_normal_normal2fighter, 6 }, - { &gPlayerAnim_link_hammer_normal2long, 8 }, - { &gPlayerAnim_link_normal_normal2free, 8 }, - { &gPlayerAnim_link_fighter_fighter2long, 8 }, - { &gPlayerAnim_link_normal_fighter2free, 10 }, - { &gPlayerAnim_link_hammer_long2free, 7 }, - { &gPlayerAnim_link_hammer_long2long, 11 }, - { &gPlayerAnim_link_normal_free2free, 12 }, - { &gPlayerAnim_link_normal_normal2bom, 4 }, - { &gPlayerAnim_link_normal_long2bom, 4 }, - { &gPlayerAnim_link_normal_free2bom, 4 }, - { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, - { &gPlayerAnim_link_normal_free2freeB, 13 }, - { &gPlayerAnim_pz_bladeon, 4 }, +typedef enum ItemChangeType { + /* 0 */ PLAYER_ITEM_CHG_0, + /* 1 */ PLAYER_ITEM_CHG_1, + /* 2 */ PLAYER_ITEM_CHG_2, + /* 3 */ PLAYER_ITEM_CHG_3, + /* 4 */ PLAYER_ITEM_CHG_4, + /* 5 */ PLAYER_ITEM_CHG_5, + /* 6 */ PLAYER_ITEM_CHG_6, + /* 7 */ PLAYER_ITEM_CHG_7, + /* 8 */ PLAYER_ITEM_CHG_8, + /* 9 */ PLAYER_ITEM_CHG_9, + /* 10 */ PLAYER_ITEM_CHG_10, + /* 11 */ PLAYER_ITEM_CHG_11, + /* 12 */ PLAYER_ITEM_CHG_12, + /* 13 */ PLAYER_ITEM_CHG_13, + /* 14 */ PLAYER_ITEM_CHG_14, + /* 15 */ PLAYER_ITEM_CHG_MAX +} ItemChangeType; + +ItemChangeInfo sPlayerItemChangeInfo[PLAYER_ITEM_CHG_MAX] = { + { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_0 + { &gPlayerAnim_link_normal_normal2fighter, 6 }, // PLAYER_ITEM_CHG_1 + { &gPlayerAnim_link_hammer_normal2long, 8 }, // PLAYER_ITEM_CHG_2 + { &gPlayerAnim_link_normal_normal2free, 8 }, // PLAYER_ITEM_CHG_3 + { &gPlayerAnim_link_fighter_fighter2long, 8 }, // PLAYER_ITEM_CHG_4 + { &gPlayerAnim_link_normal_fighter2free, 10 }, // PLAYER_ITEM_CHG_5 + { &gPlayerAnim_link_hammer_long2free, 7 }, // PLAYER_ITEM_CHG_6 + { &gPlayerAnim_link_hammer_long2long, 11 }, // PLAYER_ITEM_CHG_7 + { &gPlayerAnim_link_normal_free2free, 12 }, // PLAYER_ITEM_CHG_8 + { &gPlayerAnim_link_normal_normal2bom, 4 }, // PLAYER_ITEM_CHG_9 + { &gPlayerAnim_link_normal_long2bom, 4 }, // PLAYER_ITEM_CHG_10 + { &gPlayerAnim_link_normal_free2bom, 4 }, // PLAYER_ITEM_CHG_11 + { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, // PLAYER_ITEM_CHG_12 + { &gPlayerAnim_link_normal_free2freeB, 13 }, // PLAYER_ITEM_CHG_13 + { &gPlayerAnim_pz_bladeon, 4 }, // PLAYER_ITEM_CHG_14 }; -s8 D_8085CD00[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = { - { 8, -5, -3, -6, 8, 0xB }, { 5, 0, -1, 4, 5, 9 }, { 3, 1, 0, 2, 3, 9 }, - { 6, -4, -2, 7, 6, 0xA }, { 8, -5, -3, -6, 8, 0xB }, { 8, -5, -3, -6, 8, 0xB }, +// Maps the appropriate ItemChangeType based on current and next animtype. +// A negative type value means the corresponding animation should be played in reverse. +s8 sPlayerItemChangeTypes[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = { + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_DEFAULT -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_DEFAULT + PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_1 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_DEFAULT + PLAYER_ITEM_CHG_1, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_1 + PLAYER_ITEM_CHG_0, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_9, // PLAYER_ANIMTYPE_2 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_4, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_2, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_2 + PLAYER_ITEM_CHG_7, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_10, // PLAYER_ANIMTYPE_3 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_4 -> PLAYER_ANIMTYPE_5 + }, + { + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_DEFAULT + -PLAYER_ITEM_CHG_5, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_1 + -PLAYER_ITEM_CHG_3, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_2 + -PLAYER_ITEM_CHG_6, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_3 + PLAYER_ITEM_CHG_8, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_4 + PLAYER_ITEM_CHG_11, // PLAYER_ANIMTYPE_5 -> PLAYER_ANIMTYPE_5 + }, }; ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = { @@ -3271,7 +3338,7 @@ void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this) { this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0); if (this->heldActor == NULL) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return; } armsHook = (ArmsHook*)this->heldActor; @@ -3283,7 +3350,7 @@ void Player_InitItemAction_5(PlayState* play, Player* this) { this->stateFlags1 |= PLAYER_STATE1_1000000; } -void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { +void Player_InitItemAction(PlayState* play, Player* this, PlayerItemAction itemAction) { this->itemAction = this->heldItemAction = itemAction; this->modelGroup = this->nextModelGroup; @@ -3293,7 +3360,7 @@ void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { this->unk_B0C = 0.0f; this->unk_B28 = 0; - sPlayerInitItemActionFuncs[itemAction](play, this); + sPlayerItemActionInitFuncs[itemAction](play, this); Player_SetModelGroup(this, this->modelGroup); } @@ -3528,7 +3595,7 @@ void func_8082FC60(Player* this) { this->unk_B40 = 0.0f; } -s32 func_8082FC78(Player* this, ItemId item) { +s32 Player_ItemIsInUse(Player* this, ItemId item) { if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) { return true; } else { @@ -3536,7 +3603,7 @@ s32 func_8082FC78(Player* this, ItemId item) { } } -s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) { +s32 Player_ItemIsItemAction(Player* this, ItemId item, PlayerItemAction itemAction) { if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) { return true; } else { @@ -3548,7 +3615,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) { s32 btn; for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { - if (func_8082FCC4(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) { + if (Player_ItemIsItemAction(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) { return btn; } } @@ -3556,7 +3623,7 @@ EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) { return EQUIP_SLOT_NONE; } -u16 D_8085CFA8[] = { +u16 sPlayerItemButtons[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, @@ -3567,8 +3634,8 @@ u16 D_8085CFA8[] = { EquipSlot func_8082FDC4(void) { EquipSlot i; - for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { - if (CHECK_BTN_ALL(sPlayerControlInput->press.button, D_8085CFA8[i])) { + for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, sPlayerItemButtons[i])) { break; } } @@ -3576,7 +3643,10 @@ EquipSlot func_8082FDC4(void) { return i; } -void func_8082FE0C(Player* this, PlayState* play) { +/** + * Handles the high level item usage and changing process based on the B and C buttons. + */ +void Player_ProcessItemButtons(Player* this, PlayState* play) { if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) { return; } @@ -3602,7 +3672,7 @@ void func_8082FE0C(Player* this, PlayState* play) { if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) { maskIdMinusOne = this->currentMask - 1; } - func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne)); + Player_UseItem(play, this, Player_MaskIdToItemId(maskIdMinusOne)); return; } @@ -3616,10 +3686,11 @@ void func_8082FE0C(Player* this, PlayState* play) { if (((this->actor.id == ACTOR_PLAYER) && (this->itemAction >= PLAYER_IA_FISHING_ROD)) && !(((Player_GetHeldBButtonSword(this) == PLAYER_B_SWORD_NONE) || (gSaveContext.jinxTimer == 0)) && - (func_8082FC78(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) || - func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) || - func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) { - func_80831990(play, this, ITEM_NONE); + (Player_ItemIsInUse(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) || + Player_ItemIsInUse(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) { + Player_UseItem(play, this, ITEM_NONE); } else { s32 pad; ItemId item; @@ -3630,17 +3701,18 @@ void func_8082FE0C(Player* this, PlayState* play) { ? EQUIP_SLOT_B : i; - item = func_8012364C(play, this, i); + item = Player_GetItemOnButton(play, this, i); + if (item >= ITEM_FD) { - for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { - if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, D_8085CFA8[i])) { + for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, sPlayerItemButtons[i])) { break; } } - item = func_8012364C(play, this, i); + item = Player_GetItemOnButton(play, this, i); if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) { - D_80862B4C = 1; + sPlayerHeldItemButtonIsHeldDown = true; } } else if (item == ITEM_F0) { if (this->blastMaskTimer == 0) { @@ -3664,44 +3736,45 @@ void func_8082FE0C(Player* this, PlayState* play) { } } else { this->heldItemButton = i; - func_80831990(play, this, item); + Player_UseItem(play, this, item); } } } -void func_808302CC(Player* this, PlayState* play) { +void Player_StartChangingHeldItem(Player* this, PlayState* play) { PlayerAnimationHeader* anim; s32 pad[3]; u8 nextModelAnimType; - s32 var_v1; - s8 itemAction = Player_ItemToItemAction(this, this->heldItemId); + s32 itemChangeType; + s8 heldItemAction = Player_ItemToItemAction(this, this->heldItemId); s32 pad3; f32 startFrame; f32 endFrame; f32 frameSpeed; - Player_SetUpperAction(play, this, Player_UpperAction_2); + Player_SetUpperAction(play, this, Player_UpperAction_ChangeHeldItem); nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; - var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; + itemChangeType = sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; - if ((itemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) { - var_v1 = (itemAction == PLAYER_IA_NONE) ? -14 : 14; - } else if ((itemAction == PLAYER_IA_BOTTLE_EMPTY) || (itemAction == PLAYER_IA_11) || - ((itemAction == PLAYER_IA_NONE) && + if ((heldItemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) { + itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_14 : PLAYER_ITEM_CHG_14; + } else if ((heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (heldItemAction == PLAYER_IA_11) || + ((heldItemAction == PLAYER_IA_NONE) && ((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) { - var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13; + itemChangeType = (heldItemAction == PLAYER_IA_NONE) ? -PLAYER_ITEM_CHG_13 : PLAYER_ITEM_CHG_13; } - this->unk_14E = ABS_ALT(var_v1); - anim = D_8085CC88[this->unk_14E].anim; + this->itemChangeType = ABS_ALT(itemChangeType); + anim = sPlayerItemChangeInfo[this->itemChangeType].anim; + if ((anim == &gPlayerAnim_link_normal_fighter2free) && (this->currentShield == PLAYER_SHIELD_NONE)) { anim = &gPlayerAnim_link_normal_free2fighter_free; } endFrame = Animation_GetLastFrame(anim); - if (var_v1 >= 0) { + if (itemChangeType >= 0) { frameSpeed = 1.2f; startFrame = 0.0f; } else { @@ -3710,30 +3783,31 @@ void func_808302CC(Player* this, PlayState* play) { endFrame = 0.0f; } - if (itemAction != PLAYER_IA_NONE) { + if (heldItemAction != PLAYER_IA_NONE) { frameSpeed *= 2.0f; } - PlayerAnimation_Change(play, &this->unk_284, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); - this->stateFlags3 &= ~PLAYER_STATE3_40000000; + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); + + this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM; } -void func_808304BC(Player* this, PlayState* play) { - if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) { +void Player_UpdateItems(Player* this, PlayState* play) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM)) { if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) { if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) { if ((this->csMode == PLAYER_CSMODE_NONE) && (play->unk_1887C == 0) && (play->activeCamId == CAM_ID_MAIN)) { if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) { - func_8082FE0C(this, play); + Player_ProcessItemButtons(this, play); } } } } } - if (this->stateFlags3 & PLAYER_STATE3_40000000) { - func_808302CC(this, play); + if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) { + Player_StartChangingHeldItem(this, play); } } @@ -3836,8 +3910,7 @@ s32 func_808306F8(Player* this, PlayState* play) { return false; } -// Take out / put away sounds? -void func_808308DC(PlayState* play, Player* this) { +void Player_FinishItemChange(PlayState* play, Player* this) { s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU); if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) { @@ -3848,7 +3921,7 @@ void func_808308DC(PlayState* play, Player* this) { } } - func_80831990(play, this, this->heldItemId); + Player_UseItem(play, this, this->heldItemId); if (!isGoronOrDeku) { if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { @@ -3860,15 +3933,15 @@ void func_808308DC(PlayState* play, Player* this) { } void func_808309CC(PlayState* play, Player* this) { - if (Player_UpperAction_2 == this->upperActionFunc) { - func_808308DC(play, this); + if (Player_UpperAction_ChangeHeldItem == this->upperActionFunc) { + Player_FinishItemChange(play, this); } - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; - func_8082DCA0(play, this); - this->stateFlags3 &= ~PLAYER_STATE3_40000000; + Player_DetachHeldActor(play, this); + this->stateFlags3 &= ~PLAYER_STATE3_START_CHANGING_HELD_ITEM; } PlayerAnimationHeader* D_8085CFBC[2] = { @@ -3894,7 +3967,7 @@ PlayerAnimationHeader* D_8085CFDC[2] = { PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) { Player_SetUpperAction(play, this, Player_UpperAction_3); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); if (this->unk_B40 < 0.5f) { return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)]; @@ -3933,9 +4006,9 @@ s32 func_80830B88(PlayState* play, Player* this) { (this->currentShield != PLAYER_SHIELD_NONE))) && func_8082FBE8(this))) { PlayerAnimationHeader* anim = func_80830A58(play, this); - f32 lastFrame = Animation_GetLastFrame(anim); + f32 endFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame, + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 3.0f / 3.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); func_80830AE8(this); return true; @@ -3955,26 +4028,28 @@ void func_80830CE8(PlayState* play, Player* this) { func_80123C58(this); } - Animation_Reverse(&this->unk_284); + Animation_Reverse(&this->skelAnimeUpper); func_80830B38(this); } -void func_80830D40(PlayState* play, Player* this) { - struct_8085CC88* entry = &D_8085CC88[this->unk_14E]; - f32 frame = entry->frame; +void Player_WaitToFinishItemChange(PlayState* play, Player* this) { + ItemChangeInfo* itemChangeEntry = &sPlayerItemChangeInfo[this->itemChangeType]; + f32 changeFrame = itemChangeEntry->changeFrame; - if (this->unk_284.playSpeed < 0.0f) { - frame -= 1.0f; + if (this->skelAnimeUpper.playSpeed < 0.0f) { + changeFrame -= 1.0f; } - if (PlayerAnimation_OnFrame(&this->unk_284, frame)) { - func_808308DC(play, this); + + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, changeFrame)) { + Player_FinishItemChange(play, this); } + func_8082FB68(this); } s32 func_80830DF0(Player* this, PlayState* play) { - if (this->stateFlags3 & PLAYER_STATE3_40000000) { - func_808302CC(this, play); + if (this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) { + Player_StartChangingHeldItem(this, play); } else { return false; } @@ -3985,7 +4060,7 @@ s32 func_80830E30(Player* this, PlayState* play) { if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) { Player_SetUpperAction(play, this, Player_UpperAction_12); - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT) ? &gPlayerAnim_pz_cutterwaitA : ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) @@ -3997,7 +4072,7 @@ s32 func_80830E30(Player* this, PlayState* play) { return false; } - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (Player_IsHoldingHookshot(this)) ? &gPlayerAnim_link_hook_shot_ready : ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf @@ -4036,7 +4111,7 @@ s32 func_80831010(Player* this, PlayState* play) { s32 func_80831094(Player* this, PlayState* play) { if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) { - if ((D_80862B48 != 0) || func_80830F9C(play)) { + if (sPlayerUseHeldItem || func_80830F9C(play)) { if (func_80830E30(this, play)) { return func_80831010(this, play); } @@ -4122,7 +4197,7 @@ s32 func_808313A8(PlayState* play, Player* this, Actor* actor) { void func_808313F0(Player* this, PlayState* play) { if (!func_808313A8(play, this, this->heldActor)) { Player_SetUpperAction(play, this, Player_UpperAction_10); - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait); } } @@ -4163,7 +4238,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, } } else if ((this->transformation == PLAYER_FORM_GORON) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); @@ -4175,7 +4250,7 @@ s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) { func_808309CC(play, this); - PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this)); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, func_8082ED20(this)); this->stateFlags1 &= ~PLAYER_STATE1_400000; } @@ -4237,7 +4312,7 @@ void Player_SetAction_PreserveItemAction(PlayState* play, Player* this, PlayerAc } } -void func_808317C4(Player* this) { +void Player_DestroyHookshot(Player* this) { if (Player_IsHoldingHookshot(this)) { if (this->heldActor != NULL) { Actor_Kill(this->heldActor); @@ -4277,13 +4352,12 @@ void func_808318C0(PlayState* play) { // Toggle Lens from a button press void func_80831944(PlayState* play, Player* this) { - if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) { + if (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_LENS_OF_TRUTH) { func_808318C0(play); } } -// Proposed name: Player_UseItem -void func_80831990(PlayState* play, Player* this, ItemId item) { +void Player_UseItem(PlayState* play, Player* this, ItemId item) { PlayerItemAction itemAction = Player_ItemToItemAction(this, item); if ((((this->heldItemAction == this->itemAction) && @@ -4336,15 +4410,20 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) && ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { + // Prevent some items from being used if player is out of ammo. + // Also prevent explosives from being used if too many are active Audio_PlaySfx(NA_SE_SY_ERROR); } else if (itemAction == PLAYER_IA_LENS_OF_TRUTH) { + // Handle Lens of Truth func_808318C0(play); } else if (itemAction == PLAYER_IA_PICTOGRAPH_BOX) { + // Handle Pictograph Box if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { Audio_PlaySfx(NA_SE_SY_ERROR); } } else if ((itemAction == PLAYER_IA_DEKU_NUT) && ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { + // Handle Deku Nuts if (AMMO(ITEM_DEKU_NUT) != 0) { func_8083A658(play, this); } else { @@ -4354,6 +4433,7 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { (itemAction < PLAYER_IA_MASK_GIANT)) { PlayerMask maskId = GET_MASK_FROM_IA(itemAction); + // Handle wearable masks this->prevMask = this->currentMask; if (maskId == this->currentMask) { this->currentMask = PLAYER_MASK_NONE; @@ -4367,26 +4447,30 @@ void func_80831990(PlayState* play, Player* this, ItemId item) { ((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) { u8 nextAnimType; + // Handle using a new held item this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); nextAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; var_v1 = ((this->transformation != PLAYER_FORM_GORON) || (itemAction == PLAYER_IA_POWDER_KEG)); if (var_v1 && (this->heldItemAction >= 0) && (item != this->heldItemId) && - (D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != 0)) { + (sPlayerItemChangeTypes[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != + PLAYER_ITEM_CHG_0)) { + // Start the held item change process this->heldItemId = item; - this->stateFlags3 |= PLAYER_STATE3_40000000; + this->stateFlags3 |= PLAYER_STATE3_START_CHANGING_HELD_ITEM; } else { - func_808317C4(this); - func_8082DCA0(play, this); - func_8082F470(play, this, itemAction); + // Init new held item for use + Player_DestroyHookshot(this); + Player_DetachHeldActor(play, this); + Player_InitItemActionWithAnim(play, this, itemAction); if (!var_v1) { - D_80862B48 = 1; - D_80862B4C = 1; + sPlayerUseHeldItem = true; + sPlayerHeldItemButtonIsHeldDown = true; } } } else { - D_80862B48 = 1; - D_80862B4C = 1; + sPlayerUseHeldItem = true; + sPlayerHeldItemButtonIsHeldDown = true; } } } @@ -4429,11 +4513,11 @@ void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { } } -s32 func_80832090(Player* this) { +s32 Player_CanUpdateItems(Player* this) { return (!(Player_Action_34 == this->actionFunc) || - (((this->stateFlags3 & PLAYER_STATE3_40000000)) && + ((this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) && ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) && - (!(Player_UpperAction_2 == this->upperActionFunc) || + (!(Player_UpperAction_ChangeHeldItem == this->upperActionFunc) || Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction); } @@ -4442,7 +4526,7 @@ s32 func_8083213C(Player* this) { return (Player_Action_11 == this->actionFunc) || (Player_Action_12 == this->actionFunc); } -s32 func_8083216C(Player* this, PlayState* play) { +s32 Player_UpdateUpperBody(Player* this, PlayState* play) { if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) { Player_SetAction(play, this, Player_Action_92, 1); this->stateFlags3 |= PLAYER_STATE3_80; @@ -4456,8 +4540,8 @@ s32 func_8083216C(Player* this, PlayState* play) { return true; } - if (func_80832090(this)) { - func_808304BC(this, play); + if (Player_CanUpdateItems(this)) { + Player_UpdateItems(this, play); if (Player_Action_64 == this->actionFunc) { return true; } @@ -4467,23 +4551,23 @@ s32 func_8083216C(Player* this, PlayState* play) { return false; } - if (this->unk_AC8 != 0.0f) { + if (this->skelAnimeUpperBlendWeight != 0.0f) { if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f)) { - AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->unk_284.jointTable, - this->skelAnime.jointTable, D_8085B9F0); + AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnimeUpper.jointTable, + this->skelAnime.jointTable, sPlayerUpperBodyLimbCopyMap); } if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { - Math_StepToF(&this->unk_AC8, 0.0f, 0.25f); + Math_StepToF(&this->skelAnimeUpperBlendWeight, 0.0f, 0.25f); AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, 1.0f - this->unk_AC8); + this->skelAnimeUpper.jointTable, 1.0f - this->skelAnimeUpperBlendWeight); } } else if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f) || (this->skelAnime.moveFlags & ANIM_FLAG_8)) { AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } else { AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable); + this->skelAnimeUpper.jointTable); } return true; @@ -5014,7 +5098,7 @@ s32 (*sPlayerActionChangeFuncs[PLAYER_ACTION_CHG_MAX])(Player*, PlayState*) = { s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeList, s32 updateUpperBody) { if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { if (updateUpperBody) { - D_80862B04 = func_8083216C(this, play); + D_80862B04 = Player_UpdateUpperBody(this, play); if (Player_Action_64 == this->actionFunc) { return true; } @@ -5025,7 +5109,8 @@ s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeLi return true; } - if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (Player_UpperAction_2 != this->upperActionFunc)) { + if (!(this->stateFlags3 & PLAYER_STATE3_START_CHANGING_HELD_ITEM) && + (Player_UpperAction_ChangeHeldItem != this->upperActionFunc)) { // Process all entries in the Action Change List with a positive index while (*actionChangeList >= 0) { if (sPlayerActionChangeFuncs[*actionChangeList](this, play)) { @@ -5044,7 +5129,7 @@ s32 Player_TryActionChangeList(PlayState* play, Player* this, s8* actionChangeLi return true; } } else if (this->stateFlags1 & PLAYER_STATE1_800) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } return false; @@ -5692,7 +5777,7 @@ s32 func_80834600(Player* this, PlayState* play) { Player_SetUpperAction(play, this, Player_UpperAction_4); var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] : D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)]; - PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, var_a2); } else { Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]); } @@ -7678,7 +7763,7 @@ s32 func_808396B8(PlayState* play, Player* this) { ((Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && ((this->transformation != PLAYER_FORM_GORON) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && ((this->transformation != PLAYER_FORM_ZORA) || !(this->stateFlags1 & PLAYER_STATE1_2000000)) && - (D_80862B48 != 0)))) { + sPlayerUseHeldItem))) { return true; } @@ -7782,8 +7867,8 @@ s32 Player_ActionChange_10(Player* this, PlayState* play) { func_80836B3C(play, this, 0.0f); } } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) && - (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && func_80832090(this) && - (this->transformation != PLAYER_FORM_GORON)) { + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && + Player_CanUpdateItems(this) && (this->transformation != PLAYER_FORM_GORON)) { func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f); } else if (!func_80839A84(play, this)) { func_80836B3C(play, this, 0.0f); @@ -7909,7 +7994,7 @@ s32 Player_ActionChange_6(Player* this, PlayState* play) { if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } else { this->stateFlags2 ^= PLAYER_STATE2_100000; } @@ -7927,7 +8012,7 @@ s32 Player_ActionChange_11(Player* this, PlayState* play) { ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) && !func_80123434(this) && (this->lockOnActor == NULL))) { func_8082DC38(this); - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); if (Player_SetAction(play, this, Player_Action_18, 0)) { this->stateFlags1 |= PLAYER_STATE1_400000; if (this->transformation != PLAYER_FORM_GORON) { @@ -8025,7 +8110,7 @@ struct_8085D200 D_8085D200[] = { }; s32 func_8083A6C0(PlayState* play, Player* this) { - if (D_80862B48 != 0) { + if (sPlayerUseHeldItem) { if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { Player_SetAction(play, this, Player_Action_68, 0); if (this->actor.depthInWater > 12.0f) { @@ -8977,7 +9062,7 @@ s32 Player_ActionChange_2(Player* this, PlayState* play) { interactRangeActor->parent = &this->actor; if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) || ((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); func_80838830(this, giEntry->objectId); if (!(this->stateFlags2 & PLAYER_STATE2_400) || @@ -9539,7 +9624,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { s32 animIndex; s32 rand; f32 morphFrames; - s16 lastFrame; + s16 endFrame; if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || ((this->actor.id == ACTOR_PLAYER) && @@ -9586,7 +9671,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { } } - lastFrame = Animation_GetLastFrame(anim); + endFrame = Animation_GetLastFrame(anim); if ((this->skelAnime.animation == anim) || (this->skelAnime.animation == &gPlayerAnim_pz_attackAend) || (this->skelAnime.animation == &gPlayerAnim_pz_attackBend) || (this->skelAnime.animation == &gPlayerAnim_pz_attackCend)) { @@ -9595,7 +9680,7 @@ void Player_ChooseIdleAnim(PlayState* play, Player* this) { morphFrames = -6.0f; } - PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE, + PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, endFrame, ANIMMODE_ONCE, morphFrames); } @@ -9884,7 +9969,7 @@ s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) { // Crouch-stabbing s32 func_8083FD80(Player* this, PlayState* play) { if (!Player_IsGoronOrDeku(this) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && - (this->transformation != PLAYER_FORM_ZORA) && (D_80862B48 != 0)) { + (this->transformation != PLAYER_FORM_ZORA) && sPlayerUseHeldItem) { //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab". func_8083375C(this, PLAYER_MWA_STAB_1H); Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); @@ -9909,7 +9994,7 @@ void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { void func_8083FEF4(PlayState* play, Player* this) { Inventory_ChangeAmmo(ITEM_DEKU_STICK, -1); - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); } s32 func_8083FF30(PlayState* play, Player* this) { @@ -9934,7 +10019,7 @@ s32 func_8083FFEC(PlayState* play, Player* this) { gSaveContext.save.saveInfo.playerData.swordHealth--; if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) { Item_Give(play, ITEM_SWORD_KOKIRI); - func_80831990(play, this, ITEM_SWORD_KOKIRI); + Player_UseItem(play, this, ITEM_SWORD_KOKIRI); Player_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN); if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { Message_StartTextbox(play, 0xF9, NULL); @@ -10377,11 +10462,11 @@ void func_80841358(PlayState* play, Player* this, s32 arg2) { //! @bug OoB read if player is goron, deku or human item = D_8085D2B0[this->transformation]; itemAction = sItemItemActions[item]; - func_808317C4(this); - func_8082DCA0(play, this); + Player_DestroyHookshot(this); + Player_DetachHeldActor(play, this); this->heldItemId = item; this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); - func_8082F8BC(play, this, itemAction); + Player_InitItemAction(play, this, itemAction); func_808309CC(play, this); if (arg2) { Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT); @@ -10464,7 +10549,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; -Vec3s D_8085D2C4 = { -57, 3377, 0 }; +Vec3s sPlayerSkeletonBaseTransl = { -57, 3377, 0 }; void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { Actor_ProcessInitChain(&this->actor, sInitChain); @@ -10476,11 +10561,11 @@ void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHe func_808309CC(play, this); SkelAnime_InitPlayer(play, &this->skelAnime, skelHeader, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType], 1 | 8, this->jointTableBuffer, this->morphTableBuffer, PLAYER_LIMB_MAX); - this->skelAnime.baseTransl = D_8085D2C4; + this->skelAnime.baseTransl = sPlayerSkeletonBaseTransl; - SkelAnime_InitPlayer(play, &this->unk_284, skelHeader, func_8082ED20(this), 1 | 8, this->unk_929, this->unk_9C8, - PLAYER_LIMB_MAX); - this->unk_284.baseTransl = D_8085D2C4; + SkelAnime_InitPlayer(play, &this->skelAnimeUpper, skelHeader, func_8082ED20(this), 1 | 8, + this->jointTableUpperBuffer, this->morphTableUpperBuffer, PLAYER_LIMB_MAX); + this->skelAnimeUpper.baseTransl = sPlayerSkeletonBaseTransl; if (this->transformation == PLAYER_FORM_GORON) { SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim, @@ -10636,7 +10721,7 @@ void Player_Init(Actor* thisx, PlayState* play) { this->heldItemAction = PLAYER_IA_NONE; this->heldItemId = ITEM_NONE; - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); Player_SetEquipmentData(play, this); this->prevBoots = this->currentBoots; Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]); @@ -10781,7 +10866,7 @@ void Player_Init(Actor* thisx, PlayState* play) { if (gSaveContext.powderKegTimer != 0) { this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_POWDER_KEG); this->heldItemId = ITEM_POWDER_KEG; - func_8082F8BC(play, this, PLAYER_IA_POWDER_KEG); + Player_InitItemAction(play, this, PLAYER_IA_POWDER_KEG); func_808313F0(this, play); } else if (gSaveContext.unk_1014 != 0) { func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM, @@ -11497,7 +11582,7 @@ void func_808442D8(PlayState* play, Player* this) { f32 temp_fv1; if (this->unk_B0C == 0.0f) { - func_80831990(play, this, ITEM_NONE); + Player_UseItem(play, this, ITEM_NONE); return; } @@ -12112,7 +12197,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f; D_8085C3E8 = 1.0f / D_8085C3E4; - D_80862B48 = D_80862B4C = 0; + sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown = false; var_v1 = Play_InCsMode(play); D_80862B2C = this->currentMask; @@ -12318,7 +12403,7 @@ void Player_Update(Actor* thisx, PlayState* play) { } if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) { @@ -12812,7 +12897,7 @@ s32 func_80847880(PlayState* play, Player* this) { func_8082DE50(play, this); Player_SetAction(play, this, Player_Action_81, 0); if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) { - func_80831990(play, this, ITEM_BOW); + Player_UseItem(play, this, ITEM_BOW); } Player_AnimationPlayOnce(play, this, func_8082ED20(this)); this->csMode = PLAYER_CSMODE_NONE; @@ -13198,30 +13283,32 @@ s32 Player_UpperAction_1(Player* this, PlayState* play) { return false; } -s32 Player_UpperAction_2(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284) || +s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper) || ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && - (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && - (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0))))) { - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); + (sPlayerUseHeldItem = + (sPlayerUseHeldItem || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && + (this->heldItemAction != PLAYER_IA_DEKU_STICK) && (play->unk_1887C == 0)))))) { + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); this->unk_ACC = 0; this->unk_AA4 = 0; - D_80862B4C = D_80862B48; + sPlayerHeldItemButtonIsHeldDown = sPlayerUseHeldItem; return this->upperActionFunc(this, play); } if (func_8082ED94(this) != 0) { - func_80830D40(play, this); + Player_WaitToFinishItemChange(play, this); Player_AnimationPlayOnce(play, this, func_8082ED20(this)); this->unk_AA4 = 0; } else { - func_80830D40(play, this); + Player_WaitToFinishItemChange(play, this); } + return true; } s32 Player_UpperAction_3(Player* this, PlayState* play) { - PlayerAnimation_Update(play, &this->unk_284); + PlayerAnimation_Update(play, &this->skelAnimeUpper); if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { func_80830CE8(play, this); } else { @@ -13235,13 +13322,13 @@ s32 Player_UpperAction_3(Player* this, PlayState* play) { } s32 Player_UpperAction_4(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { PlayerAnimationHeader* anim; - f32 lastFrame; + f32 endFrame; anim = func_80830A58(play, this); - lastFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnimeUpper, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); } this->stateFlags1 |= PLAYER_STATE1_400000; @@ -13250,11 +13337,10 @@ s32 Player_UpperAction_4(Player* this, PlayState* play) { } s32 Player_UpperAction_5(Player* this, PlayState* play) { - // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284)) - D_80862B48 = D_80862B4C; - if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) { - Player_SetUpperAction(play, this, D_8085C9F0[this->heldItemAction]); - PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); + sPlayerUseHeldItem = sPlayerHeldItemButtonIsHeldDown; + if (sPlayerUseHeldItem || PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + Player_SetUpperAction(play, this, sPlayerUpperActionUpdateFuncs[this->heldItemAction]); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); this->unk_AA4 = 0; this->upperActionFunc(this, play); return false; @@ -13312,10 +13398,10 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { if ((this->unk_ACE == 0) && (func_8082ED94(this) == 0) && (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) { - PlayerAnimation_PlayOnce(play, &this->unk_284, D_8085D5E4[index]); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, D_8085D5E4[index]); this->unk_ACE = -1; - } else if (PlayerAnimation_Update(play, &this->unk_284)) { - PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]); + } else if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, D_8085D5F0[index]); this->unk_ACE = 1; } else if (this->unk_ACE == 1) { this->unk_ACE = 2; @@ -13326,7 +13412,7 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } func_80831010(this, play); - if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) { + if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || (!sPlayerHeldItemButtonIsHeldDown && !func_80830FD4(play)))) { Player_SetUpperAction(play, this, Player_UpperAction_8); if (this->unk_B28 >= 0) { if (index != 0) { @@ -13335,7 +13421,8 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } if (this->transformation == PLAYER_FORM_DEKU) { - PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnimeUpper, &gPlayerAnim_pn_tamahaki, + 2.0f / 3.0f); } } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_80831194(play, this); @@ -13351,15 +13438,15 @@ s32 Player_UpperAction_7(Player* this, PlayState* play) { } s32 Player_UpperAction_8(Player* this, PlayState* play) { - s32 animFinished = PlayerAnimation_Update(play, &this->unk_284); + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnimeUpper); if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) { return true; } if (!func_80830B88(play, this) && - ((((this->unk_B28 < 0) && (D_80862B4C != 0)) || - ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && (D_80862B48 != 0))) || + ((((this->unk_B28 < 0) && sPlayerHeldItemButtonIsHeldDown) || + ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && sPlayerUseHeldItem)) || func_80830F9C(play))) { this->unk_B28 = ABS_ALT(this->unk_B28); @@ -13367,7 +13454,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { if (Player_IsHoldingHookshot(this)) { this->unk_ACE = 1; } else { - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf : &gPlayerAnim_link_bow_bow_shoot_next); @@ -13389,7 +13476,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { Player_SetUpperAction(play, this, Player_UpperAction_6); } else { Player_SetUpperAction(play, this, Player_UpperAction_9); - PlayerAnimation_PlayOnce(play, &this->unk_284, + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf : &gPlayerAnim_link_bow_bow_shoot_end); } @@ -13400,7 +13487,7 @@ s32 Player_UpperAction_8(Player* this, PlayState* play) { } s32 Player_UpperAction_9(Player* this, PlayState* play) { - if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_6); } return true; @@ -13418,8 +13505,8 @@ s32 Player_UpperAction_10(Player* this, PlayState* play) { } if (this->stateFlags1 & PLAYER_STATE1_800) { - if (PlayerAnimation_Update(play, &this->unk_284)) { - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_carryB_wait); } if ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) { @@ -13447,31 +13534,31 @@ s32 Player_UpperAction_11(Player* this, PlayState* play) { } s32 Player_UpperAction_12(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_13); - PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim); + PlayerAnimation_PlayLoop(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterwaitanim); } - if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) { + if (this->skelAnimeUpper.animation == &gPlayerAnim_pz_cutterwaitanim) { func_80831010(this, play); } return true; } s32 Player_UpperAction_13(Player* this, PlayState* play) { - PlayerAnimation_Update(play, &this->unk_284); + PlayerAnimation_Update(play, &this->skelAnimeUpper); func_80831010(this, play); - if (D_80862B4C == 0) { + if (!sPlayerHeldItemButtonIsHeldDown) { Player_SetUpperAction(play, this, Player_UpperAction_14); - PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cutterattack); } return true; } s32 Player_UpperAction_14(Player* this, PlayState* play) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; - } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) { + } else if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 6.0f)) { Vec3f pos; s16 untargetedRotY; @@ -13535,7 +13622,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) { if (this->stateFlags3 & PLAYER_STATE3_800000) { Player_SetUpperAction(play, this, Player_UpperAction_16); - PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, &gPlayerAnim_pz_cuttercatch); this->stateFlags3 &= ~PLAYER_STATE3_800000; Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); @@ -13546,7 +13633,7 @@ s32 Player_UpperAction_15(Player* this, PlayState* play) { } s32 Player_UpperAction_16(Player* this, PlayState* play) { - if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { + if (!Player_UpperAction_11(this, play) && PlayerAnimation_Update(play, &this->skelAnimeUpper)) { if (this->stateFlags1 & PLAYER_STATE1_2000000) { Player_SetUpperAction(play, this, Player_UpperAction_15); this->unk_ACC = 0; @@ -13579,7 +13666,7 @@ void Player_Action_0(Player* this, PlayState* play) { void Player_Action_1(Player* this, PlayState* play) { this->stateFlags3 |= PLAYER_STATE3_10000000; PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (R_PLAY_FILL_SCREEN_ON == 0) { R_PLAY_FILL_SCREEN_ON = 20; @@ -14047,7 +14134,7 @@ void Player_Action_10(Player* this, PlayState* play) { AnimationContext_SetLoadFrame(play, func_8082ED20(this), 0, this->skelAnime.limbCount, this->skelAnime.morphTable); AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->skelAnime.morphTable, D_8085B9F0); + this->skelAnime.morphTable, sPlayerUpperBodyLimbCopyMap); } Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_CURVED, play); @@ -14294,7 +14381,7 @@ void Player_Action_18(Player* this, PlayState* play) { if (!Player_IsGoronOrDeku(this)) { this->stateFlags1 |= PLAYER_STATE1_400000; - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); this->stateFlags1 &= ~PLAYER_STATE1_400000; if (this->transformation == PLAYER_FORM_ZORA) { func_8082F164(this, BTN_R | BTN_B); @@ -14368,8 +14455,9 @@ void Player_Action_18(Player* this, PlayState* play) { void Player_Action_19(Player* this, PlayState* play) { func_80832F24(this); if (this->actionVar1 == 0) { - D_80862B04 = func_8083216C(this, play); - if ((Player_UpperAction_3 == this->upperActionFunc) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { + D_80862B04 = Player_UpdateUpperBody(this, play); + if ((Player_UpperAction_3 == this->upperActionFunc) || + (func_808331FC(play, this, &this->skelAnimeUpper, 4.0f) > 0)) { Player_SetAction(play, this, Player_Action_2, 1); } } else { @@ -14379,13 +14467,13 @@ void Player_Action_19(Player* this, PlayState* play) { temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); if ((temp_v0 != 0) && ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime))) { PlayerAnimationHeader* anim; - f32 lastFrame; + f32 endFrame; Player_SetAction(play, this, Player_Action_18, 1); Player_SetModelsForHoldingShield(this); anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; - lastFrame = Animation_GetLastFrame(anim); - PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, endFrame, endFrame, ANIMMODE_ONCE, 0.0f); } } } @@ -14575,7 +14663,7 @@ void Player_Action_25(Player* this, PlayState* play) { func_8083CBC4(this, speedTarget, yawTarget, 1.0f, 0.05f, 0.1f, 0xC8); } - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->actionVar1 == 2) || (this->actionVar1 >= 4))) || !func_80839770(this, play)) && (this->actor.velocity.y < 0.0f)) { @@ -14631,7 +14719,7 @@ void Player_Action_25(Player* this, PlayState* play) { } } else { func_80837134(play, this); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } Player_ActionChange_13(this, play); @@ -15013,9 +15101,9 @@ void Player_Action_34(Player* this, PlayState* play) { PlayerAnimation_Update(play, &this->skelAnime); func_8083249C(this); - temp_v0 = func_8083216C(this, play); + temp_v0 = Player_UpdateUpperBody(this, play); if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) || - (temp_v0 == 0)) { + !temp_v0) { this->unk_D58(play, this); } } @@ -15183,7 +15271,7 @@ void Player_Action_35(Player* this, PlayState* play) { } if (this->stateFlags1 & PLAYER_STATE1_800) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } @@ -15202,7 +15290,7 @@ void Player_Action_36(Player* this, PlayState* play) { } animFinished = PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (animFinished) { if (this->actionVar2 == 0) { @@ -15359,7 +15447,7 @@ void Player_Action_43(Player* this, PlayState* play) { if (this->unk_AA5 == PLAYER_UNKAA5_3) { if (func_800B7118(this) || func_8082ECCC(this)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } @@ -15394,7 +15482,7 @@ void Player_Action_44(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; func_8083249C(this); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY)) { @@ -15447,24 +15535,24 @@ void Player_Action_44(Player* this, PlayState* play) { this->actor.shape.rot.y = this->currentYaw; if (this->actionVar1 != 0) { if (!(this->stateFlags1 & PLAYER_STATE1_800)) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { this->actionVar1--; if (this->actionVar1 != 0) { - PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f, - Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), + PlayerAnimation_Change(play, &this->skelAnimeUpper, &gPlayerAnim_link_normal_talk_free, 1.0f, + 0.0f, Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), ANIMMODE_ONCE, -6.0f); } } } AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } else if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->skelAnime.animation == &gPlayerAnim_link_normal_talk_free_wait)) { s32 temp_v0 = this->actor.focus.rot.y - this->actor.shape.rot.y; if (ABS_ALT(temp_v0) > 0xFA0) { PlayerAnimation_Change( - play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, + play, &this->skelAnimeUpper, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); this->actionVar1 = 2; } @@ -16001,7 +16089,7 @@ void Player_Action_52(Player* this, PlayState* play) { this->unk_AA5 = PLAYER_UNKAA5_0; this->actionVar1 = 0; } else if ((this->actionVar2 < 2) || (this->actionVar2 >= 4)) { - D_80862B04 = func_8083216C(this, play); + D_80862B04 = Player_UpdateUpperBody(this, play); if (D_80862B04) { this->actionVar1 = 0; } @@ -16015,27 +16103,27 @@ void Player_Action_52(Player* this, PlayState* play) { if (!D_80862B04) { if (this->actionVar1 != 0) { - if (PlayerAnimation_Update(play, &this->unk_284)) { + if (PlayerAnimation_Update(play, &this->skelAnimeUpper)) { rideActor->stateFlags &= ~ENHORSE_FLAG_8; this->actionVar1 = 0; } - if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { - if (PlayerAnimation_OnFrame(&this->unk_284, 23.0f)) { + if (this->skelAnimeUpper.animation == &gPlayerAnim_link_uma_stop_muti) { + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 23.0f)) { Player_PlaySfx(this, NA_SE_IT_LASH); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); } AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable); + this->skelAnimeUpper.jointTable); } else { - if (PlayerAnimation_OnFrame(&this->unk_284, 10.0f)) { + if (PlayerAnimation_OnFrame(&this->skelAnimeUpper, 10.0f)) { Player_PlaySfx(this, NA_SE_IT_LASH); Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); } AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, - this->unk_284.jointTable, D_8085B9F0); + this->skelAnimeUpper.jointTable, sPlayerUpperBodyLimbCopyMap); } } else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) { PlayerAnimationHeader* anim = NULL; @@ -16049,7 +16137,7 @@ void Player_Action_52(Player* this, PlayState* play) { } if (anim != NULL) { - PlayerAnimation_PlayOnce(play, &this->unk_284, anim); + PlayerAnimation_PlayOnce(play, &this->skelAnimeUpper, anim); this->actionVar1 = 1; } } @@ -16439,7 +16527,7 @@ void Player_Action_59(Player* this, PlayState* play) { this->stateFlags2 |= PLAYER_STATE2_20; this->actor.gravity = 0.0f; - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); func_8082F164(this, BTN_R); if (Player_ActionChange_13(this, play)) { @@ -17149,7 +17237,7 @@ void Player_Action_68(Player* this, PlayState* play) { Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); } - if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) { + if (Player_GetItemOnButton(play, this, this->heldItemButton) == ITEM_BOTTLE) { Actor* interactRangeActor = this->interactRangeActor; if (interactRangeActor != NULL) { @@ -17531,7 +17619,7 @@ void Player_Action_80(Player* this, PlayState* play) { } else { this->stateFlags1 &= ~PLAYER_STATE1_100000; if ((play->sceneId == SCENE_20SICHITAI) && - (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) { + (Player_GetItemOnButton(play, this, func_8082FDC4()) == ITEM_PICTOGRAPH_BOX)) { s32 requiredScopeTemp; play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; @@ -17554,7 +17642,7 @@ void Player_Action_81(Player* this, PlayState* play) { this->unk_AA5 = PLAYER_UNKAA5_3; func_8083868C(play, this); PlayerAnimation_Update(play, &this->skelAnime); - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; this->unk_AA6 |= 0x80; @@ -17651,7 +17739,7 @@ void Player_Action_84(Player* this, PlayState* play) { ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) && (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) && func_808333CC(this))) { - D_80862B48 = this->actionVar2; + sPlayerUseHeldItem = this->actionVar2; if (!Player_ActionChange_7(this, play)) { PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; @@ -17666,7 +17754,7 @@ void Player_Action_84(Player* this, PlayState* play) { if (this->transformation == PLAYER_FORM_ZORA) { if (Player_ActionChange_8(this, play)) { - anim = this->unk_284.animation; + anim = this->skelAnimeUpper.animation; } this->unk_ADC = 0; } else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) && @@ -19670,7 +19758,7 @@ void Player_CsAction_0(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { PlayerAnimation_Update(play, &this->skelAnime); if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) { Player_ActionChange_2(this, play); } @@ -19707,7 +19795,7 @@ void Player_CsAction_2(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { PlayerAnimation_Update(play, &this->skelAnime); if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { - func_8083216C(this, play); + Player_UpdateUpperBody(this, play); } } } @@ -20232,7 +20320,7 @@ void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, PlayerCsMo void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) { if ((csMode != PLAYER_CSMODE_1) && (csMode != PLAYER_CSMODE_WAIT) && (csMode != PLAYER_CSMODE_20) && (csMode != PLAYER_CSMODE_END)) { - func_8082DCA0(play, this); + Player_DetachHeldActor(play, this); } } @@ -20326,7 +20414,7 @@ s32 Player_StartFishing(PlayState* play) { Player* player = GET_PLAYER(play); func_8082DE50(play, player); - func_80831990(play, player, ITEM_FISHING_ROD); + Player_UseItem(play, player, ITEM_FISHING_ROD); return 1; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0ecbdb9b1..83c871191 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2199,7 +2199,7 @@ 0x801234D4:("func_801234D4",), 0x80123590:("func_80123590",), 0x801235DC:("func_801235DC",), - 0x8012364C:("func_8012364C",), + 0x8012364C:("Player_GetItemOnButton",), 0x80123810:("func_80123810",), 0x80123960:("Player_ActionToModelGroup",), 0x801239AC:("Player_SetModelsForHoldingShield",), @@ -4256,7 +4256,7 @@ 0x8082DC28:("func_8082DC28",), 0x8082DC38:("func_8082DC38",), 0x8082DC64:("func_8082DC64",), - 0x8082DCA0:("func_8082DCA0",), + 0x8082DCA0:("Player_DetachHeldActor",), 0x8082DD2C:("func_8082DD2C",), 0x8082DE14:("func_8082DE14",), 0x8082DE50:("func_8082DE50",), @@ -4314,7 +4314,7 @@ 0x8082F164:("func_8082F164",), 0x8082F1AC:("func_8082F1AC",), 0x8082F43C:("Player_SetUpperAction",), - 0x8082F470:("func_8082F470",), + 0x8082F470:("Player_InitItemActionWithAnim",), 0x8082F524:("Player_ItemToItemAction",), 0x8082F594:("Player_InitItemAction_DoNothing",), 0x8082F5A4:("Player_InitItemAction_DekuStick",), @@ -4323,30 +4323,30 @@ 0x8082F62C:("Player_InitItemAction_SpawnExplosive",), 0x8082F7F4:("Player_InitItemAction_SpawnHookshot",), 0x8082F8A0:("Player_InitItemAction_5",), - 0x8082F8BC:("func_8082F8BC",), + 0x8082F8BC:("Player_InitItemAction",), 0x8082F938:("Player_OverrideBlureColors",), 0x8082FA5C:("func_8082FA5C",), 0x8082FB68:("func_8082FB68",), 0x8082FBE8:("func_8082FBE8",), 0x8082FC24:("func_8082FC24",), 0x8082FC60:("func_8082FC60",), - 0x8082FC78:("func_8082FC78",), - 0x8082FCC4:("func_8082FCC4",), + 0x8082FC78:("Player_ItemIsInUse",), + 0x8082FCC4:("Player_ItemIsItemAction",), 0x8082FD0C:("func_8082FD0C",), 0x8082FDC4:("func_8082FDC4",), - 0x8082FE0C:("func_8082FE0C",), - 0x808302CC:("func_808302CC",), - 0x808304BC:("func_808304BC",), + 0x8082FE0C:("Player_ProcessItemButtons",), + 0x808302CC:("Player_StartChangingHeldItem",), + 0x808304BC:("Player_UpdateItems",), 0x808305BC:("func_808305BC",), 0x808306F8:("func_808306F8",), - 0x808308DC:("func_808308DC",), + 0x808308DC:("Player_FinishItemChange",), 0x808309CC:("func_808309CC",), 0x80830A58:("func_80830A58",), 0x80830AE8:("func_80830AE8",), 0x80830B38:("func_80830B38",), 0x80830B88:("func_80830B88",), 0x80830CE8:("func_80830CE8",), - 0x80830D40:("func_80830D40",), + 0x80830D40:("Player_WaitToFinishItemChange",), 0x80830DF0:("func_80830DF0",), 0x80830E30:("func_80830E30",), 0x80830F9C:("func_80830F9C",), @@ -4362,15 +4362,15 @@ 0x80831494:("Player_SetAction",), 0x8083172C:("Player_SetAction_PreserveMoveFlags",), 0x80831760:("Player_SetAction_PreserveItemAction",), - 0x808317C4:("func_808317C4",), + 0x808317C4:("Player_DestroyHookshot",), 0x80831814:("func_80831814",), 0x808318C0:("func_808318C0",), 0x80831944:("func_80831944",), - 0x80831990:("func_80831990",), + 0x80831990:("Player_UseItem",), 0x80831F34:("func_80831F34",), - 0x80832090:("func_80832090",), + 0x80832090:("Player_CanUpdateItems",), 0x8083213C:("func_8083213C",), - 0x8083216C:("func_8083216C",), + 0x8083216C:("Player_UpdateUpperBody",), 0x808323C0:("func_808323C0",), 0x80832444:("func_80832444",), 0x8083249C:("func_8083249C",), @@ -4646,7 +4646,7 @@ 0x80848640:("func_80848640",), 0x80848780:("Player_UpperAction_0",), 0x808487B8:("Player_UpperAction_1",), - 0x80848808:("Player_UpperAction_2",), + 0x80848808:("Player_UpperAction_ChangeHeldItem",), 0x8084894C:("Player_UpperAction_3",), 0x80848A0C:("Player_UpperAction_4",), 0x80848AB0:("Player_UpperAction_5",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 9320ca10e..aababcf0b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4914,7 +4914,7 @@ 0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), 0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), 0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), - 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), + 0x8085B9F0:("sPlayerUpperBodyLimbCopyMap","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), 0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1), @@ -4944,10 +4944,10 @@ 0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1), 0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1), 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), - 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), - 0x8085CB3C:("sPlayerInitItemActionFuncs","UNK_PTR","",0x4), - 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1), - 0x8085CD00:("D_8085CD00","s8","[36]",0x24), + 0x8085C9F0:("sPlayerUpperActionUpdateFuncs","UNK_PTR","",0x4), + 0x8085CB3C:("sPlayerItemActionInitFuncs","UNK_PTR","",0x4), + 0x8085CC88:("sPlayerItemChangeInfo","UNK_TYPE1","",0x1), + 0x8085CD00:("sPlayerItemChangeTypes","s8","[36]",0x24), 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1), 0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220), 0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1), @@ -4959,7 +4959,7 @@ 0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1), 0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1), 0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20), - 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8), + 0x8085CFA8:("sPlayerItemButtons","u16","[4]",0x8), 0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1), 0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4), 0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1), @@ -5017,7 +5017,7 @@ 0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1), 0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1), 0x8085D2C0:("sInitChain","ActorInitVar","",0x4), - 0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4), + 0x8085D2C4:("sPlayerSkeletonBaseTransl","UNK_TYPE4","",0x4), 0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4), 0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24), 0x8085D330:("D_8085D330","EffectTireMarkInit","",0x8), @@ -5377,8 +5377,8 @@ 0x80862B3C:("D_80862B3C","f32","",0x4), 0x80862B40:("sPlayerFloorEffect","UNK_TYPE1","",0x1), 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1), - 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1), - 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1), + 0x80862B48:("sPlayerUseHeldItem","UNK_TYPE1","",0x1), + 0x80862B4C:("sPlayerHeldItemButtonIsHeldDown","UNK_TYPE1","",0x1), 0x80862B50:("D_80862B50","UNK_TYPE1","",0x1), 0x80862B6C:("D_80862B6C","UNK_TYPE1","",0x1), 0x808637B0:("En_Test_InitVars","ActorInit","",0x20), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index caaa33d73..5194497c7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1713,7 +1713,7 @@ asm/non_matchings/code/z_player_lib/Player_IsGoronOrDeku.s,Player_IsGoronOrDeku, asm/non_matchings/code/z_player_lib/func_801234D4.s,func_801234D4,0x801234D4,0x2F asm/non_matchings/code/z_player_lib/func_80123590.s,func_80123590,0x80123590,0x13 asm/non_matchings/code/z_player_lib/func_801235DC.s,func_801235DC,0x801235DC,0x1C -asm/non_matchings/code/z_player_lib/func_8012364C.s,func_8012364C,0x8012364C,0x71 +asm/non_matchings/code/z_player_lib/Player_GetItemOnButton.s,Player_GetItemOnButton,0x8012364C,0x71 asm/non_matchings/code/z_player_lib/func_80123810.s,func_80123810,0x80123810,0x54 asm/non_matchings/code/z_player_lib/Player_ActionToModelGroup.s,Player_ActionToModelGroup,0x80123960,0x13 asm/non_matchings/code/z_player_lib/Player_SetModelsForHoldingShield.s,Player_SetModelsForHoldingShield,0x801239AC,0x3E From 1509349bd76a90e163a538fb159bffa74a54f8a9 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 1 Oct 2023 12:56:38 +1100 Subject: [PATCH 38/74] Animation Cleanup: En_K* (#1402) * cleanup k * one more name --- src/code/z_skelanime.c | 3 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 5 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 3 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 50 +++-- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 40 ++-- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 6 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 151 +++++++++----- src/overlays/actors/ovl_En_Kbt/z_en_kbt.h | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 53 +++-- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.h | 5 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 191 +++++++++++------- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 9 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 15 ++ src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 7 + .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 3 +- tools/disasm/functions.txt | 4 +- 17 files changed, 354 insertions(+), 195 deletions(-) diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 79af1b73f..675487072 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1680,7 +1680,8 @@ void SkelAnime_AnimateFrame(SkelAnime* skelAnime) { s32 frame = skelAnime->curFrame; f32 partialFrame = skelAnime->curFrame - frame; - if (++frame >= (s32)skelAnime->animLength) { + frame++; + if (frame >= (s32)skelAnime->animLength) { frame = 0; } SkelAnime_GetFrameData(skelAnime->animation, frame, skelAnime->limbCount, nextjointTable); diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 39269c2ac..08f97aa93 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3931,10 +3931,11 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { SkelAnime_Free(&this->skelAnime, play); if (this->unk_148 == 0) { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingBassSkel, &gFishingBassAnim, NULL, NULL, 0); Animation_MorphToLoop(&this->skelAnime, &gFishingBassAnim, 0.0f); } else { - SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gFishingLoachSkel, &gFishingLoachAnim, NULL, NULL, + 0); Animation_MorphToLoop(&this->skelAnime, &gFishingLoachAnim, 0.0f); } } diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index 7fcf32bf4..e00f3b523 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -329,7 +329,8 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { s32 pad; if (this->blinkTimer == 0) { - if (++(this->eyeState) >= 3) { + this->eyeState++; + if (this->eyeState >= 3) { this->eyeState = 0; this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 20; } diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index cee6b38fa..d629c57b9 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -442,8 +442,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) { void EnKaizoku_ChangeAnim(EnKaizoku* this, EnKaizokuAnimation animIndex) { this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], 0.0f); } @@ -553,7 +553,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { break; case 3: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { sp54 = this->unk_2CA * 4 + this->unk_2C8; if (Player_GetMask(play) == PLAYER_MASK_STONE) { if (D_80B8A8D0[sp54] == 0x11A5) { @@ -595,7 +595,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { case 6: Math_ApproachF(&this->unk_5E0, 5.0f, 0.3f, 1.0f); - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_598 = 7; this->unk_2F8.x = 1.0f; this->unk_59C++; @@ -700,7 +700,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { switch (this->unk_59C) { case 0: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_14); this->unk_2C8 = 3; this->unk_598 = 0; @@ -709,7 +709,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { break; case 1: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { s32 textId; EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_15); @@ -787,7 +787,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { break; case 1: - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if (this->unk_2D9 == 0) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH); this->unk_2D9 = 1; @@ -843,7 +843,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { 255; } - if ((this->frameCount <= curFrame) && (this->unk_5A0 >= 0x28)) { + if ((curFrame >= this->animEndFrame) && (this->unk_5A0 >= 0x28)) { this->picto.actor.draw = NULL; this->unk_598 = 10; Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f); @@ -1127,7 +1127,7 @@ void func_80B87D3C(EnKaizoku* this, PlayState* play) { } this->unk_2D8 = 0; - if ((this->frameCount <= curFrame) && + if ((curFrame >= this->animEndFrame) && (this->picto.actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH))) { this->bodyCollider.info.elemType = ELEMTYPE_UNK1; this->bodyCollider.base.colType = COLTYPE_HIT3; @@ -1157,7 +1157,7 @@ void func_80B87E9C(EnKaizoku* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if ((this->picto.actor.xzDistToPlayer < 170.0f) && (this->picto.actor.xzDistToPlayer > 140.0f) && (Rand_ZeroOne() < 0.2f)) { func_80B88910(this); @@ -1207,7 +1207,7 @@ void func_80B87FDC(EnKaizoku* this, PlayState* play2) { } this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); @@ -1252,7 +1252,7 @@ void func_80B88278(EnKaizoku* this, PlayState* play) { f32 curFrame = this->skelAnime.curFrame; this->unk_2D8 = 0; - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->picto.actor.speed = 0.0f; if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); @@ -1404,22 +1404,20 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { if (this->skelAnime.curFrame <= 8.0f) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; - } else { - if (Animation_OnFrame(&this->skelAnime, 13.0f)) { - Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); - Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); - this->swordState = 1; - this->picto.actor.speed = 10.0f; - Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); - } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) { - this->picto.actor.speed = 0.0f; - } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { - this->swordState = -1; - } + } else if (Animation_OnFrame(&this->skelAnime, 13.0f)) { + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + this->swordState = 1; + this->picto.actor.speed = 10.0f; + Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); + } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) { + this->picto.actor.speed = 0.0f; + } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { + this->swordState = -1; } this->unk_2D8 = 0; - if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) { + if ((curFrame >= this->animEndFrame) && (this->unk_2D0 < 2)) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; @@ -1755,7 +1753,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); SkelAnime_Update(&this->skelAnime); - if (this->frameCount <= curFrame) { + if (curFrame >= this->animEndFrame) { this->unk_2D8 = 0; func_80B86B58(this); } else if (Animation_OnFrame(&this->skelAnime, 10.0f)) { diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index e2c53d34b..a119777a9 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -80,7 +80,7 @@ typedef struct EnKaizoku { /* 0x2D6 */ s16 csId; /* 0x2D8 */ u8 unk_2D8; /* 0x2D9 */ u8 unk_2D9; - /* 0x2DC */ f32 frameCount; + /* 0x2DC */ f32 animEndFrame; /* 0x2E0 */ f32 unk_2E0; /* 0x2E4 */ EnKaizokuAnimation animIndex; /* 0x2E8 */ s32 bodyPartIndex; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index be787e8d9..d2c877ad3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -121,18 +121,32 @@ typedef enum { /* 5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx /* 6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused? /* 7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over - /* 8 */ ENKAKASI_ANIM_IDLE // slow stretching wiggle, ends in regular position + /* 8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position + /* 9 */ ENKAKASI_ANIM_MAX } EnKakasiAnimation; -static AnimationHeader* sAnimations[] = { - &object_ka_Anim_007444, &object_ka_Anim_00686C, &object_ka_Anim_0081A4, - &object_ka_Anim_007B90, &object_ka_Anim_0071EC, &object_ka_Anim_007444, - &object_ka_Anim_00686C, &object_ka_Anim_0081A4, &object_ka_Anim_000214, +static AnimationHeader* sAnimations[ENKAKASI_ANIM_MAX] = { + &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING + &object_ka_Anim_00686C, // ENKAKASI_ANIM_SIDEWAYS_SHAKING + &object_ka_Anim_0081A4, // ENKAKASI_ANIM_HOPPING_REGULAR + &object_ka_Anim_007B90, // ENKAKASI_ANIM_SPIN_REACH_OFFER + &object_ka_Anim_0071EC, // ENKAKASI_ANIM_TWIRL + &object_ka_Anim_007444, // ENKAKASI_ANIM_ARMS_CROSSED_STILL + &object_ka_Anim_00686C, // ENKAKASI_ANIM_WAVE + &object_ka_Anim_0081A4, // ENKAKASI_ANIM_SLOWROLL + &object_ka_Anim_000214, // ENKAKASI_ANIM_IDLE }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, - ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, +static u8 sAnimationModes[ENKAKASI_ANIM_MAX] = { + ANIMMODE_LOOP, // ENKAKASI_ANIM_ARMS_CROSSED_ROCKING + ANIMMODE_LOOP, // ENKAKASI_ANIM_SIDEWAYS_SHAKING + ANIMMODE_LOOP, // ENKAKASI_ANIM_HOPPING_REGULAR + ANIMMODE_ONCE, // ENKAKASI_ANIM_SPIN_REACH_OFFER + ANIMMODE_ONCE, // ENKAKASI_ANIM_TWIRL + ANIMMODE_ONCE, // ENKAKASI_ANIM_ARMS_CROSSED_STILL + ANIMMODE_ONCE, // ENKAKASI_ANIM_WAVE + ANIMMODE_ONCE, // ENKAKASI_ANIM_SLOWROLL + ANIMMODE_ONCE, // ENKAKASI_ANIM_IDLE }; void EnKakasi_Destroy(Actor* thisx, PlayState* play) { @@ -147,7 +161,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { s32 i; Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80); - SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, NULL, NULL, 0); this->songSummonDist = KAKASI_GET_SUMMON_DISTANCE(&this->picto.actor) * 20.0f; if (this->songSummonDist < 40.0f) { @@ -278,7 +292,6 @@ void func_8096FBB8(EnKakasi* this, PlayState* play) { (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_RIGHT) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_LEFT) || (play->msgCtx.ocarinaButtonIndex == OCARINA_BTN_C_UP)) { - // why not 0 < x < 4? fewer branches this->unk190++; } if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { @@ -364,7 +377,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { } else if ((day == 3) && gSaveContext.save.isNight) { this->skelAnime.playSpeed = 1.0f; if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { - EnKakasi_ChangeAnim(this, 1); + EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } } else if (this->animIndex != ENKAKASI_ANIM_IDLE) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_IDLE); @@ -403,7 +416,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { // if dialogue: oh sorry come back again if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) { if ((curFrame >= this->animEndFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { - if (++this->unkCounter1A4 >= 2) { + this->unkCounter1A4++; + if (this->unkCounter1A4 >= 2) { this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); } @@ -1154,7 +1168,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnKakasi* this = THIS; - if (limbIndex == 4) { + if (limbIndex == OBJECT_KA_LIMB_04) { Matrix_MultVec3f(&gZeroVec3f, &this->unk1BC); } } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index c400b3428..8171e56b4 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -647,10 +647,10 @@ void EnKame_Stunned(EnKame* this, PlayState* play) { } void EnKame_SetupDamaged(EnKame* this) { - s16 lastFrame = Animation_GetLastFrame(&gSnapperDamageAnim); + s16 endFrame = Animation_GetLastFrame(&gSnapperDamageAnim); - Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f); - Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame); + Animation_Change(&this->snapperSkelAnime, &gSnapperDamageAnim, 1.0f, 0.0f, endFrame, ANIMMODE_ONCE, -3.0f); + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, endFrame); Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE); this->collider.base.acFlags &= ~AC_ON; this->actionFunc = EnKame_Damaged; diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c index 76d88fa94..01e781ecb 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -17,11 +17,28 @@ void EnKbt_Draw(Actor* thisx, PlayState* play); s32 func_80B33E64(PlayState* play); s32 func_80B33E8C(PlayState* play); -void func_80B33EF0(EnKbt* this, s16 arg1); +void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex); Actor* func_80B3403C(PlayState* play); void func_80B34314(EnKbt* this, PlayState* play); void func_80B34598(EnKbt* this, PlayState* play); +typedef enum EnKbtAnimation { + /* 0 */ ENKBT_ANIM_0, + /* 1 */ ENKBT_ANIM_1, + /* 2 */ ENKBT_ANIM_2, + /* 3 */ ENKBT_ANIM_3, + /* 4 */ ENKBT_ANIM_4, + /* 5 */ ENKBT_ANIM_5, + /* 6 */ ENKBT_ANIM_6, + /* 7 */ ENKBT_ANIM_7, + /* 8 */ ENKBT_ANIM_8, + /* 9 */ ENKBT_ANIM_9, + /* 10 */ ENKBT_ANIM_10, + /* 11 */ ENKBT_ANIM_11, + /* 12 */ ENKBT_ANIM_12, + /* 13 */ ENKBT_ANIM_MAX +} EnKbtAnimation; + ActorInit En_Kbt_InitVars = { ACTOR_EN_KBT, ACTORCAT_NPC, @@ -44,13 +61,13 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { this->actor.home.rot.z = 0; this->unk_27E = 4; this->unk_27F = 0; - this->unk_280 = 13; + this->animIndex = ENKBT_ANIM_MAX; this->unk_282 = 13; this->unk_278 = func_80B3403C(play); this->unk_284 = 0; this->actor.textId = 0; if (func_80B33E64(play)) { - func_80B33EF0(this, 6); + EnKbt_ChangeAnim(this, ENKBT_ANIM_6); this->unk_282 = 11; if (func_80B33E8C(play)) { this->actor.textId = 0xC50; @@ -60,7 +77,7 @@ void EnKbt_Init(Actor* thisx, PlayState* play) { } this->actionFunc = func_80B34314; } else { - func_80B33EF0(this, 0); + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); this->unk_282 = 0; this->actionFunc = func_80B34598; } @@ -82,27 +99,48 @@ s32 func_80B33E8C(PlayState* play) { return false; } -void func_80B33EF0(EnKbt* this, s16 arg1) { - static AnimationHeader* sAnimations[] = { - &object_kbt_Anim_000670, &object_kbt_Anim_001674, &object_kbt_Anim_002084, &object_kbt_Anim_000FE8, - &object_kbt_Anim_001940, &object_kbt_Anim_00E7BC, &object_kbt_Anim_00F0C8, &object_kbt_Anim_002710, - &object_kbt_Anim_002DE0, &object_kbt_Anim_003414, &object_kbt_Anim_003D24, &object_kbt_Anim_001BF4, - &object_kbt_Anim_002084, +void EnKbt_ChangeAnim(EnKbt* this, s16 animIndex) { + static AnimationHeader* sAnimations[ENKBT_ANIM_MAX] = { + &object_kbt_Anim_000670, // ENKBT_ANIM_0 + &object_kbt_Anim_001674, // ENKBT_ANIM_1 + &object_kbt_Anim_002084, // ENKBT_ANIM_2 + &object_kbt_Anim_000FE8, // ENKBT_ANIM_3 + &object_kbt_Anim_001940, // ENKBT_ANIM_4 + &object_kbt_Anim_00E7BC, // ENKBT_ANIM_5 + &object_kbt_Anim_00F0C8, // ENKBT_ANIM_6 + &object_kbt_Anim_002710, // ENKBT_ANIM_7 + &object_kbt_Anim_002DE0, // ENKBT_ANIM_8 + &object_kbt_Anim_003414, // ENKBT_ANIM_9 + &object_kbt_Anim_003D24, // ENKBT_ANIM_10 + &object_kbt_Anim_001BF4, // ENKBT_ANIM_11 + &object_kbt_Anim_002084, // ENKBT_ANIM_12 }; - u8 sp38[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, + u8 animationModes[ENKBT_ANIM_MAX] = { + ANIMMODE_LOOP, // ENKBT_ANIM_0 + ANIMMODE_LOOP, // ENKBT_ANIM_1 + ANIMMODE_ONCE, // ENKBT_ANIM_2 + ANIMMODE_LOOP, // ENKBT_ANIM_3 + ANIMMODE_ONCE, // ENKBT_ANIM_4 + ANIMMODE_LOOP, // ENKBT_ANIM_5 + ANIMMODE_LOOP, // ENKBT_ANIM_6 + ANIMMODE_LOOP, // ENKBT_ANIM_7 + ANIMMODE_LOOP, // ENKBT_ANIM_8 + ANIMMODE_LOOP, // ENKBT_ANIM_9 + ANIMMODE_LOOP, // ENKBT_ANIM_10 + ANIMMODE_ONCE, // ENKBT_ANIM_11 + ANIMMODE_ONCE, // ENKBT_ANIM_12 }; - if (arg1 != this->unk_280) { - if (arg1 >= 12) { - Animation_Change(&this->skelAnime, sAnimations[arg1], -1.0f, - Animation_GetLastFrame(sAnimations[arg1]) - 1.0f, 0.0f, sp38[arg1], -5.0f); + if (this->animIndex != animIndex) { + if (animIndex >= ENKBT_ANIM_12) { + Animation_Change(&this->skelAnime, sAnimations[animIndex], -1.0f, + Animation_GetLastFrame(sAnimations[animIndex]) - 1.0f, 0.0f, animationModes[animIndex], + -5.0f); } else { - Animation_Change(&this->skelAnime, sAnimations[arg1], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[arg1]), - sp38[arg1], -5.0f); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[animIndex]), animationModes[animIndex], -5.0f); } - this->unk_280 = arg1; + this->animIndex = animIndex; } } @@ -124,11 +162,11 @@ void func_80B34078(EnKbt* this) { if (this->unk_284 > 0) { this->unk_284--; } else { - switch (this->unk_280) { - case 2: + switch (this->animIndex) { + case ENKBT_ANIM_2: switch (this->unk_282) { case 0: - func_80B33EF0(this, 12); + EnKbt_ChangeAnim(this, ENKBT_ANIM_12); break; case 5: @@ -136,21 +174,24 @@ void func_80B34078(EnKbt* this) { break; default: - func_80B33EF0(this, 5); + EnKbt_ChangeAnim(this, ENKBT_ANIM_5); break; } break; - case 12: - func_80B33EF0(this, 0); + case ENKBT_ANIM_12: + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); this->actor.home.rot.z = 0; break; - case 4: - func_80B33EF0(this, 1); + case ENKBT_ANIM_4: + EnKbt_ChangeAnim(this, ENKBT_ANIM_1); this->unk_27E = 2; this->actor.home.rot.z = 0; break; + + default: + break; } } } @@ -169,67 +210,70 @@ void func_80B3415C(EnKbt* this) { switch (this->unk_282) { case 0: - if ((this->unk_280 != 2) && (this->unk_280 != 12)) { - func_80B33EF0(this, 0); + if ((this->animIndex != ENKBT_ANIM_2) && (this->animIndex != ENKBT_ANIM_12)) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_0); } break; case 1: - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 0; break; case 2: - if (this->unk_280 != 12) { - func_80B33EF0(this, 3); + if (this->animIndex != ENKBT_ANIM_12) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_3); } break; case 3: - if (this->unk_280 != 1) { - func_80B33EF0(this, 4); + if (this->animIndex != ENKBT_ANIM_1) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_4); } break; case 10: - func_80B33EF0(this, 11); + EnKbt_ChangeAnim(this, ENKBT_ANIM_11); break; case 4: - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 6; break; case 6: - if (this->unk_280 != 2) { - func_80B33EF0(this, 5); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_5); } break; case 11: - func_80B33EF0(this, 6); + EnKbt_ChangeAnim(this, ENKBT_ANIM_6); break; case 7: - if (this->unk_280 != 2) { - func_80B33EF0(this, 7); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); } break; case 8: - if (this->unk_280 != 2) { - func_80B33EF0(this, 8); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_8); } break; case 9: - if (this->unk_280 != 2) { - func_80B33EF0(this, 9); + if (this->animIndex != ENKBT_ANIM_2) { + EnKbt_ChangeAnim(this, ENKBT_ANIM_9); } break; case 12: - func_80B33EF0(this, 10); + EnKbt_ChangeAnim(this, ENKBT_ANIM_10); + break; + + default: break; } } @@ -327,7 +371,7 @@ void func_80B34598(EnKbt* this, PlayState* play) { this->unk_27E = 4; this->unk_27F = 0; this->unk_282 = 0; - func_80B33EF0(this, 12); + EnKbt_ChangeAnim(this, ENKBT_ANIM_12); break; case 0x6: @@ -411,26 +455,26 @@ void func_80B34598(EnKbt* this, PlayState* play) { case 0xC35: this->unk_27E = 4; this->unk_27F = 0; - func_80B33EF0(this, 2); + EnKbt_ChangeAnim(this, ENKBT_ANIM_2); this->unk_282 = 5; break; case 0xC36: this->unk_27E = 1; this->unk_27F = 1; - func_80B33EF0(this, 7); + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); this->unk_282 = 7; break; case 0xC37: - func_80B33EF0(this, 10); + EnKbt_ChangeAnim(this, ENKBT_ANIM_10); this->unk_27E = 0; this->unk_27F = 1; break; case 0xC38: case 0xC39: - func_80B33EF0(this, 7); + EnKbt_ChangeAnim(this, ENKBT_ANIM_7); this->unk_27E = 0; this->unk_27F = 1; break; @@ -517,6 +561,9 @@ void func_80B34598(EnKbt* this, PlayState* play) { this->unk_27F = 1; this->unk_282 = 12; break; + + default: + break; } this->actor.textId = 0; diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h index eb491bf28..9a7a5cdf0 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h @@ -17,7 +17,7 @@ typedef struct EnKbt { /* 0x27C */ u16 unk_27C; /* 0x27E */ u8 unk_27E; /* 0x27F */ u8 unk_27F; - /* 0x280 */ s16 unk_280; + /* 0x280 */ s16 animIndex; /* 0x282 */ s16 unk_282; /* 0x284 */ s16 unk_284; /* 0x288 */ EnKbtActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index ce3011e6d..31d98abf0 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -6,7 +6,6 @@ #include "z_en_kendo_js.h" #include "overlays/actors/ovl_En_Maruta/z_en_maruta.h" -#include "objects/object_js/object_js.h" #define FLAGS \ (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON) @@ -72,12 +71,21 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfo sAnimationInfo[] = { - { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, - { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, +typedef enum EnKendoJsAnimation { + /* 0 */ ENKENDOJS_ANIM_0, + /* 1 */ ENKENDOJS_ANIM_1, + /* 2 */ ENKENDOJS_ANIM_2, + /* 3 */ ENKENDOJS_ANIM_3, + /* 4 */ ENKENDOJS_ANIM_4, + /* 5 */ ENKENDOJS_ANIM_MAX +} EnKendoJsAnimation; + +static AnimationInfo sAnimationInfo[ENKENDOJS_ANIM_MAX] = { + { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_0 + { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_1 + { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_2 + { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENKENDOJS_ANIM_3 + { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_4 }; s16 D_80B27CE0[][3] = { @@ -110,7 +118,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); SkelAnime_InitFlex(play, &this->skelAnime, &object_js_Skel_006990, &object_js_Anim_000F4C, this->jointTable, - this->morphTable, 13); + this->morphTable, OBJECT_JS_LIMB_MAX); if ((CURRENT_DAY == 3) && !((gSaveContext.save.time <= CLOCK_TIME(23, 0)) && (gSaveContext.save.time >= CLOCK_TIME(6, 0)))) { @@ -120,7 +128,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { this->actor.home.rot.z, 0x10); Actor_Kill(&this->actor); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_4); } } else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) { Actor_Kill(&this->actor); @@ -224,7 +232,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); @@ -242,7 +250,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) { Audio_PlaySfx(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); @@ -259,6 +267,9 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); Message_StartTextbox(play, 0x2717, &this->actor); this->unk_288 = 0x2717; + + default: + break; } } } @@ -310,6 +321,9 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) { func_80B276C4(this); func_80B276D8(this, play); break; + + default: + break; } } @@ -332,7 +346,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { if (this->unk_288 == 0x272C) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3); } if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) { @@ -347,6 +361,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) { case TEXT_STATE_1: case TEXT_STATE_CLOSING: case TEXT_STATE_3: + default: break; } } @@ -443,6 +458,9 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 1; } break; + + default: + break; } return 2; } @@ -477,6 +495,9 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) { return true; } break; + + default: + break; } return false; } @@ -523,7 +544,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { func_80B26F14(this, play); } else if (!func_80B26F6C(this, play)) { if (this->skelAnime.animation == &object_js_Anim_00016C) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3); } this->unk_286 = 2; Message_CloseTextbox(play); @@ -548,7 +569,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; Message_StartTextbox(play, 0x2729, &this->actor); this->unk_288 = 0x2729; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2); break; default: @@ -564,7 +585,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { if ((this->skelAnime.animation == &object_js_Anim_0003DC) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_1); } if (this->unk_284 == 7) { @@ -764,7 +785,7 @@ void EnKendoJs_Update(Actor* thisx, PlayState* play) { s32 EnKendoJs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnKendoJs* this = THIS; - if (limbIndex == 12) { + if (limbIndex == OBJECT_JS_LIMB_0C) { rot->y -= this->unk_278.y; } return false; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h index 1992f7234..8602550e0 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h @@ -2,6 +2,7 @@ #define Z_EN_KENDO_JS_H #include "global.h" +#include "objects/object_js/object_js.h" struct EnKendoJs; @@ -17,8 +18,8 @@ typedef struct EnKendoJs { /* 0x144 */ ColliderCylinder collider; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnKendoJsActionFunc actionFunc; - /* 0x1D8 */ Vec3s jointTable[13]; - /* 0x226 */ Vec3s morphTable[13]; + /* 0x1D8 */ Vec3s jointTable[OBJECT_JS_LIMB_MAX]; + /* 0x226 */ Vec3s morphTable[OBJECT_JS_LIMB_MAX]; /* 0x274 */ Vec3s* unk_274; /* 0x278 */ Vec3s unk_278; /* 0x27E */ Vec3s unk_27E; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index b5819e333..62d4a1f62 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -5,7 +5,6 @@ */ #include "z_en_kgy.h" -#include "objects/object_kgy/object_kgy.h" #include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) @@ -31,6 +30,21 @@ void func_80B425A0(EnKgy* this, PlayState* play); void func_80B42714(EnKgy* this, PlayState* play); void func_80B42D28(EnKgy* this, PlayState* play); +typedef enum EnKgyAnimation { + /* -1 */ ENKGY_ANIM_NONE = -1, + /* 0 */ ENKGY_ANIM_0, + /* 1 */ ENKGY_ANIM_1, + /* 2 */ ENKGY_ANIM_2, + /* 3 */ ENKGY_ANIM_3, + /* 4 */ ENKGY_ANIM_4, + /* 5 */ ENKGY_ANIM_5, + /* 6 */ ENKGY_ANIM_6, + /* 7 */ ENKGY_ANIM_7, + /* 8 */ ENKGY_ANIM_8, + /* 9 */ ENKGY_ANIM_9, + /* 10 */ ENKGY_ANIM_MAX +} EnKgyAnimation; + ActorInit En_Kgy_InitVars = { ACTOR_EN_KGY, ACTORCAT_NPC, @@ -50,11 +64,11 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); SkelAnime_InitFlex(play, &this->skelAnime, &object_kgy_Skel_00F910, &object_kgy_Anim_004B98, this->jointTable, - this->morphTable, 23); - this->unk_2D2 = -1; + this->morphTable, OBJECT_KGY_LIMB_MAX); + this->animIndex = ENKGY_ANIM_NONE; this->unk_29C = 0; this->unk_2E4 = 0; - this->unk_2E2 = -1; + this->animIndex2 = ENKGY_ANIM_NONE; this->zubora = EnKgy_FindZubora(play); this->iceBlock = EnKgy_FindIceBlock(play); Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); @@ -64,25 +78,25 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { play->envCtx.lightSettingOverride = 1; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); if (!func_80B40D64(play)) { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B425A0; this->actor.textId = 0xC35; } else if (!func_80B40DB4(play)) { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0); this->actionFunc = func_80B419B0; this->actor.textId = 0xC4E; this->unk_29C |= 1; this->getItemId = GI_RUPEE_10; } else { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B42714; this->actor.textId = 0xC50; } } else { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_80)) { - EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_4, ANIMMODE_LOOP, 0); } else { - EnKgy_ChangeAnim(this, 0, ANIMMODE_LOOP, 0); + EnKgy_ChangeAnim(this, ENKGY_ANIM_0, ANIMMODE_LOOP, 0); } this->actionFunc = func_80B42D28; } @@ -109,21 +123,28 @@ void EnKgy_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); } -void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { - static AnimationHeader* sAnimations[] = { - &object_kgy_Anim_004B98, &object_kgy_Anim_0008FC, &object_kgy_Anim_00292C, &object_kgy_Anim_0042E4, - &object_kgy_Anim_0101F0, &object_kgy_Anim_001764, &object_kgy_Anim_003334, &object_kgy_Anim_010B84, - &object_kgy_Anim_001EA4, &object_kgy_Anim_003D88, - }; +static AnimationHeader* sAnimations[ENKGY_ANIM_MAX] = { + &object_kgy_Anim_004B98, // ENKGY_ANIM_0 + &object_kgy_Anim_0008FC, // ENKGY_ANIM_1 + &object_kgy_Anim_00292C, // ENKGY_ANIM_2 + &object_kgy_Anim_0042E4, // ENKGY_ANIM_3 + &object_kgy_Anim_0101F0, // ENKGY_ANIM_4 + &object_kgy_Anim_001764, // ENKGY_ANIM_5 + &object_kgy_Anim_003334, // ENKGY_ANIM_6 + &object_kgy_Anim_010B84, // ENKGY_ANIM_7 + &object_kgy_Anim_001EA4, // ENKGY_ANIM_8 + &object_kgy_Anim_003D88, // ENKGY_ANIM_9 +}; +void EnKgy_ChangeAnim(EnKgy* this, s16 animIndex, u8 animMode, f32 morphFrames) { Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[animIndex]), animMode, morphFrames); - this->unk_2D2 = animIndex; + this->animIndex = animIndex; } -void func_80B40BC0(EnKgy* this, s16 arg1) { - if (arg1 != this->unk_2D2) { - EnKgy_ChangeAnim(this, arg1, ANIMMODE_LOOP, -5.0f); +void EnKgy_ChangeAnimLoopMorph(EnKgy* this, s16 animIndex) { + if (this->animIndex != animIndex) { + EnKgy_ChangeAnim(this, animIndex, ANIMMODE_LOOP, -5.0f); } } @@ -218,13 +239,13 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { if (this->unk_2E4 > 0) { this->unk_2E4--; - if ((this->unk_2E4 == 0) && (this->unk_2E2 >= 0)) { - if (this->unk_2E2 == 3) { - EnKgy_ChangeAnim(this, 3, ANIMMODE_ONCE, -5.0f); + if ((this->unk_2E4 == 0) && (this->animIndex2 > ENKGY_ANIM_NONE)) { + if (this->animIndex2 == ENKGY_ANIM_3) { + EnKgy_ChangeAnim(this, ENKGY_ANIM_3, ANIMMODE_ONCE, -5.0f); } else { - func_80B40BC0(this, this->unk_2E2); + EnKgy_ChangeAnimLoopMorph(this, this->animIndex2); } - this->unk_2E2 = -1; + this->animIndex2 = ENKGY_ANIM_NONE; } } @@ -258,14 +279,14 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { switch (this->actor.textId) { case 0xC22: this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; break; case 0xC43: if (func_80B40D64(play)) { - func_80B40BC0(this, 7); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } else { - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } this->unk_2E4 = 30; this->actionFunc = func_80B41A48; @@ -273,7 +294,10 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { case 0xC52: case 0xC54: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); + break; + + default: break; } } @@ -288,7 +312,7 @@ void func_80B40EE8(EnKgy* this, PlayState* play) { if (this->unk_2E8 == 0) { if ((this->actor.textId == 0xC1D) || (this->actor.textId == 0xC2D)) { this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; func_80B40EBC(this, play, this->actor.textId); } else { func_80B40EBC(this, play, this->actor.textId); @@ -339,6 +363,9 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) { } this->csIdIndex = 4; break; + + default: + break; } } @@ -419,16 +446,16 @@ void func_80B4163C(EnKgy* this, PlayState* play) { this->actor.focus.pos = this->unk_2A8; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 6) { + if (this->animIndex == ENKGY_ANIM_6) { if (this->getItemId > GI_NONE) { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, 0.0f); this->getItemId--; } else { - EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_9, ANIMMODE_ONCE, -5.0f); this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE; } } else { - EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_6, ANIMMODE_ONCE, -5.0f); } SkelAnime_Update(&this->skelAnime); } @@ -446,6 +473,9 @@ void func_80B4163C(EnKgy* this, PlayState* play) { this->unk_300 = 200; Actor_PlaySfx(&this->actor, NA_SE_EV_SWORD_FORGE); break; + + default: + break; } this->lightInfo.params.point.radius = this->unk_300; @@ -608,11 +638,11 @@ void func_80B41E18(EnKgy* this, PlayState* play) { s32 pad; Player* player = GET_PLAYER(play); - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 3)) { - func_80B40BC0(this, 4); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_3)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } - if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && func_80B40E54(this) == 0) { + if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && (func_80B40E54(this) == 0)) { switch (Message_GetState(&play->msgCtx)) { case TEXT_STATE_CHOICE: if (Message_ShouldAdvance(play)) { @@ -636,6 +666,9 @@ void func_80B41E18(EnKgy* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); func_80B40EBC(this, play, textId); break; + + default: + break; } break; @@ -650,8 +683,14 @@ void func_80B41E18(EnKgy* this, PlayState* play) { Audio_PlaySfx_MessageCancel(); func_80B40E74(this, play, 0xC3C); break; + + default: + break; } break; + + default: + break; } } break; @@ -683,13 +722,13 @@ void func_80B41E18(EnKgy* this, PlayState* play) { this->actionFunc = func_80B425A0; func_80B413C8(this); func_80B40E18(this, 5); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); this->actor.textId = 0xC35; break; case 0xC3A: func_80B40E74(this, play, func_80B41528(play)); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); break; case 0xC3C: @@ -758,7 +797,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { break; case 0xC47: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); if (this->unk_29C & 8) { player->exchangeItemAction = PLAYER_IA_NONE; this->unk_29C &= ~8; @@ -780,7 +819,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC4A: case 0xC4B: - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); Message_CloseTextbox(play); this->actionFunc = func_80B41C54; this->actor.textId = 0xC4B; @@ -817,9 +856,15 @@ void func_80B41E18(EnKgy* this, PlayState* play) { func_80B413C8(this); func_80B40E18(this, 8); break; + + default: + break; } } break; + + default: + break; } } @@ -844,7 +889,7 @@ void func_80B425A0(EnKgy* this, PlayState* play) { this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B41E18; - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); } else if (this->actor.xzDistToPlayer < 200.0f) { @@ -887,11 +932,11 @@ void func_80B427C8(EnKgy* this, PlayState* play) { u16 textId; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 5) { - func_80B40BC0(this, 7); + if (this->animIndex == ENKGY_ANIM_5) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } - if (this->unk_2D2 == 3) { - func_80B40BC0(this, 4); + if (this->animIndex == ENKGY_ANIM_3) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } } @@ -923,26 +968,29 @@ void func_80B427C8(EnKgy* this, PlayState* play) { this->actionFunc = func_80B41C54; func_80B413C8(this); func_80B40E18(this, 6); - func_80B40BC0(this, 4); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); this->actor.textId = 0xC3A; break; + + default: + break; } } func_80B40EE8(this, play); } void func_80B4296C(EnKgy* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) { - func_80B40BC0(this, 2); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2); } this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B427C8; - if (this->unk_2D2 == 4) { - func_80B40BC0(this, 7); + if (this->animIndex == ENKGY_ANIM_4) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_7); } else { - EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f); } func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); @@ -958,12 +1006,12 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { s32 pad; if (SkelAnime_Update(&this->skelAnime)) { - if (this->unk_2D2 == 5) { - func_80B40BC0(this, 1); + if (this->animIndex == ENKGY_ANIM_5) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } - if (this->unk_2D2 == 3) { - func_80B40BC0(this, 4); + if (this->animIndex == ENKGY_ANIM_3) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_4); } } @@ -995,7 +1043,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { case 0xC20: case 0xC28: - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); play->msgCtx.msgLength = 0; this->unk_29C |= 4; this->unk_2E8 = 3; @@ -1027,7 +1075,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { case 0xC2A: this->unk_2E4 = 20; - this->unk_2E2 = 3; + this->animIndex2 = ENKGY_ANIM_3; func_80B40EBC(this, play, this->actor.textId); break; @@ -1038,23 +1086,26 @@ void func_80B42A8C(EnKgy* this, PlayState* play) { func_80B413C8(this); func_80B40E18(this, 1); break; + + default: + break; } } func_80B40EE8(this, play); } void func_80B42D28(EnKgy* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && (this->unk_2D2 == 8)) { - func_80B40BC0(this, 2); + if (SkelAnime_Update(&this->skelAnime) && (this->animIndex == ENKGY_ANIM_8)) { + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_2); } this->actor.focus.pos = this->unk_2A8; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B42A8C; if (this->actor.textId == 0xC2D) { - func_80B40BC0(this, 1); + EnKgy_ChangeAnimLoopMorph(this, ENKGY_ANIM_1); } else { - EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f); + EnKgy_ChangeAnim(this, ENKGY_ANIM_5, ANIMMODE_ONCE, -5.0f); SET_WEEKEVENTREG(WEEKEVENTREG_20_80); } func_80B411DC(this, play, 0); @@ -1065,7 +1116,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { this->actionFunc = func_80B4296C; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); } else if (this->actor.xzDistToPlayer < 200.0f) { - if (this->unk_2D2 == 4) { + if (this->animIndex == ENKGY_ANIM_4) { this->actor.textId = 0xC2D; } else { this->actor.textId = 0xC1D; @@ -1073,8 +1124,8 @@ void func_80B42D28(EnKgy* this, PlayState* play) { Actor_OfferTalk(&this->actor, play, 210.0f); } - if ((this->unk_2D2 == 0) && (this->actor.xzDistToPlayer < 200.0f)) { - EnKgy_ChangeAnim(this, 8, ANIMMODE_ONCE, 5.0f); + if ((this->animIndex == ENKGY_ANIM_0) && (this->actor.xzDistToPlayer < 200.0f)) { + EnKgy_ChangeAnim(this, ENKGY_ANIM_8, ANIMMODE_ONCE, 5.0f); } } } @@ -1085,7 +1136,7 @@ void EnKgy_Update(Actor* thisx, PlayState* play) { Vec3s sp30; this->actionFunc(this, play); - if (this->unk_2D2 == 2) { + if (this->animIndex == ENKGY_ANIM_2) { sp30.z = 0; sp30.y = 0; sp30.x = 0; @@ -1100,14 +1151,14 @@ s32 EnKgy_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p EnKgy* this = THIS; if (!(this->unk_29C & 1)) { - if (limbIndex == 17) { + if (limbIndex == OBJECT_KGY_LIMB_11) { *dList = NULL; } - } else if (limbIndex == 16) { + } else if (limbIndex == OBJECT_KGY_LIMB_10) { *dList = NULL; } - if (limbIndex == 11) { + if (limbIndex == OBJECT_KGY_LIMB_0B) { rot->x += this->unk_2CC.y; } @@ -1119,11 +1170,11 @@ void EnKgy_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, static Vec3f D_80B432E4 = { 3000.0f, 4000.0f, 300.0f }; EnKgy* this = THIS; - if (limbIndex == 11) { + if (limbIndex == OBJECT_KGY_LIMB_0B) { Matrix_MultVec3f(&D_80B432D8, &this->unk_2A8); } - if (limbIndex == 16) { + if (limbIndex == OBJECT_KGY_LIMB_10) { Matrix_MultVec3f(&D_80B432E4, &this->unk_2C0); } } diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h index 94f2aabd5..9a037ba9e 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -2,6 +2,7 @@ #define Z_EN_KGY_H #include "global.h" +#include "objects/object_kgy/object_kgy.h" #include "overlays/actors/ovl_En_Kbt/z_en_kbt.h" #include "overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h" @@ -15,8 +16,8 @@ typedef void (*EnKgyActionFunc)(struct EnKgy*, PlayState*); typedef struct EnKgy { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[23]; - /* 0x212 */ Vec3s morphTable[23]; + /* 0x188 */ Vec3s jointTable[OBJECT_KGY_LIMB_MAX]; + /* 0x212 */ Vec3s morphTable[OBJECT_KGY_LIMB_MAX]; /* 0x29C */ u16 unk_29C; /* 0x2A0 */ EnKbt* zubora; /* 0x2A4 */ ObjIcePoly* iceBlock; @@ -24,10 +25,10 @@ typedef struct EnKgy { /* 0x2B4 */ Vec3f unk_2B4; /* 0x2C0 */ Vec3f unk_2C0; /* 0x2CC */ Vec3s unk_2CC; - /* 0x2D2 */ s16 unk_2D2; + /* 0x2D2 */ s16 animIndex; /* 0x2D4 */ s16 csIdList[6]; /* 0x2E0 */ s16 csIdIndex; - /* 0x2E2 */ s16 unk_2E2; + /* 0x2E2 */ s16 animIndex2; /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ s16 unk_2E6; /* 0x2E8 */ s16 unk_2E8; diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index beb994374..24fa855c5 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -173,6 +173,9 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) { EnKujiya_SetupGivePrize(this); EnKujiya_GivePrize(this, play); break; + + default: + break; } } } @@ -207,6 +210,9 @@ void EnKujiya_Talk(EnKujiya* this, PlayState* play) { this->textId = 0x2B60; // Will announce winning numbers after 6 } break; + + default: + break; } } @@ -251,6 +257,9 @@ s32 EnKujiya_CheckBoughtTicket(void) { return true; } break; + + default: + break; } return false; } @@ -268,6 +277,9 @@ void EnKujiya_SetBoughtTicket(void) { case 3: SET_WEEKEVENTREG(WEEKEVENTREG_33_40); break; + + default: + break; } } @@ -287,6 +299,9 @@ void EnKujiya_UnsetBoughtTicket(void) { case 3: CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_40); break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 8bbbaca14..890fafd37 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -571,6 +571,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) { EnKusa_SetupUprootedWaitRegrow(this); this->actor.shape.shadowDraw = NULL; break; + + default: + break; } } else { @@ -621,9 +624,13 @@ void EnKusa_SetupCut(EnKusa* this) { case ENKUSA_TYPE_GRASS_2: this->actionFunc = EnKusa_DoNothing; break; + case ENKUSA_TYPE_REGROWING_GRASS: this->actionFunc = EnKusa_CutWaitRegrow; break; + + default: + break; } this->timer = 0; } diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index 5dc86c745..cbd94d808 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -248,7 +248,8 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; } } else { - if (++sNumLitTorchesInGroup >= groupSize) { + sNumLitTorchesInGroup++; + if (sNumLitTorchesInGroup >= groupSize) { this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH; } else { this->snuffTimer = diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 83c871191..fbdcd2791 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -13493,7 +13493,7 @@ 0x80B33E54:("EnKbt_Destroy",), 0x80B33E64:("func_80B33E64",), 0x80B33E8C:("func_80B33E8C",), - 0x80B33EF0:("func_80B33EF0",), + 0x80B33EF0:("EnKbt_ChangeAnim",), 0x80B3403C:("func_80B3403C",), 0x80B34078:("func_80B34078",), 0x80B3415C:("func_80B3415C",), @@ -13678,7 +13678,7 @@ 0x80B40800:("EnKgy_Init",), 0x80B40B04:("EnKgy_Destroy",), 0x80B40B38:("func_80B40B38",), - 0x80B40BC0:("func_80B40BC0",), + 0x80B40BC0:("EnKgy_ChangeAnimLoopMorph",), 0x80B40BFC:("func_80B40BFC",), 0x80B40C38:("func_80B40C38",), 0x80B40C74:("func_80B40C74",), From 2a485ad774d10ce5225dc8e119c0879108c78740 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 1 Oct 2023 17:12:09 +1100 Subject: [PATCH 39/74] Animation Cleanup: En_J* (#1401) * cleanup J * small fix --- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 107 +++++++++++------- src/overlays/actors/ovl_En_Ja/z_en_ja.h | 9 +- .../actors/ovl_En_Jc_Mato/z_en_jc_mato.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 107 +++++++++--------- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 48 +++++--- src/overlays/actors/ovl_En_Js/z_en_js.c | 76 +++++++++++-- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 97 +++++++++------- tools/disasm/functions.txt | 4 +- 8 files changed, 281 insertions(+), 169 deletions(-) diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index 8cf9ce0e9..6bf6b4434 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -5,7 +5,6 @@ */ #include "z_en_ja.h" -#include "objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -89,27 +88,41 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &object_boj_Anim_002734, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, 0 }, - { &object_boj_Anim_002734, 1.0f, 0, -1, 0, -4 }, { &object_boj_Anim_0033B0, 1.0f, 0, -1, 0, -4 }, - { &object_boj_Anim_004078, 1.0f, 0, -1, 0, 0 }, { &object_boj_Anim_005CE4, 1.0f, 0, -1, 0, 0 }, +typedef enum EnJaAnimation { + /* -1 */ ENJA_ANIM_NONE = -1, + /* 0 */ ENJA_ANIM_0, + /* 1 */ ENJA_ANIM_1, + /* 2 */ ENJA_ANIM_2, + /* 3 */ ENJA_ANIM_3, + /* 4 */ ENJA_ANIM_4, + /* 5 */ ENJA_ANIM_5, + /* 6 */ ENJA_ANIM_MAX +} EnJaAnimation; + +static AnimationInfoS sAnimationInfo[ENJA_ANIM_MAX] = { + { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_0 + { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_1 + { &object_boj_Anim_002734, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_2 + { &object_boj_Anim_0033B0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENJA_ANIM_3 + { &object_boj_Anim_004078, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_4 + { &object_boj_Anim_005CE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENJA_ANIM_5 }; -void func_80BC1900(EnJa* this) { - this->skelAnime.playSpeed = this->unk_344; +void EnJa_UpdateSkelAnime(EnJa* this) { + this->skelAnime.playSpeed = this->animPlaySpeed; SkelAnime_Update(&this->skelAnime); } -s32 func_80BC192C(EnJa* this, s32 arg1) { - s32 ret = false; +s32 EnJa_ChangeAnim(EnJa* this, s32 animIndex) { + s32 didAnimChange = false; - if (arg1 != this->unk_36C) { - this->unk_36C = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); - this->unk_344 = this->skelAnime.playSpeed; + if (this->animIndex != animIndex) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->animPlaySpeed = this->skelAnime.playSpeed; } - return ret; + return didAnimChange; } void func_80BC1984(EnJa* this, PlayState* play) { @@ -246,7 +259,7 @@ s32 func_80BC1FC8(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_80BC1AE0(this, play)) { SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_340 |= 0x10; - func_80BC192C(this, 5); + EnJa_ChangeAnim(this, ENJA_ANIM_5); func_80BC2EA4(this); ret = true; } @@ -258,9 +271,9 @@ s32 func_80BC203C(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (func_80BC1AE0(this, play)) { if (ENJA_GET_3(&this->actor) == 0) { - func_80BC192C(this, 1); + EnJa_ChangeAnim(this, ENJA_ANIM_1); } else { - func_80BC192C(this, 4); + EnJa_ChangeAnim(this, ENJA_ANIM_4); } SubS_SetOfferMode(&this->unk_340, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->actor.shape.shadowDraw = NULL; @@ -284,6 +297,9 @@ s32 func_80BC20D0(EnJa* this, PlayState* play, ScheduleOutput* scheduleOutput) { case 2: ret = func_80BC203C(this, play, scheduleOutput); break; + + default: + break; } return ret; } @@ -329,8 +345,10 @@ s32* func_80BC2274(EnJa* this, PlayState* play) { return D_80BC362C; } return D_80BC366C; + + default: + return D_80BC360C; } - return D_80BC360C; } void func_80BC22F4(EnJa* this, PlayState* play) { @@ -348,9 +366,10 @@ void EnJa_Init(Actor* thisx, PlayState* play) { EnJa* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable, 16); - this->unk_36C = -1; - func_80BC192C(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_boj_Skel_00C240, NULL, this->jointTable, this->morphTable, + OBJECT_BOJ_LIMB_MAX); + this->animIndex = ENJA_ANIM_NONE; + EnJa_ChangeAnim(this, ENJA_ANIM_0); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); @@ -380,7 +399,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_1D8.unk_00 != 0) { - func_80BC1900(this); + EnJa_UpdateSkelAnime(this); func_80BC1A68(this); func_80BC1D70(this, play); @@ -403,7 +422,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { s32 EnJa_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnJa* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { func_80BC1E40(this, play); } return false; @@ -419,10 +438,10 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, EnJa* this = THIS; s32 pad2; - if (limbIndex == 15) { + if (limbIndex == OBJECT_BOJ_LIMB_0F) { Matrix_MultVec3f(&D_80BC3780, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); - } else if ((this->unk_340 & 0x40) && (limbIndex == 11)) { + } else if ((this->unk_340 & 0x40) && (limbIndex == OBJECT_BOJ_LIMB_0B)) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -437,8 +456,9 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, } if (this->unk_1D8.unk_00 == 1) { - if ((limbIndex == 11) && (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) || - ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) { + if ((limbIndex == OBJECT_BOJ_LIMB_0B) && + (((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 6.0f)) || + ((this->skelAnime.curFrame >= 35.0f) && (this->skelAnime.curFrame <= 47.0f)))) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -475,7 +495,7 @@ void EnJa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_Pop(); CLOSE_DISPS(play->state.gfxCtx); - } else if (limbIndex == 14) { + } else if (limbIndex == OBJECT_BOJ_LIMB_0E) { if ((this->skelAnime.curFrame >= 0.0f) && (this->skelAnime.curFrame <= 18.0f)) { OPEN_DISPS(play->state.gfxCtx); @@ -541,8 +561,8 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex != 8) { - if (limbIndex == 15) { + switch (limbIndex) { + case OBJECT_BOJ_LIMB_0F: SubS_UpdateLimb(this->unk_354 + this->unk_358 + 0x4000, this->unk_356 + this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1EC, &this->unk_274, stepRot, overrideRot); @@ -553,17 +573,22 @@ void EnJa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { Matrix_RotateXS(this->unk_274.x, MTXMODE_APPLY); Matrix_RotateZS(this->unk_274.z, MTXMODE_APPLY); Matrix_Push(); - } - } else { - SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8, - &this->unk_27A, stepRot, overrideRot); - Matrix_Pop(); - Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY); - Matrix_Push(); + break; + + case OBJECT_BOJ_LIMB_08: + SubS_UpdateLimb(this->unk_358 + 0x4000, this->unk_35A + this->actor.shape.rot.y + 0x4000, &this->unk_1F8, + &this->unk_27A, stepRot, overrideRot); + Matrix_Pop(); + Matrix_Translate(this->unk_1F8.x, this->unk_1F8.y, this->unk_1F8.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->unk_27A.y, MTXMODE_APPLY); + Matrix_RotateXS(this->unk_27A.x, MTXMODE_APPLY); + Matrix_RotateZS(this->unk_27A.z, MTXMODE_APPLY); + Matrix_Push(); + break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.h b/src/overlays/actors/ovl_En_Ja/z_en_ja.h index 00746ec63..fcbbf485f 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.h +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.h @@ -2,6 +2,7 @@ #define Z_EN_JA_H #include "global.h" +#include "objects/object_boj/object_boj.h" struct EnJa; @@ -37,10 +38,10 @@ typedef struct EnJa { /* 0x234 */ EnJaStruct unk_234[4]; /* 0x274 */ Vec3s unk_274; /* 0x27A */ Vec3s unk_27A; - /* 0x280 */ Vec3s jointTable[16]; - /* 0x2E0 */ Vec3s morphTable[16]; + /* 0x280 */ Vec3s jointTable[OBJECT_BOJ_LIMB_MAX]; + /* 0x2E0 */ Vec3s morphTable[OBJECT_BOJ_LIMB_MAX]; /* 0x340 */ u16 unk_340; - /* 0x344 */ f32 unk_344; + /* 0x344 */ f32 animPlaySpeed; /* 0x348 */ f32 unk_348; /* 0x34C */ f32 unk_34C; /* 0x350 */ UNK_TYPE1 unk350[0x4]; @@ -55,7 +56,7 @@ typedef struct EnJa { /* 0x364 */ s16 unk_364; /* 0x366 */ s16 unk_366; /* 0x368 */ void* unk_368; - /* 0x36C */ s32 unk_36C; + /* 0x36C */ s32 animIndex; /* 0x370 */ UNK_TYPE1 unk_370[4]; /* 0x374 */ s32 prevTalkState; } EnJa; // size = 0x378 diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c index 314e94d1b..c66c9a355 100644 --- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c +++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c @@ -122,7 +122,7 @@ void EnJcMato_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); Collider_InitSphere(play, &this->collider); Collider_SetSphere(play, &this->collider, &this->actor, &sSphereInit); - this->collider.dim.worldSphere.radius = 0xF; + this->collider.dim.worldSphere.radius = 15; this->actor.colChkInfo.damageTable = &sDamageTable; Actor_SetScale(&this->actor, 0.008f); this->hitFlag = false; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 9fbd7ff85..137799af3 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -34,29 +34,6 @@ s32 EnJg_GetNextTextId(EnJg* this); s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play); void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play); -typedef enum { - /* 0 */ EN_JG_ANIM_IDLE, - /* 1 */ EN_JG_ANIM_WALK, - /* 2 */ EN_JG_ANIM_WAVING, - /* 3 */ EN_JG_ANIM_SHAKING_HEAD, - /* 4 */ EN_JG_ANIM_SURPRISE_START, - /* 5 */ EN_JG_ANIM_SURPRISE_LOOP, - /* 6 */ EN_JG_ANIM_ANGRY, - /* 7 */ EN_JG_ANIM_FROZEN_START, - /* 8 */ EN_JG_ANIM_FROZEN_LOOP, - /* 9 */ EN_JG_ANIM_WALK_2, - /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM, - /* 11 */ EN_JG_ANIM_DRUM_IDLE, - /* 12 */ EN_JG_ANIM_PLAYING_DRUM, - /* 13 */ EN_JG_ANIM_THINKING, - /* 14 */ EN_JG_ANIM_REMEMBERING, - /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING, - /* 16 */ EN_JG_ANIM_DEPRESSED, - /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, - /* 18 */ EN_JG_ANIM_CRADLE, - /* 19 */ EN_JG_ANIM_MAX -} EnJgAnimation; - typedef enum { /* 0 */ EN_JG_ACTION_FIRST_THAW, /* 1 */ EN_JG_ACTION_SPAWNING, @@ -133,26 +110,49 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(0, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 }, - { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 }, - { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 }, - { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum EnJgAnimation { + /* 0 */ EN_JG_ANIM_IDLE, + /* 1 */ EN_JG_ANIM_WALK, + /* 2 */ EN_JG_ANIM_WAVING, + /* 3 */ EN_JG_ANIM_SHAKING_HEAD, + /* 4 */ EN_JG_ANIM_SURPRISE_START, + /* 5 */ EN_JG_ANIM_SURPRISE_LOOP, + /* 6 */ EN_JG_ANIM_ANGRY, + /* 7 */ EN_JG_ANIM_FROZEN_START, + /* 8 */ EN_JG_ANIM_FROZEN_LOOP, + /* 9 */ EN_JG_ANIM_WALK_2, + /* 10 */ EN_JG_ANIM_TAKING_OUT_DRUM, + /* 11 */ EN_JG_ANIM_DRUM_IDLE, + /* 12 */ EN_JG_ANIM_PLAYING_DRUM, + /* 13 */ EN_JG_ANIM_THINKING, + /* 14 */ EN_JG_ANIM_REMEMBERING, + /* 15 */ EN_JG_ANIM_STRONG_REMEMBERING, + /* 16 */ EN_JG_ANIM_DEPRESSED, + /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, + /* 18 */ EN_JG_ANIM_CRADLE, + /* 19 */ EN_JG_ANIM_MAX +} EnJgAnimation; + +static AnimationInfoS sAnimationInfo[EN_JG_ANIM_MAX] = { + { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_IDLE + { &gGoronElderWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK + { &gGoronElderWavingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WAVING + { &gGoronElderHeadShakeAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SHAKING_HEAD + { &gGoronElderSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -10 }, // EN_JG_ANIM_SURPRISE_START + { &gGoronElderSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_SURPRISE_LOOP + { &gGoronElderAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_ANGRY + { &gGoronElderSurpriseStartAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_START + { &gGoronElderSurpriseStartAnim, -2.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_FROZEN_LOOP + { &gGoronElderWalkAnim, -1.0f, 0, -1, ANIMMODE_LOOP, -10 }, // EN_JG_ANIM_WALK_2 + { &gGoronElderTakeOutDrumAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_TAKING_OUT_DRUM + { &gGoronElderDrumIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DRUM_IDLE + { &gGoronElderPlayingDrumAnim, 1.0f, 1, 44, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_PLAYING_DRUM + { &gGoronElderThinkingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_THINKING + { &gGoronElderRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_REMEMBERING + { &gGoronElderStrongRememberingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_JG_ANIM_STRONG_REMEMBERING + { &gGoronElderDepressedAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_DEPRESSED + { &gGoronElderIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CUTSCENE_IDLE + { &gGoronElderCradleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_JG_ANIM_CRADLE }; static Vec3f sSfxPos = { 0.0f, 0.0f, 0.0f }; @@ -340,6 +340,9 @@ void EnJg_SetupTalk(EnJg* this, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnJg_Talk; break; + + default: + break; } } @@ -418,10 +421,10 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) { void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->animIndex == EN_JG_ANIM_SURPRISE_START) { - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -473,10 +476,10 @@ void EnJg_Walk(EnJg* this, PlayState* play) { void EnJg_Talk(EnJg* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); u16 temp; - if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == lastFrame)) { + if ((this->animIndex == EN_JG_ANIM_SURPRISE_START) && (curFrame == endFrame)) { this->animIndex = EN_JG_ANIM_SURPRISE_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -543,12 +546,12 @@ void EnJg_SetupWalk(EnJg* this, PlayState* play) { void EnJg_Freeze(EnJg* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (this->action == EN_JG_ACTION_SPAWNING) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; this->freezeTimer = 1000; - this->skelAnime.curFrame = lastFrame; + this->skelAnime.curFrame = endFrame; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, 0xFF50); @@ -557,7 +560,7 @@ void EnJg_Freeze(EnJg* this, PlayState* play) { this->actionFunc = EnJg_FrozenIdle; } else if (this->animIndex == EN_JG_ANIM_FROZEN_START) { this->action = EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW; - if (curFrame == lastFrame) { + if (curFrame == endFrame) { this->freezeTimer = 1000; this->icePoly = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_ICE_POLY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.world.rot.x, @@ -899,7 +902,7 @@ void EnJg_SpawnBreath(EnJg* this, PlayState* play) { */ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play) { s16 curFrame = this->skelAnime.curFrame; - s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); + s16 endFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->flags |= FLAG_LOOKING_AT_PLAYER; @@ -924,7 +927,7 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play } this->freezeTimer--; - if ((this->freezeTimer <= 0) && (curFrame == lastFrame)) { + if ((this->freezeTimer <= 0) && (curFrame == endFrame)) { this->animIndex = EN_JG_ANIM_FROZEN_START; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); Audio_PlaySfx_AtPos(&sSfxPos, NA_SE_EV_FREEZE_S); diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 013fb5050..aba7cdeeb 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -48,10 +48,18 @@ ActorInit En_Jgame_Tsn_InitVars = { (ActorFunc)EnJgameTsn_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, - { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, - { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, +typedef enum EnJgameTsnAnimation { + /* -1 */ ENJGAMETSN_ANIM_NONE = -1, + /* 0 */ ENJGAMETSN_ANIM_0, + /* 1 */ ENJGAMETSN_ANIM_1, + /* 2 */ ENJGAMETSN_ANIM_2, + /* 3 */ ENJGAMETSN_ANIM_MAX +} EnJgameTsnAnimation; + +static AnimationInfo sAnimationInfo[ENJGAMETSN_ANIM_MAX] = { + { &object_tsn_Anim_0092FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_0 + { &object_tsn_Anim_000964, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_1 + { &object_tsn_Anim_001198, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f }, // ENJGAMETSN_ANIM_2 }; static ColliderCylinderInit sCylinderInit = { @@ -145,7 +153,7 @@ void EnJgameTsn_Destroy(Actor* thisx, PlayState* play) { } void func_80C13B74(EnJgameTsn* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0); this->actionFunc = func_80C13BB8; } @@ -156,15 +164,15 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { if (this->actor.flags & ACTOR_FLAG_10000) { this->actor.flags &= ~ACTOR_FLAG_10000; if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x10A2, &this->actor); this->unk_300 = 0x10A2; } else if (gSaveContext.minigameScore < 20) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x10A2, &this->actor); this->unk_300 = 0x10A2; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x10A3, &this->actor); this->unk_300 = 0x10A3; } @@ -174,11 +182,11 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { this->unk_300 = 0x1094; } else if (this->unk_2F8 == 0) { this->unk_2F8 = 1; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1095, &this->actor); this->unk_300 = 0x1095; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1096, &this->actor); this->unk_300 = 0x1096; } @@ -211,11 +219,11 @@ void func_80C13E90(EnJgameTsn* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; if (((gSaveContext.save.time > CLOCK_TIME(4, 0)) && (gSaveContext.save.time < CLOCK_TIME(7, 0))) || ((gSaveContext.save.time > CLOCK_TIME(16, 0)) && (gSaveContext.save.time < CLOCK_TIME(19, 0)))) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x1094, &this->actor); this->unk_300 = 0x1094; } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_1); Message_StartTextbox(play, 0x1098, &this->actor); this->unk_300 = 0x1098; } @@ -273,6 +281,9 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) { func_80C13B74(this); } break; + + default: + break; } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x71C, 0xB6); @@ -335,7 +346,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) { this->unk_2FC++; if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && func_80C149B0(play, &this->unk_200)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109F, &this->actor); this->unk_300 = 0x109F; player->stateFlags1 |= PLAYER_STATE1_20; @@ -344,7 +355,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) { func_80C14030(this); } else if ((player->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) || (player->actor.bgCheckFlags & BGCHECKFLAG_WATER)) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x10A0, &this->actor); this->unk_300 = 0x10A0; player->stateFlags1 |= PLAYER_STATE1_20; @@ -413,12 +424,12 @@ void func_80C14684(EnJgameTsn* this, PlayState* play) { this->unk_300 = 0x109E; Rupees_ChangeBy(-20); } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109D, &this->actor); this->unk_300 = 0x109D; } } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_2); Message_StartTextbox(play, 0x109C, &this->actor); this->unk_300 = 0x109C; } @@ -461,7 +472,7 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { break; case 0x109A: - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENJGAMETSN_ANIM_0); Message_StartTextbox(play, 0x109B, &this->actor); this->unk_300 = 0x109B; break; @@ -490,6 +501,9 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { func_80C14540(this); func_80C14554(this, play); break; + + default: + break; } } } diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index c0f5bc3fd..7d5185935 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -117,6 +117,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20); } break; + case 1: case 2: case 3: @@ -130,6 +131,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { return; } break; + case 5: case 6: case 7: @@ -137,6 +139,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { this->maskType = ENJS_GET_TYPE(&this->actor) - 4; this->actionFunc = func_8096A104; break; + default: break; } @@ -153,6 +156,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) { case 0: Play_DisableMotionBlur(); break; + case 5: case 6: case 7: @@ -161,6 +165,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) { func_80969400(ENJS_GET_TYPE(&this->actor)); } break; + default: break; } @@ -414,6 +419,7 @@ s32 func_809692A8(s32 arg0) { return false; } return true; + case 5: case 6: case 7: @@ -422,6 +428,7 @@ s32 func_809692A8(s32 arg0) { return false; } return true; + default: return false; } @@ -441,6 +448,7 @@ s32 func_8096933C(s32 arg0) { } else { return true; } + case 5: case 6: case 7: @@ -451,6 +459,7 @@ s32 func_8096933C(s32 arg0) { } else { return true; } + default: return false; } @@ -579,13 +588,18 @@ void func_80969898(EnJs* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); Message_ContinueTextbox(play, 0x2217); break; + case 1: Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, 0x2216); break; + + default: + break; } } break; + case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { @@ -593,18 +607,21 @@ void func_80969898(EnJs* this, PlayState* play) { this->unk_2B8 |= 1; if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) { Message_ContinueTextbox(play, 0x220F); - break; + } else { + Message_ContinueTextbox(play, 0x220D); } - Message_ContinueTextbox(play, 0x220D); break; + case 0x220D: case 0x2213: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x220E: Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969748; break; + case 0x2210: case 0x2211: case 0x2212: @@ -612,19 +629,23 @@ void func_80969898(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969748; break; + case 0x2214: case 0x2217: if (!func_809695FC(this, play)) { func_80969494(this, play); - break; } break; + default: func_80969494(this, play); break; } } break; + + default: + break; } } @@ -729,13 +750,16 @@ void func_80969DA4(EnJs* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); if (!func_809695FC(this, play)) { func_809694E8(this, play); - break; } break; + case 1: Audio_PlaySfx_MessageCancel(); Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + + default: + break; } } break; @@ -745,49 +769,60 @@ void func_80969DA4(EnJs* this, PlayState* play) { case 0x221B: if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) { Message_ContinueTextbox(play, 0x2219); - break; + } else { + Message_ContinueTextbox(play, 0x221C); } - Message_ContinueTextbox(play, 0x221C); break; + case 0x2224: case 0x2226: case 0x2228: case 0x222A: Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x2225: case 0x2227: case 0x2229: case 0x222B: if (!func_809695FC(this, play)) { func_809694E8(this, play); - break; } break; + case 0x2222: player->exchangeItemAction = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); break; + case 0x2223: switch (ENJS_GET_TYPE(&this->actor)) { case 5: Message_ContinueTextbox(play, 0x2224); break; + case 6: Message_ContinueTextbox(play, 0x2226); break; + case 7: Message_ContinueTextbox(play, 0x2228); break; + case 8: Message_ContinueTextbox(play, 0x222A); break; + + default: + break; } break; + case 0x221C: Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969C54; break; + case 0x221D: case 0x2220: case 0x2221: @@ -795,12 +830,16 @@ void func_80969DA4(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0xFF); this->actionFunc = func_80969C54; break; + default: func_809694E8(this, play); break; } } break; + + default: + break; } } @@ -892,6 +931,9 @@ void func_8096A38C(EnJs* this, PlayState* play) { case 1: Audio_PlaySfx_MessageCancel(); break; + + default: + break; } switch (play->msgCtx.currentTextId) { @@ -902,9 +944,13 @@ void func_8096A38C(EnJs* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f); this->unk_2B8 |= 0x10; break; + case 1: Message_ContinueTextbox(play, 0x21FD); break; + + default: + break; } break; @@ -914,9 +960,13 @@ void func_8096A38C(EnJs* this, PlayState* play) { Message_ContinueTextbox(play, 0x2200); func_809696EC(this, 0); break; + case 1: Message_ContinueTextbox(play, 0x21FF); break; + + default: + break; } break; @@ -927,13 +977,21 @@ void func_8096A38C(EnJs* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f); this->unk_2B8 |= 0x10; break; + case 1: Message_ContinueTextbox(play, 0x2204); break; + + default: + break; } + + default: + break; } } break; + case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { @@ -962,7 +1020,6 @@ void func_8096A38C(EnJs* this, PlayState* play) { break; case 0x2201: - case 0x220A: if (!func_809695FC(this, play)) { func_80969530(this, play); @@ -975,6 +1032,9 @@ void func_8096A38C(EnJs* this, PlayState* play) { } } break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 6b2e06f0b..3e3ecc621 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -1381,53 +1381,62 @@ void EnSGoro_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { s32 overrideRot; EnSGoro* this = THIS; - if (limbIndex != GORON_LIMB_BODY) { - if ((limbIndex == GORON_LIMB_HEAD) && (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY)) { - if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { - overrideRot = true; - } else { - overrideRot = false; + switch (limbIndex) { + case GORON_LIMB_HEAD: + if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { + if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { + overrideRot = true; + } else { + overrideRot = false; + } + if (this->loseAttentionTimer != 0) { + stepRot = true; + } else { + stepRot = false; + } + + EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, + this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, + &this->headTranslate, &this->headRotate, stepRot, overrideRot); + + Matrix_Pop(); + Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY); + Matrix_Push(); } - if (this->loseAttentionTimer != 0) { - stepRot = true; - } else { - stepRot = false; + break; + + case GORON_LIMB_BODY: + if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { + if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { + overrideRot = true; + } else { + overrideRot = false; + } + if (this->loseAttentionTimer != 0) { + stepRot = true; + } else { + stepRot = false; + } + + EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, + &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot); + + Matrix_Pop(); + Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY); + Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY); + Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY); + Matrix_Push(); } + break; - EnSGoro_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, - this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headTranslate, - &this->headRotate, stepRot, overrideRot); - - Matrix_Pop(); - Matrix_Translate(this->headTranslate.x, this->headTranslate.y, this->headTranslate.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->headRotate.y, MTXMODE_APPLY); - Matrix_RotateXS(this->headRotate.x, MTXMODE_APPLY); - Matrix_RotateZS(this->headRotate.z, MTXMODE_APPLY); - Matrix_Push(); - } - } else if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { - if (this->actionFlags & EN_S_GORO_ACTIONFLAG_FACEPLAYER) { - overrideRot = true; - } else { - overrideRot = false; - } - if (this->loseAttentionTimer != 0) { - stepRot = true; - } else { - stepRot = false; - } - - EnSGoro_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, - &this->bodyTranslate, &this->bodyRotate, stepRot, overrideRot); - - Matrix_Pop(); - Matrix_Translate(this->bodyTranslate.x, this->bodyTranslate.y, this->bodyTranslate.z, MTXMODE_NEW); - Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->bodyRotate.y, MTXMODE_APPLY); - Matrix_RotateXS(this->bodyRotate.x, MTXMODE_APPLY); - Matrix_RotateZS(this->bodyRotate.z, MTXMODE_APPLY); - Matrix_Push(); + default: + break; } } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index fbdcd2791..4a8419dc5 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -15482,8 +15482,8 @@ 0x80BC11B4:("EnNb_PostLimbDraw",), 0x80BC1278:("EnNb_TransformLimbDraw",), 0x80BC1374:("EnNb_Draw",), - 0x80BC1900:("func_80BC1900",), - 0x80BC192C:("func_80BC192C",), + 0x80BC1900:("EnJa_UpdateSkelAnime",), + 0x80BC192C:("EnJa_ChangeAnim",), 0x80BC1984:("func_80BC1984",), 0x80BC19FC:("func_80BC19FC",), 0x80BC1A68:("func_80BC1A68",), From 4ca54d704eb84b6d9f4142d4445ac1e400e14fd4 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 2 Oct 2023 21:52:41 -0700 Subject: [PATCH 40/74] Speedmeter OK (#1393) * Match * data + bss * x * Small cleanup * maxVal * gUnkTimeAcc * SET_FULLSCREEN_VIEWPORT_HIRES * Update permuter settings * SET_FULLSCREEN_VIEWPORT_DYNAMIC --- include/functions.h | 4 +- include/variables.h | 16 +- include/z64game.h | 2 +- include/z64speed_meter.h | 16 +- include/z64view.h | 11 + spec | 2 - src/boot/irqmgr.c | 6 +- src/code/game.c | 18 +- src/code/graph.c | 17 +- src/code/sched.c | 7 +- src/code/speed_meter.c | 262 +++++++++++++++++- src/code/sys_matrix.c | 2 +- src/code/z_bgcheck.c | 14 +- src/code/z_effect_soft_sprite.c | 2 +- src/code/z_kaleido_manager.c | 2 +- src/code/z_malloc.c | 6 +- src/code/z_map_exp.c | 2 +- src/code/z_message.c | 2 +- src/code/z_parameter.c | 6 +- src/code/z_play.c | 8 +- src/code/z_room.c | 2 +- src/code/z_scene.c | 4 +- src/code/z_sram_NES.c | 2 +- src/code/z_vr_box.c | 6 +- .../gamestates/ovl_daytelop/z_daytelop.c | 4 +- .../ovl_file_choose/z_file_choose_NES.c | 6 +- src/overlays/gamestates/ovl_title/z_title.c | 2 +- tools/disasm/functions.txt | 6 +- tools/disasm/variables.txt | 32 +-- tools/permuter_settings.toml | 2 + tools/sizes/code_functions.csv | 6 +- 31 files changed, 367 insertions(+), 110 deletions(-) diff --git a/include/functions.h b/include/functions.h index 849329d94..47bc7fe3d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -667,10 +667,10 @@ void* ZeldaArena_Realloc(void* ptr, size_t newSize); void ZeldaArena_Free(void* ptr); void* ZeldaArena_Calloc(u32 num, size_t size); void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc); -s32 ZeldaArena_Check(); +s32 ZeldaArena_Check(void); void ZeldaArena_Init(void* start, size_t size); void ZeldaArena_Cleanup(void); -u8 ZeldaArena_IsInitialized(); +u8 ZeldaArena_IsInitialized(void); // void func_80102E40(void); // void func_80102E90(void); // void func_80102EA4(void); diff --git a/include/variables.h b/include/variables.h index 83427f55f..2d64bd2b0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -14,7 +14,7 @@ extern OSPiHandle* gCartHandle; extern size_t gDmaMgrDmaBuffSize; extern vs32 gIrqMgrResetStatus; extern volatile OSTime sIrqMgrResetTime; -extern volatile OSTime sIrqMgrRetraceTime; +extern volatile OSTime gIrqMgrRetraceTime; extern s32 sIrqMgrRetraceCount; // extern UNK_TYPE1 sGfxPrintFontTLUT; @@ -366,7 +366,6 @@ extern Input* D_801D0D60; extern u32 retryCount; extern u32 cfbIdx[3]; -extern UNK_PTR D_801D1540; extern Vec3f gZeroVec3f; extern Vec3s gZeroVec3s; @@ -1903,19 +1902,6 @@ extern GfxMasterList* gGfxMasterDL; extern u64* gAudioSPDataPtr; extern u32 gAudioSPDataSize; -extern volatile OSTime D_801FBAE0; -extern volatile OSTime D_801FBAE8; -extern volatile OSTime gRDPTimeTotal; -extern volatile OSTime lastRenderFrameDuration; -extern volatile OSTime gRSPAudioTotalTime; -extern volatile OSTime sRSPGFXTotalTime; -extern volatile OSTime sRSPOtherTotalTime; -// extern UNK_TYPE1 D_801FBB18; - -// Accumulator for `gRDPTimeTotal` -extern volatile OSTime gRDPTimeAcc; -// extern UNK_TYPE1 D_801FBB28; - extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64game.h b/include/z64game.h index 8b63b701f..50dd68473 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -61,7 +61,7 @@ typedef struct GameState { /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load. /* 0x10 */ size_t size; /* 0x14 */ Input input[MAXCONTROLLERS]; - /* 0x74 */ TwoHeadArena heap; + /* 0x74 */ TwoHeadArena tha; /* 0x84 */ GameAlloc alloc; /* 0x98 */ UNK_TYPE1 pad98[0x3]; /* 0x9B */ u8 running; // If 0, switch to next game state diff --git a/include/z64speed_meter.h b/include/z64speed_meter.h index fbd815248..44b47ed1e 100644 --- a/include/z64speed_meter.h +++ b/include/z64speed_meter.h @@ -7,12 +7,24 @@ struct GameState; struct GraphicsContext; typedef struct SpeedMeter { - /* 0x00 */ char unk_00[0x20]; + /* 0x00 */ char unk_00[0x18]; + /* 0x18 */ s32 x; // Unused + /* 0x1C */ s32 y; } SpeedMeter; // size = 0x20 void SpeedMeter_Init(SpeedMeter* this); void SpeedMeter_Destroy(SpeedMeter* this); void SpeedMeter_DrawTimeEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx); -void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* gameState); +void SpeedMeter_DrawAllocEntries(SpeedMeter* this, struct GraphicsContext* gfxCtx, struct GameState* state); + +extern volatile OSTime gRSPAudioTimeTotal; +extern volatile OSTime gRSPGfxTimeTotal; +extern volatile OSTime gRDPTimeTotal; +extern volatile OSTime gGraphUpdatePeriod; +extern volatile OSTime gRSPAudioTimeAcc; +extern volatile OSTime gRSPGfxTimeAcc; +extern volatile OSTime gRSPOtherTimeAcc; +extern volatile OSTime gUnkTimeAcc; +extern volatile OSTime gRDPTimeAcc; #endif diff --git a/include/z64view.h b/include/z64view.h index f0661d947..19bb4492c 100644 --- a/include/z64view.h +++ b/include/z64view.h @@ -65,6 +65,17 @@ typedef struct View { } \ (void)0 +#define SET_FULLSCREEN_VIEWPORT_DYNAMIC(view) \ +{ \ + Viewport viewport; \ + viewport.bottomY = gScreenHeight; \ + viewport.rightX = gScreenWidth; \ + viewport.topY = 0; \ + viewport.leftX = 0; \ + View_SetViewport(view, &viewport); \ +} \ +(void)0 + void View_Init(View* view, struct GraphicsContext* gfxCtx); void View_LookAt(View* view, Vec3f* eye, Vec3f* at, Vec3f* up); void View_SetScale(View* view, f32 scale); diff --git a/spec b/spec index 2e2878c69..00e0fee37 100644 --- a/spec +++ b/spec @@ -560,8 +560,6 @@ beginseg include "build/src/code/padmgr.o" include "build/src/code/sched.o" include "build/src/code/speed_meter.o" - include "build/data/code/speed_meter.data.o" - include "build/data/code/speed_meter.bss.o" include "build/src/code/su_mtx.o" include "build/src/code/sys_cfb.o" include "build/src/code/sys_cmpdma.o" diff --git a/src/boot/irqmgr.c b/src/boot/irqmgr.c index 9a773f279..172eabec8 100644 --- a/src/boot/irqmgr.c +++ b/src/boot/irqmgr.c @@ -4,7 +4,7 @@ vs32 gIrqMgrResetStatus = 0; volatile OSTime sIrqMgrResetTime = 0; -volatile OSTime sIrqMgrRetraceTime = 0; +volatile OSTime gIrqMgrRetraceTime = 0; s32 sIrqMgrRetraceCount = 0; void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue) { @@ -109,11 +109,11 @@ void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr) { IrqMgr_CheckStack(); } void IrqMgr_HandleRetrace(IrqMgr* irqmgr) { - if (sIrqMgrRetraceTime == 0) { + if (gIrqMgrRetraceTime == 0) { if (irqmgr->lastFrameTime == 0) { irqmgr->lastFrameTime = osGetTime(); } else { - sIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime; + gIrqMgrRetraceTime = osGetTime() - irqmgr->lastFrameTime; } } diff --git a/src/code/game.c b/src/code/game.c index 4f2df63cd..237783319 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -164,11 +164,11 @@ void GameState_InitArena(GameState* gameState, size_t size) { void* buf = GameAlloc_Malloc(alloc, size); if (buf) { - THA_Init(&gameState->heap, buf, size); + THA_Init(&gameState->tha, buf, size); return; } - THA_Init(&gameState->heap, NULL, 0); + THA_Init(&gameState->tha, NULL, 0); _dbg_hungup("../game.c", 1035); } @@ -178,9 +178,9 @@ void GameState_Realloc(GameState* gameState, size_t size) { size_t systemMaxFree; size_t bytesFree; size_t bytesAllocated; - void* heapStart = gameState->heap.start; + void* heapStart = gameState->tha.start; - THA_Destroy(&gameState->heap); + THA_Destroy(&gameState->tha); GameAlloc_Free(alloc, heapStart); SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated); size = ((systemMaxFree - sizeof(ArenaNode)) < size) ? 0 : size; @@ -190,9 +190,9 @@ void GameState_Realloc(GameState* gameState, size_t size) { gameArena = GameAlloc_Malloc(alloc, size); if (gameArena != NULL) { - THA_Init(&gameState->heap, gameArena, size); + THA_Init(&gameState->tha, gameArena, size); } else { - THA_Init(&gameState->heap, NULL, 0); + THA_Init(&gameState->tha, NULL, 0); _dbg_hungup("../game.c", 1074); } } @@ -246,7 +246,7 @@ void GameState_Destroy(GameState* gameState) { VisZbuf_Destroy(&sGameVisZbuf); VisMono_Destroy(&sGameVisMono); ViMode_Destroy(&sGameViMode); - THA_Destroy(&gameState->heap); + THA_Destroy(&gameState->tha); GameAlloc_Cleanup(&gameState->alloc); } @@ -263,11 +263,11 @@ u32 GameState_IsRunning(GameState* gameState) { } s32 GameState_GetArenaSize(GameState* gameState) { - return THA_GetRemaining(&gameState->heap); + return THA_GetRemaining(&gameState->tha); } s32 func_80173B48(GameState* gameState) { - s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal); + s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * gIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal); return result; } diff --git a/src/code/graph.c b/src/code/graph.c index bce162406..ad4ad0286 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -8,7 +8,7 @@ FaultAddrConvClient sGraphFaultAddrConvClient; FaultClient sGraphFaultClient; GfxMasterList* gGfxMasterDL; CfbInfo sGraphCfbInfos[3]; -OSTime sGraphTaskStartTime; +OSTime sGraphPrevUpdateEndTime; #include "variables.h" #include "macros.h" @@ -16,6 +16,7 @@ OSTime sGraphTaskStartTime; #include "idle.h" #include "sys_cfb.h" #include "system_malloc.h" +#include "z64speed_meter.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" @@ -310,17 +311,17 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { { OSTime time = osGetTime(); - D_801FBAE8 = sRSPGFXTotalTime; - D_801FBAE0 = gRSPAudioTotalTime; + gRSPGfxTimeTotal = gRSPGfxTimeAcc; + gRSPAudioTimeTotal = gRSPAudioTimeAcc; gRDPTimeTotal = gRDPTimeAcc; - sRSPGFXTotalTime = 0; - gRSPAudioTotalTime = 0; + gRSPGfxTimeAcc = 0; + gRSPAudioTimeAcc = 0; gRDPTimeAcc = 0; - if (sGraphTaskStartTime != 0) { - lastRenderFrameDuration = time - sGraphTaskStartTime; + if (sGraphPrevUpdateEndTime != 0) { + gGraphUpdatePeriod = time - sGraphPrevUpdateEndTime; } - sGraphTaskStartTime = time; + sGraphPrevUpdateEndTime = time; } } diff --git a/src/code/sched.c b/src/code/sched.c index f8dc2a35d..289b4a696 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -16,6 +16,7 @@ u32 gAudioSPDataSize; #include "functions.h" #include "variables.h" #include "stackcheck.h" +#include "z64speed_meter.h" #include "z64thread.h" #define RSP_DONE_MSG 667 @@ -426,16 +427,16 @@ void Sched_HandleRSPDone(SchedContext* sched) { time = osGetTime(); switch (sched->curRSPTask->list.t.type) { case M_AUDTASK: - gRSPAudioTotalTime += time - sRSPAudioStartTime; + gRSPAudioTimeAcc += time - sRSPAudioStartTime; break; case M_GFXTASK: - sRSPGFXTotalTime += time - sRSPGFXStartTime; + gRSPGfxTimeAcc += time - sRSPGFXStartTime; break; default: if (1) {} - sRSPOtherTotalTime += time - sRSPOtherStartTime; + gRSPOtherTimeAcc += time - sRSPOtherStartTime; break; } diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c index 1e6f1f886..3550d62ce 100644 --- a/src/code/speed_meter.c +++ b/src/code/speed_meter.c @@ -1,18 +1,266 @@ #include "global.h" +#include "sys_cfb.h" #include "z64speed_meter.h" #include "z64view.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177390.s") +/** + * How much time the RSP ran audio tasks for over the course of `gGraphUpdatePeriod`. + */ +volatile OSTime gRSPAudioTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Init.s") +/** + * How much time the RSP ran graphics tasks for over the course of `gGraphUpdatePeriod`. + * Typically the RSP runs 1 graphics task per `Graph_Update` cycle, but may run 0 (see `Graph_Update`). + */ +volatile OSTime gRSPGfxTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s") +/** + * How much time the RDP ran for over the course of `gGraphUpdatePeriod`. + */ +volatile OSTime gRDPTimeTotal; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s") +/** + * How much time elapsed between the last two `Graph_Update` ending. + * This is expected to be at least the duration of a single frame, since it includes the time spent waiting on the + * graphics task to be done. + */ +volatile OSTime gGraphUpdatePeriod; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177A84.s") +// Accumulator for `gRSPAudioTimeTotal` +volatile OSTime gRSPAudioTimeAcc; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177AC8.s") +// Accumulator for `gRSPGfxTimeTotal`. +volatile OSTime gRSPGfxTimeAcc; -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s") +volatile OSTime gRSPOtherTimeAcc; +volatile OSTime gUnkTimeAcc; + +// Accumulator for `gRDPTimeTotal` +volatile OSTime gRDPTimeAcc; + +typedef struct { + /* 0x0 */ volatile OSTime* time; + /* 0x4 */ u16 x; + /* 0x5 */ u16 y; + /* 0x6 */ u16 color; +} SpeedMeterTimeEntry; // size = 0x8 + +SpeedMeterTimeEntry* sSpeedMeterTimeEntryPtr; + +SpeedMeterTimeEntry sSpeedMeterTimeEntryArray[] = { + { &gRSPAudioTimeTotal, 0, 6, GPACK_RGBA5551(0, 0, 255, 1) }, + { &gRSPGfxTimeTotal, 0, 8, GPACK_RGBA5551(255, 128, 128, 1) }, + { &gRDPTimeTotal, 0, 10, GPACK_RGBA5551(0, 255, 0, 1) }, + { &gGraphUpdatePeriod, 0, 12, GPACK_RGBA5551(255, 0, 255, 1) }, +}; + +typedef struct { + /* 0x00 */ s32 maxVal; + /* 0x04 */ s32 val; + /* 0x08 */ u16 backColor; + /* 0x0A */ u16 foreColor; + /* 0x0C */ s32 ulx; + /* 0x10 */ s32 lrx; + /* 0x14 */ s32 uly; + /* 0x18 */ s32 lry; +} SpeedMeterAllocEntry; // size = 0x1C + +//! FAKE: if(1) in macro + +#define gDrawRect(gfx, color, ulx, uly, lrx, lry) \ + do { \ + if (gSysCfbHiResEnabled == true) { \ + u32 tmp = color; \ + gDPPipeSync(gfx); \ + gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \ + gDPFillRectangle(gfx, (ulx)*2, (uly)*2, (lrx)*2, (lry)*2); \ + if (1) {} \ + } else { \ + u32 tmp = color; \ + gDPPipeSync(gfx); \ + gDPSetFillColor(gfx, ((tmp) << 16) | (tmp)); \ + gDPFillRectangle(gfx, (ulx), (uly), (lrx), (lry)); \ + } \ + } while (0) + +void SpeedMeter_InitImpl(SpeedMeter* this, s32 x, s32 y) { + this->x = x; + this->y = y; +} + +void SpeedMeter_Init(SpeedMeter* this) { + SpeedMeter_InitImpl(this, 32, 22); +} + +void SpeedMeter_Destroy(SpeedMeter* this) { +} + +void SpeedMeter_DrawTimeEntries(SpeedMeter* this, GraphicsContext* gfxCtx) { + s32 pad[3]; + u32 baseX = 32; + s32 width; + s32 uly; + s32 lry; + s32 pad3; + View view; + s32 pad2[2]; + s32 i; + Gfx* gfx; + + uly = this->y; + lry = this->y + 2; + + OPEN_DISPS(gfxCtx); + + /*! @bug if gIrqMgrRetraceTime is 0, CLOSE_DISPS will never be reached */ + if (gIrqMgrRetraceTime == 0) { + return; + } + + sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0]; + for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) { + width = ((f64)*sSpeedMeterTimeEntryPtr->time / gIrqMgrRetraceTime) * 64.0; + sSpeedMeterTimeEntryPtr->x = baseX + width; + sSpeedMeterTimeEntryPtr++; + } + + View_Init(&view, gfxCtx); + view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO; + + SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view); + + gfx = OVERLAY_DISP; + View_ApplyTo(&view, &gfx); + + gDPPipeSync(gfx++); + gDPSetOtherMode(gfx++, + G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + + gDrawRect(gfx++, GPACK_RGBA5551(0, 0, 255, 1), baseX + 64 * 0, uly, baseX + 64 * 1, lry); + gDrawRect(gfx++, GPACK_RGBA5551(0, 255, 0, 1), baseX + 64 * 1, uly, baseX + 64 * 2, lry); + gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 0, 1), baseX + 64 * 2, uly, baseX + 64 * 3, lry); + gDrawRect(gfx++, GPACK_RGBA5551(255, 0, 255, 1), baseX + 64 * 3, uly, baseX + 64 * 4, lry); + + sSpeedMeterTimeEntryPtr = &sSpeedMeterTimeEntryArray[0]; + for (i = 0; i < ARRAY_COUNT(sSpeedMeterTimeEntryArray); i++) { + gDrawRect(gfx++, sSpeedMeterTimeEntryPtr->color, baseX, lry + sSpeedMeterTimeEntryPtr->y, + sSpeedMeterTimeEntryPtr->x, lry + sSpeedMeterTimeEntryPtr->y + 1); + sSpeedMeterTimeEntryPtr++; + } + gDPPipeSync(gfx++); + + OVERLAY_DISP = gfx; + + CLOSE_DISPS(gfxCtx); +} + +void SpeedMeter_InitAllocEntry(SpeedMeterAllocEntry* this, u32 maxVal, u32 val, u16 backColor, u16 foreColor, u32 ulx, + u32 lrx, u32 uly, u32 lry) { + this->maxVal = maxVal; + this->val = val; + this->backColor = backColor; + this->foreColor = foreColor; + this->ulx = ulx; + this->lrx = lrx; + this->uly = uly; + this->lry = lry; +} + +void SpeedMeter_DrawAllocEntry(SpeedMeterAllocEntry* this, GraphicsContext* gfxCtx) { + s32 usedOff; + View view; + Gfx* gfx; + + if (this->maxVal != 0) { + OPEN_DISPS(gfxCtx); + + View_Init(&view, gfxCtx); + view.flags = VIEW_VIEWPORT | VIEW_PROJECTION_ORTHO; + + SET_FULLSCREEN_VIEWPORT_DYNAMIC(&view); + + gfx = OVERLAY_DISP; + View_ApplyTo(&view, &gfx); + + gDPPipeSync(gfx++); + gDPSetOtherMode(gfx++, + G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + + usedOff = ((this->lrx - this->ulx) * this->val) / this->maxVal + this->ulx; + gDrawRect(gfx++, this->backColor, usedOff, this->uly, this->lrx, this->lry); + gDrawRect(gfx++, this->foreColor, this->ulx, this->uly, usedOff, this->lry); + + gDPPipeSync(gfx++); + + //! FAKE: + if (this && this && this) {} + + OVERLAY_DISP = gfx; + CLOSE_DISPS(gfxCtx); + } +} + +void SpeedMeter_DrawAllocEntries(SpeedMeter* meter, GraphicsContext* gfxCtx, GameState* state) { + s32 pad[2]; + u32 ulx = 30; + u32 lrx = 290; + SpeedMeterAllocEntry entry; + TwoHeadArena* tha; + s32 y; + TwoHeadGfxArena* thga; + u32 zeldaFreeMax; + u32 zeldaFree; + u32 zeldaAlloc; + s32 sysFreeMax; + s32 sysFree; + s32 sysAlloc; + + y = 212; + if (R_ENABLE_ARENA_DBG > 2) { + if (ZeldaArena_IsInitialized()) { + ZeldaArena_GetSizes(&zeldaFreeMax, &zeldaFree, &zeldaAlloc); + SpeedMeter_InitAllocEntry(&entry, zeldaFree + zeldaAlloc, zeldaAlloc, GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 255, 255, 1), ulx, lrx, y, y + 1); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + y++; + } + } + + if (R_ENABLE_ARENA_DBG > 1) { + SystemArena_GetSizes((u32*)&sysFreeMax, (u32*)&sysFree, (u32*)&sysAlloc); + SpeedMeter_InitAllocEntry(&entry, sysFree + sysAlloc - state->tha.size, sysAlloc - state->tha.size, + GPACK_RGBA5551(0, 0, 255, 1), GPACK_RGBA5551(255, 128, 128, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + } + + tha = &state->tha; + SpeedMeter_InitAllocEntry(&entry, tha->size, tha->size - THA_GetRemaining(tha), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(0, 255, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->polyOpa; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 0, 255, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->polyXlu; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 255, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; + + thga = &gfxCtx->overlay; + SpeedMeter_InitAllocEntry(&entry, thga->size, thga->size - THGA_GetRemaining(thga), GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 0, 0, 1), ulx, lrx, y, y); + SpeedMeter_DrawAllocEntry(&entry, gfxCtx); + y++; +} diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index 6269add5f..f84dae383 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -75,7 +75,7 @@ MtxF* sCurrentMatrix; //!< original name: "Matrix_now" * @remark original name: "new_Matrix" */ void Matrix_Init(GameState* gameState) { - sMatrixStack = THA_AllocTailAlign16(&gameState->heap, MATRIX_STACK_SIZE * sizeof(MtxF)); + sMatrixStack = THA_AllocTailAlign16(&gameState->tha, MATRIX_STACK_SIZE * sizeof(MtxF)); sCurrentMatrix = sMatrixStack; } diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index ae871c8a6..2bef40dce 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -140,7 +140,7 @@ void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list) { } void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes) { - list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.heap, numNodes * sizeof(SSNode), -2); + list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.tha, numNodes * sizeof(SSNode), -2); list->maxNodes = numNodes; list->count = 0; } @@ -1580,7 +1580,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader } } colCtx->lookupTbl = THA_AllocTailAlign( - &play->state.heap, + &play->state.tha, colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z, ~1); if (colCtx->lookupTbl == NULL) { Fault_AddHungupAndCrash("../z_bgcheck.c", 3955); @@ -2456,8 +2456,8 @@ void SSNodeList_Init(SSNodeList* this) { void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys) { this->max = tblMax; this->count = 0; - this->tbl = THA_AllocTailAlign(&play->state.heap, tblMax * sizeof(SSNode), -2); - this->polyCheckTbl = THA_AllocTailAlign16(&play->state.heap, numPolys * sizeof(u8)); + this->tbl = THA_AllocTailAlign(&play->state.tha, tblMax * sizeof(SSNode), -2); + this->polyCheckTbl = THA_AllocTailAlign16(&play->state.tha, numPolys * sizeof(u8)); if (this->polyCheckTbl == NULL) { sprintf(D_801ED950, "this->polygon_check == NULL(game_alloc() MemoryAllocationError.)\n"); @@ -2599,7 +2599,7 @@ void DynaPoly_NullPolyList(CollisionPoly** polyList) { * Allocate dyna.polyList */ void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys) { - *polyList = THA_AllocTailAlign(&play->state.heap, numPolys * sizeof(CollisionPoly), -2); + *polyList = THA_AllocTailAlign(&play->state.tha, numPolys * sizeof(CollisionPoly), -2); } /** @@ -2613,7 +2613,7 @@ void DynaPoly_NullVtxList(Vec3s** vtxList) { * Allocate dyna.vtxList */ void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx) { - *vtxList = THA_AllocTailAlign(&play->state.heap, numVtx * sizeof(Vec3s), -2); + *vtxList = THA_AllocTailAlign(&play->state.tha, numVtx * sizeof(Vec3s), -2); } /** @@ -2628,7 +2628,7 @@ void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList) { * Allocate dyna.waterBoxList */ void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes) { - waterBoxList->boxes = THA_AllocTailAlign(&play->state.heap, numWaterBoxes * sizeof(WaterBox), -2); + waterBoxList->boxes = THA_AllocTailAlign(&play->state.tha, numWaterBoxes * sizeof(WaterBox), -2); } /** diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 870132a07..08aa845ab 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -8,7 +8,7 @@ void EffectSS_Init(PlayState* play, s32 numEntries) { EffectSs* effectsSs; EffectSsOverlay* overlay; - sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.heap, numEntries * sizeof(EffectSs)); + sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.tha, numEntries * sizeof(EffectSs)); sEffectSsInfo.searchIndex = 0; sEffectSsInfo.size = numEntries; diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c index e09492d4e..d0bacdd22 100644 --- a/src/code/z_kaleido_manager.c +++ b/src/code/z_kaleido_manager.c @@ -66,7 +66,7 @@ void KaleidoManager_Init(PlayState* play) { } } - sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.heap, largestSize); + sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.tha, largestSize); gKaleidoMgrCurOvl = NULL; Fault_AddAddrConvClient(&sKaleidoMgrFaultAddrConvClient, KaleidoManager_FaultAddrConv, NULL); } diff --git a/src/code/z_malloc.c b/src/code/z_malloc.c index 781f4310e..ac56231cf 100644 --- a/src/code/z_malloc.c +++ b/src/code/z_malloc.c @@ -40,7 +40,7 @@ void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc) __osGetSizes(&sZeldaArena, outMaxFree, outFree, outAlloc); } -s32 ZeldaArena_Check() { +s32 ZeldaArena_Check(void) { return __osCheckArena(&sZeldaArena); } @@ -48,10 +48,10 @@ void ZeldaArena_Init(void* start, size_t size) { __osMallocInit(&sZeldaArena, start, size); } -void ZeldaArena_Cleanup() { +void ZeldaArena_Cleanup(void) { __osMallocCleanup(&sZeldaArena); } -u8 ZeldaArena_IsInitialized() { +u8 ZeldaArena_IsInitialized(void) { return __osMallocIsInitalized(&sZeldaArena); } diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index c087fe059..f04562e03 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -181,7 +181,7 @@ void Map_Init(PlayState* play) { func_80105C40(play->roomCtx.curRoom.num); interfaceCtx->unk_278 = -1; interfaceCtx->dungeonOrBossAreaMapIndex = -1; - interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.heap, 0x1000); + interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.tha, 0x1000); if (func_8010A2AC(play)) { gSaveContext.mapIndex = func_8010A238(play); return; diff --git a/src/code/z_message.c b/src/code/z_message.c index a922f237b..42a0e301f 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -597,7 +597,7 @@ void Message_Init(PlayState* play) { msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; msgCtx->textColorAlpha = 0xFF; View_Init(&msgCtx->view, play->state.gfxCtx); - msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.heap, 0x13C00); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.tha, 0x13C00); font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 2c4106e05..4fcd31c8b 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -7115,16 +7115,16 @@ void Interface_Init(PlayState* play) { interfaceCtx->healthTimer = 200; parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static); - interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.heap, parameterStaticSize); + interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.tha, parameterStaticSize); DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize); - interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.heap, 0xC90); + interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.tha, 0xC90); DmaMgr_SendRequest0(interfaceCtx->doActionSegment, SEGMENT_ROM_START(do_action_static), 0x300); DmaMgr_SendRequest0(interfaceCtx->doActionSegment + 0x300, SEGMENT_ROM_START(do_action_static) + 0x480, 0x180); Interface_NewDay(play, CURRENT_DAY); - interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.heap, 0x4000); + interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.tha, 0x4000); if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); diff --git a/src/code/z_play.c b/src/code/z_play.c index 44efbfbfb..41b921125 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1562,7 +1562,7 @@ void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos) { void* Play_LoadFile(PlayState* this, RomFile* entry) { size_t size = entry->vromEnd - entry->vromStart; - void* allocp = THA_AllocTailAlign16(&this->state.heap, size); + void* allocp = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(allocp, entry->vromStart, size); @@ -2324,9 +2324,9 @@ void Play_Init(GameState* thisx) { D_801F6D4C->envColor.b = 0; D_801F6D4C->envColor.a = 0; CutsceneFlags_UnsetAll(this); - THA_GetRemaining(&this->state.heap); - zAllocSize = THA_GetRemaining(&this->state.heap); - zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.heap, zAllocSize); + THA_GetRemaining(&this->state.tha); + zAllocSize = THA_GetRemaining(&this->state.tha); + zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.tha, zAllocSize); ZeldaArena_Init(((zAlloc + 8) & ~0xF), (zAllocSize - ((zAlloc + 8) & ~0xF)) + zAlloc); //! @bug: Incorrect ALIGN16s Actor_InitContext(this, &this->actorCtx, this->linkActorEntry); diff --git a/src/code/z_room.c b/src/code/z_room.c index b8de6caec..d06739d87 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -516,7 +516,7 @@ size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) { } } - roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize); + roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.tha, maxRoomSize); if (roomCtx->roomMemPages[0] == NULL) { _dbg_hungup("../z_room.c", 1078); } diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 529458f83..811853f07 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -48,7 +48,7 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; } // clang-format on - objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->heap, spaceSize); + objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize); objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP); @@ -357,7 +357,7 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) { size_t size = sceneTextureFiles[fileIndex].vromEnd - vromStart; if (size != 0) { - play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.heap, size); + play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.tha, size); DmaMgr_SendRequest0(play->roomCtx.unk74, vromStart, size); } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 198dac4e9..8d382e5db 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1866,7 +1866,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) { void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { if (gSaveContext.flashSaveAvailable) { - sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE); + sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->tha, SAVE_BUFFER_SIZE); sramCtx->status = 0; } } diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index dd0785d94..605dff84c 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -294,15 +294,15 @@ void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) { Skybox_Setup(gameState, skyboxCtx, skyboxId); if (skyboxId != SKYBOX_NONE) { - skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->heap, 0x3840); + skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->tha, 0x3840); if (skyboxId == SKYBOX_CUTSCENE_MAP) { // Allocate enough space for the vertices for a 6 sided skybox (cube) - skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6); + skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 6); func_80143148(skyboxCtx, 6); } else { // Allocate enough space for the vertices for a 5 sided skybox (bottom is missing) - skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 5); + skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->tha, sizeof(Vtx) * 32 * 5); func_80143148(skyboxCtx, 5); } } diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 1b68e0b14..637a20906 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -215,11 +215,11 @@ void DayTelop_Noop(DayTelopState* this) { void DayTelop_LoadGraphics(DayTelopState* this) { size_t segmentSize = SEGMENT_ROM_SIZE(daytelop_static); - this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->daytelopStaticFile, SEGMENT_ROM_START(daytelop_static), segmentSize); segmentSize = SEGMENT_ROM_SIZE(icon_item_gameover_static); - this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->gameoverStaticFile, SEGMENT_ROM_START(icon_item_gameover_static), segmentSize); } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index 4d3e172d9..a47b5ed9e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2531,15 +2531,15 @@ void FileSelect_Init(GameState* thisx) { Font_LoadOrderedFont(&this->font); size = SEGMENT_ROM_SIZE(title_static); - this->staticSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->staticSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(title_static), size); size = SEGMENT_ROM_SIZE(parameter_static); - this->parameterSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->parameterSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->parameterSegment, SEGMENT_ROM_START(parameter_static), size); size = gObjectTable[OBJECT_MAG].vromEnd - gObjectTable[OBJECT_MAG].vromStart; - this->titleSegment = THA_AllocTailAlign16(&this->state.heap, size); + this->titleSegment = THA_AllocTailAlign16(&this->state.tha, size); DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size); Audio_SetSpec(0xA); diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index c829e79a9..5cebc2fca 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -154,7 +154,7 @@ void ConsoleLogo_Init(GameState* thisx) { ConsoleLogoState* this = (ConsoleLogoState*)thisx; uintptr_t segmentSize = SEGMENT_ROM_SIZE(nintendo_rogo_static); - this->staticSegment = THA_AllocTailAlign16(&this->state.heap, segmentSize); + this->staticSegment = THA_AllocTailAlign16(&this->state.tha, segmentSize); DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(nintendo_rogo_static), segmentSize); GameState_SetFramerateDivisor(&this->state, 1); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4a8419dc5..c1137d3b2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3215,12 +3215,12 @@ 0x80177084:("Sched_FaultClient",), 0x8017715C:("Sched_ThreadEntry",), 0x801772A0:("Sched_Init",), - 0x80177390:("func_80177390",), + 0x80177390:("SpeedMeter_InitImpl",), 0x801773A0:("SpeedMeter_Init",), 0x801773C4:("SpeedMeter_Destroy",), 0x801773D0:("SpeedMeter_DrawTimeEntries",), - 0x80177A84:("func_80177A84",), - 0x80177AC8:("func_80177AC8",), + 0x80177A84:("SpeedMeter_InitAllocEntry",), + 0x80177AC8:("SpeedMeter_DrawAllocEntry",), 0x80177E58:("SpeedMeter_DrawAllocEntries",), 0x801780F0:("Mtx_SetTranslateScaleMtx",), 0x801781EC:("Mtx_SetRotationMtx",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index aababcf0b..417e27b77 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -21,7 +21,7 @@ 0x80096B50:("gDmaMgrDmaBuffSize","u32","",0x4), 0x80096B60:("gIrqMgrResetStatus","vs32","",0x4), 0x80096B68:("sIrqMgrResetTime","volatile OSTime","",0x8), - 0x80096B70:("sIrqMgrRetraceTime","volatile OSTime","",0x8), + 0x80096B70:("gIrqMgrRetraceTime","volatile OSTime","",0x8), 0x80096B78:("sIrqMgrRetraceCount","s32","",0x4), 0x80096B80:("sCpuExceptions","char*","[18]",0x48), 0x80096BC8:("sFpuExceptions","char*","[6]",0x18), @@ -2159,7 +2159,7 @@ 0x801D1530:("sPadMgrInstance","PadMgr*","",0x4), 0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4), 0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4), - 0x801D1540:("D_801D1540","UNK_PTR","",0x4), + 0x801D1540:("sSpeedMeterTimeEntryArray","UNK_PTR","",0x4), 0x801D1570:("D_801D1570","f32","[13]",0x34), 0x801D15B0:("gZeroVec3f","Vec3f","",0xC), 0x801D15BC:("gZeroVec3s","Vec3s","",0x6), @@ -4032,7 +4032,7 @@ 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), 0x801F80F8:("sGraphCfbInfos","UNK_TYPE1","",0x1), - 0x801F8150:("sGraphTaskStartTime","u64","",0x8), + 0x801F8150:("sGraphPrevUpdateEndTime","u64","",0x8), 0x801F8160:("sSerialEventQueue","OSMesgQueue","",0x18), 0x801F8178:("sSerialMsgBuf","OSMesg","[1]",0x4), 0x801F8180:("gSegments","u32","[16]",0x40), @@ -4052,24 +4052,22 @@ 0x801FB338:("sAudioMgr","AudioMgr","",0x2e0), 0x801FB620:("gPadMgr","PadMgr","",0x480), 0x801FBAA0:("sSchedFaultClient","UNK_TYPE1","",0x1), - 0x801FBAB0:("sRSPGFXStartTime","OSTime","",0x8), - 0x801FBAB8:("sRSPAudioStartTime","OSTime","",0x8), - 0x801FBAC0:("sRSPOtherStartTime","OSTime","",0x8), + 0x801FBAB0:("sRSPGfxTimeStart","OSTime","",0x8), + 0x801FBAB8:("sRSPAudioTimeStart","OSTime","",0x8), + 0x801FBAC0:("sRSPOtherTimeStart","OSTime","",0x8), 0x801FBAC8:("sRDPStartTime","OSTime","",0x8), 0x801FBAD0:("gAudioSPDataPtr","u64*","",0x4), 0x801FBAD4:("gAudioSPDataSize","u32","",0x4), - 0x801FBAE0:("D_801FBAE0","UNK_TYPE1","",0x1), - 0x801FBAE8:("D_801FBAE8","UNK_TYPE1","",0x1), + 0x801FBAE0:("gRSPAudioTimeTotal","volatile OSTime","",0x8), + 0x801FBAE8:("gRSPGfxTimeTotal","volatile OSTime","",0x8), 0x801FBAF0:("gRDPTimeTotal","volatile OSTime","",0x8), - 0x801FBAF8:("lastRenderFrameDuration","volatile OSTime","",0x8), - 0x801FBB00:("gRSPAudioTotalTime","UNK_TYPE1","",0x1), - 0x801FBB04:("D_801FBB04","UNK_TYPE1","",0x1), - 0x801FBB08:("sRSPGFXTotalTime","UNK_TYPE1","",0x1), - 0x801FBB0C:("D_801FBB0C","UNK_TYPE1","",0x1), - 0x801FBB10:("sRSPOtherTotalTime","UNK_TYPE1","",0x1), - 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), - 0x801FBB20:("gRDPTimeAcc","UNK_TYPE1","",0x1), - 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), + 0x801FBAF8:("gGraphUpdatePeriod","volatile OSTime","",0x8), + 0x801FBB00:("gRSPAudioTimeAcc","volatile OSTime","",0x8), + 0x801FBB08:("gRSPGfxTimeAcc","volatile OSTime","",0x8), + 0x801FBB10:("gRSPOtherTimeAcc","volatile OSTime","",0x8), + 0x801FBB18:("gUnkTimeAcc","volatile OSTime","",0x8), + 0x801FBB20:("gRDPTimeAcc","volatile OSTime","",0x8), + 0x801FBB28:("sSpeedMeterTimeEntryPtr","UNK_TYPE1","",0x1), 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), 0x801FBB88:("gActiveViMode","OSViMode*","",0x4), diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index efa3bc2fe..0aa806f2a 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -34,6 +34,8 @@ CLEAR_EVENTINF = "int" CLEAR_EVENTINF_ALT = "int" "EVENTINF_.*" = "int" ".+REG" = "int" +SET_FULLSCREEN_VIEWPORT_DYNAMIC = "void" +gDrawRect = "void" [decompme.compilers] "tools/ido_recomp/linux/7.1/cc" = "ido7.1" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 5194497c7..3e6042f03 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2729,12 +2729,12 @@ asm/non_matchings/code/sched/Sched_SendGfxCancelMsg.s,Sched_SendGfxCancelMsg,0x8 asm/non_matchings/code/sched/Sched_FaultClient.s,Sched_FaultClient,0x80177084,0x36 asm/non_matchings/code/sched/Sched_ThreadEntry.s,Sched_ThreadEntry,0x8017715C,0x51 asm/non_matchings/code/sched/Sched_Init.s,Sched_Init,0x801772A0,0x3C -asm/non_matchings/code/speed_meter/func_80177390.s,func_80177390,0x80177390,0x4 +asm/non_matchings/code/speed_meter/SpeedMeter_InitImpl.s,SpeedMeter_InitImpl,0x80177390,0x4 asm/non_matchings/code/speed_meter/SpeedMeter_Init.s,SpeedMeter_Init,0x801773A0,0x9 asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s,SpeedMeter_Destroy,0x801773C4,0x3 asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s,SpeedMeter_DrawTimeEntries,0x801773D0,0x1AD -asm/non_matchings/code/speed_meter/func_80177A84.s,func_80177A84,0x80177A84,0x11 -asm/non_matchings/code/speed_meter/func_80177AC8.s,func_80177AC8,0x80177AC8,0xE4 +asm/non_matchings/code/speed_meter/SpeedMeter_InitAllocEntry.s,SpeedMeter_InitAllocEntry,0x80177A84,0x11 +asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntry.s,SpeedMeter_DrawAllocEntry,0x80177AC8,0xE4 asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_DrawAllocEntries,0x80177E58,0xA6 asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90 From 9d043f0197d57021cb704f94e5ba459d8b03cd30 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Mon, 2 Oct 2023 23:26:50 -0700 Subject: [PATCH 41/74] Add original asset names to all `object_l*` and `object_m*` files (#1403) --- assets/xml/objects/gameplay_keep.xml | 2 +- assets/xml/objects/object_ladder.xml | 16 ++--- assets/xml/objects/object_last_obj.xml | 12 ++-- assets/xml/objects/object_lastday.xml | 8 +-- assets/xml/objects/object_lbfshot.xml | 6 +- assets/xml/objects/object_lightblock.xml | 6 +- assets/xml/objects/object_lightswitch.xml | 6 +- assets/xml/objects/object_link_goron.xml | 8 +-- assets/xml/objects/object_link_zora.xml | 2 +- assets/xml/objects/object_lotus.xml | 2 +- assets/xml/objects/object_mamenoki.xml | 8 +-- assets/xml/objects/object_maruta.xml | 18 +++--- assets/xml/objects/object_mastergolon.xml | 2 +- assets/xml/objects/object_masterzoora.xml | 2 +- assets/xml/objects/object_milkbar.xml | 20 +++--- assets/xml/objects/object_mir_ray.xml | 2 +- assets/xml/objects/object_mk.xml | 10 +-- assets/xml/objects/object_mm.xml | 34 +++++----- assets/xml/objects/object_mnk.xml | 76 +++++++++++------------ assets/xml/objects/object_moonend.xml | 2 +- assets/xml/objects/object_moonston.xml | 4 +- assets/xml/objects/object_ms.xml | 2 +- assets/xml/objects/object_mu.xml | 12 ++-- assets/xml/overlays/ovl_En_Mm2.xml | 2 +- 24 files changed, 131 insertions(+), 131 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 8b1c482c2..5dababaab 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -1159,7 +1159,7 @@ - + diff --git a/assets/xml/objects/object_ladder.xml b/assets/xml/objects/object_ladder.xml index 6e42412ec..29ee69b9b 100644 --- a/assets/xml/objects/object_ladder.xml +++ b/assets/xml/objects/object_ladder.xml @@ -1,13 +1,13 @@  - - - - - - - - + + + + + + + + diff --git a/assets/xml/objects/object_last_obj.xml b/assets/xml/objects/object_last_obj.xml index 03dbddcf2..bd452a408 100644 --- a/assets/xml/objects/object_last_obj.xml +++ b/assets/xml/objects/object_last_obj.xml @@ -1,21 +1,21 @@  - + - - + + - - + + - + diff --git a/assets/xml/objects/object_lastday.xml b/assets/xml/objects/object_lastday.xml index e447edfbf..4c6b5fdb4 100644 --- a/assets/xml/objects/object_lastday.xml +++ b/assets/xml/objects/object_lastday.xml @@ -3,13 +3,13 @@ - + - + - + - + diff --git a/assets/xml/objects/object_lbfshot.xml b/assets/xml/objects/object_lbfshot.xml index 325ddf49e..881f877b6 100644 --- a/assets/xml/objects/object_lbfshot.xml +++ b/assets/xml/objects/object_lbfshot.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_lightblock.xml b/assets/xml/objects/object_lightblock.xml index 207b03020..d58ec0004 100644 --- a/assets/xml/objects/object_lightblock.xml +++ b/assets/xml/objects/object_lightblock.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_lightswitch.xml b/assets/xml/objects/object_lightswitch.xml index 4318488be..a8b26bc51 100644 --- a/assets/xml/objects/object_lightswitch.xml +++ b/assets/xml/objects/object_lightswitch.xml @@ -1,9 +1,9 @@  - - + + - + diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml index 76017884e..b6dd7fe6f 100644 --- a/assets/xml/objects/object_link_goron.xml +++ b/assets/xml/objects/object_link_goron.xml @@ -42,7 +42,7 @@ - + @@ -72,10 +72,10 @@ - + - + @@ -90,7 +90,7 @@ - + diff --git a/assets/xml/objects/object_link_zora.xml b/assets/xml/objects/object_link_zora.xml index 5833293b8..be4c54274 100644 --- a/assets/xml/objects/object_link_zora.xml +++ b/assets/xml/objects/object_link_zora.xml @@ -80,7 +80,7 @@ - + diff --git a/assets/xml/objects/object_lotus.xml b/assets/xml/objects/object_lotus.xml index b9f40033c..923218811 100644 --- a/assets/xml/objects/object_lotus.xml +++ b/assets/xml/objects/object_lotus.xml @@ -4,6 +4,6 @@ - + diff --git a/assets/xml/objects/object_mamenoki.xml b/assets/xml/objects/object_mamenoki.xml index 9ce4644c3..9fa5b6832 100644 --- a/assets/xml/objects/object_mamenoki.xml +++ b/assets/xml/objects/object_mamenoki.xml @@ -1,9 +1,9 @@  - - - - + + + + diff --git a/assets/xml/objects/object_maruta.xml b/assets/xml/objects/object_maruta.xml index e61e1162b..c44907b1d 100644 --- a/assets/xml/objects/object_maruta.xml +++ b/assets/xml/objects/object_maruta.xml @@ -3,14 +3,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_mastergolon.xml b/assets/xml/objects/object_mastergolon.xml index 35eb9d285..481fb7cde 100644 --- a/assets/xml/objects/object_mastergolon.xml +++ b/assets/xml/objects/object_mastergolon.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_masterzoora.xml b/assets/xml/objects/object_masterzoora.xml index f21b99b50..5a72744da 100644 --- a/assets/xml/objects/object_masterzoora.xml +++ b/assets/xml/objects/object_masterzoora.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_milkbar.xml b/assets/xml/objects/object_milkbar.xml index 38bec140b..f3e732514 100644 --- a/assets/xml/objects/object_milkbar.xml +++ b/assets/xml/objects/object_milkbar.xml @@ -1,27 +1,27 @@  - + - + - + - + - + - - + + @@ -33,12 +33,12 @@ - + - - + + diff --git a/assets/xml/objects/object_mir_ray.xml b/assets/xml/objects/object_mir_ray.xml index 962982322..c0b1cf6f2 100644 --- a/assets/xml/objects/object_mir_ray.xml +++ b/assets/xml/objects/object_mir_ray.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_mk.xml b/assets/xml/objects/object_mk.xml index 457eadf28..0db6c703d 100644 --- a/assets/xml/objects/object_mk.xml +++ b/assets/xml/objects/object_mk.xml @@ -1,11 +1,11 @@  - - - - - + + + + + diff --git a/assets/xml/objects/object_mm.xml b/assets/xml/objects/object_mm.xml index 43e8e930b..b7b727d4e 100644 --- a/assets/xml/objects/object_mm.xml +++ b/assets/xml/objects/object_mm.xml @@ -1,10 +1,10 @@  - - - - - + + + + + @@ -32,9 +32,9 @@ - - - + + + @@ -55,14 +55,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml index ee2d1a55e..e80bcfba2 100644 --- a/assets/xml/objects/object_mnk.xml +++ b/assets/xml/objects/object_mnk.xml @@ -1,7 +1,7 @@  - + @@ -9,11 +9,11 @@ - - - - - + + + + + @@ -24,31 +24,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -110,13 +110,13 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml index 666e9e07c..4e4b5a6f2 100644 --- a/assets/xml/objects/object_moonend.xml +++ b/assets/xml/objects/object_moonend.xml @@ -34,7 +34,7 @@ - + diff --git a/assets/xml/objects/object_moonston.xml b/assets/xml/objects/object_moonston.xml index 58a920522..2945469f2 100644 --- a/assets/xml/objects/object_moonston.xml +++ b/assets/xml/objects/object_moonston.xml @@ -4,8 +4,8 @@ along with its associated fire trail. --> - - + + diff --git a/assets/xml/objects/object_ms.xml b/assets/xml/objects/object_ms.xml index f861e6a37..1b3f86145 100644 --- a/assets/xml/objects/object_ms.xml +++ b/assets/xml/objects/object_ms.xml @@ -1,7 +1,7 @@  - + diff --git a/assets/xml/objects/object_mu.xml b/assets/xml/objects/object_mu.xml index 37886e8f5..a72b184c1 100644 --- a/assets/xml/objects/object_mu.xml +++ b/assets/xml/objects/object_mu.xml @@ -1,11 +1,11 @@  - - - - - + + + + + @@ -58,6 +58,6 @@ - + diff --git a/assets/xml/overlays/ovl_En_Mm2.xml b/assets/xml/overlays/ovl_En_Mm2.xml index 5d0be627f..81457d849 100644 --- a/assets/xml/overlays/ovl_En_Mm2.xml +++ b/assets/xml/overlays/ovl_En_Mm2.xml @@ -8,7 +8,7 @@ - + From f6a2f4492a5db3f3bd19601336a299d7b84cda6f Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Tue, 3 Oct 2023 09:58:46 +0200 Subject: [PATCH 42/74] En_Encount3 decompiled (#1405) * data * some matches * draw func * Update func * improvements * forgot extern * improvements * improvements * improvements * improvements --- spec | 3 +- .../actors/ovl_En_Encount3/z_en_encount3.c | 178 ++++++++++++++++-- .../actors/ovl_En_Encount3/z_en_encount3.h | 28 ++- 3 files changed, 194 insertions(+), 15 deletions(-) diff --git a/spec b/spec index 00e0fee37..eb09f058f 100644 --- a/spec +++ b/spec @@ -2163,8 +2163,7 @@ beginseg name "ovl_En_Encount3" compress include "build/src/overlays/actors/ovl_En_Encount3/z_en_encount3.o" - include "build/data/ovl_En_Encount3/ovl_En_Encount3.data.o" - include "build/data/ovl_En_Encount3/ovl_En_Encount3.reloc.o" + include "build/src/overlays/actors/ovl_En_Encount3/ovl_En_Encount3_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index b2d172cfc..15d495e49 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -5,6 +5,7 @@ */ #include "z_en_encount3.h" +#include "objects/object_big_fwall/object_big_fwall.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON) @@ -12,14 +13,15 @@ void EnEncount3_Init(Actor* thisx, PlayState* play); void EnEncount3_Destroy(Actor* thisx, PlayState* play); -void EnEncount3_Update(Actor* thisx, PlayState* play); +void EnEncount3_Update(Actor* thisx, PlayState* play2); void EnEncount3_Draw(Actor* thisx, PlayState* play); +void func_809AD058(EnEncount3* this); + void func_809AD084(EnEncount3* this, PlayState* play); void func_809AD194(EnEncount3* this, PlayState* play); void func_809AD1EC(EnEncount3* this, PlayState* play); -#if 0 ActorInit En_Encount3_InitVars = { ACTOR_EN_ENCOUNT3, ACTORCAT_ENEMY, @@ -32,22 +34,174 @@ ActorInit En_Encount3_InitVars = { (ActorFunc)EnEncount3_Draw, }; -#endif +s32 D_809AD810 = false; -extern UNK_TYPE D_060009A0; +void EnEncount3_Init(Actor* thisx, PlayState* play) { + EnEncount3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Init.s") + this->unk14A = ENCOUNT3_GET_SPAWN_INDEX(thisx); + this->childParams = ENCOUNT3_GET_PARAM_F80(thisx); + this->switchFlag = ENCOUNT3_GET_SWITCH_FLAG(thisx); + this->csId = this->actor.csId; + this->unk16C = ENCOUNT3_GET_ROTZ(thisx) * 10.0f; + if (this->unk16C < 10.0f) { + this->unk16C = 10.0f; + } else if (this->unk16C > 1000.0f) { + this->unk16C = 1000.0f; + } + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; + } + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->actor); + } + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + func_809AD058(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Destroy.s") +void EnEncount3_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD058.s") +void func_809AD058(EnEncount3* this) { + this->childActorId = ACTOR_EN_JSO; + this->unk150 = 1; + this->timer = 30; + this->actionFunc = func_809AD084; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD084.s") +void func_809AD084(EnEncount3* this, PlayState* play) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->actor); + return; + } + if (!(this->unk16C < this->actor.xzDistToPlayer) && (Player_GetMask(play) == PLAYER_MASK_GARO) && !D_809AD810) { + if (this->timer > 0) { + this->timer--; + } else { + this->child = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, this->childActorId, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, this->childParams); + if (this->child != NULL) { + this->unk14E++; + D_809AD810 = true; + this->actionFunc = func_809AD194; + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD194.s") +void func_809AD194(EnEncount3* this, PlayState* play) { + if (this->unk14E == 0) { + this->unk178 = 0.0f; + if (this->switchFlag >= 0) { + Flags_SetSwitch(play, this->switchFlag); + } + this->actionFunc = func_809AD1EC; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/func_809AD1EC.s") +void func_809AD1EC(EnEncount3* this, PlayState* play) { + if (this->unk174 < 0.002f) { + D_809AD810 = false; + Actor_Kill(&this->actor); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Update.s") +void EnEncount3_Update(Actor* thisx, PlayState* play2) { + EnEncount3* this = THIS; + f32 new_var; + PlayState* play = play2; + Player* player = GET_PLAYER(play); + f32 sp3C; + f32 sp38; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount3/EnEncount3_Draw.s") + this->actionFunc(this, play); + if (this->actionFunc == func_809AD194) { + new_var = this->unk16C * 0.52f; + if (new_var < this->actor.xzDistToPlayer) { + this->unk178 = ((this->unk16C * 0.03125f) * 0.001f) + 0.1f; + } else { + this->unk178 = 0.06f; + } + + if (((this->unk16C + 50.0f) + BREG(0)) < this->actor.xzDistToPlayer) { + if (this->actionFunc == func_809AD194) { + this->unk148 = 0; + this->unk178 = 0.0f; + D_809AD810 = false; + if (((this->child != NULL) && (this->child->update != NULL)) && (this->child->colChkInfo.health > 0)) { + Actor_Kill(this->child); + this->child = NULL; + } + func_809AD058(this); + } + } else if (this->unk16C < this->actor.xzDistToPlayer) { + s16 i; + + for (i = 0; i < PLAYER_BODYPART_MAX; i++) { + player->flameTimers[i] = Rand_S16Offset(0, 200); + } + player->isBurning = true; + + sp3C = this->actor.world.pos.x - player->actor.world.pos.x; + sp38 = this->actor.world.pos.z - player->actor.world.pos.z; + if (!Play_InCsMode(play)) { + func_800B8D50(play, &this->actor, 10.0f, Math_Atan2S_XY(sp38, sp3C), 0.0f, 1); + } + } + this->child->colChkInfo = this->child->colChkInfo; + } + + this->unk168 = this->unk16C; + this->unk168 /= 7666.0f; + if (this->actionFunc != func_809AD194) { + Math_ApproachZeroF(&this->unk170, 0.3f, 10.0f); + Math_ApproachZeroF(&this->unk160, 0.3f, 5.0f); + if (this->unk160 < 1.0f) { + play->unk_18880 = 0; + } + } else if (this->unk148 != 0) { + Math_ApproachF(&this->unk170, 255.0f, 0.4f, 10.0f); + Math_ApproachF(&this->unk160, 60.0f, 0.3f, 5.0f); + } + Math_ApproachF(&this->unk174, this->unk178, 0.3f, 0.03f); + + this->unk164 = this->unk160 / 60.0f; + if (this->unk164 != 0.0f) { + play->envCtx.lightSettings.fogNear = (960 - play->envCtx.unk_C4.fogNear) * this->unk164; + play->envCtx.lightSettings.fogColor[0] = (40.0f - play->envCtx.unk_C4.fogColor[0]) * this->unk164; + play->envCtx.lightSettings.fogColor[1] = (10.0f - play->envCtx.unk_C4.fogColor[1]) * this->unk164; + play->envCtx.lightSettings.fogColor[2] = (0.0f - play->envCtx.unk_C4.fogColor[2]) * this->unk164; + } +} + +void EnEncount3_Draw(Actor* thisx, PlayState* play) { + EnEncount3* this = THIS; + s32 pad; + + if (this->unk170 > 0.0f) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Push(); + + gDPPipeSync(POLY_XLU_DISP++); + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, (s32)play->gameplayFrames, 0, 0x20, 0x40, 1, + (s32)play->gameplayFrames * -2, (s32)play->gameplayFrames * -8, 0x20, 0x20)); + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 200, 0, (s8)this->unk170); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128); + + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y - 40.0f, this->actor.world.pos.z, + MTXMODE_NEW); + Matrix_Scale(this->unk168, this->unk174, this->unk168, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_big_fwall_DL_0009A0); + + Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); + } +} diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h index 9ebc87303..9e8bd01ad 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h @@ -7,10 +7,36 @@ struct EnEncount3; typedef void (*EnEncount3ActionFunc)(struct EnEncount3*, PlayState*); +#define ENCOUNT3_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF) +#define ENCOUNT3_GET_PARAM_F80(thisx) (((thisx)->params >> 7) & 0x1F) +#define ENCOUNT3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + +#define ENCOUNT3_GET_ROTZ(thisx) ((thisx)->world.rot.z) + typedef struct EnEncount3 { /* 0x000 */ Actor actor; /* 0x144 */ EnEncount3ActionFunc actionFunc; - /* 0x148 */ char unk_148[0x84]; + /* 0x148 */ u8 unk148; + /* 0x14A */ s16 unk14A; + /* 0x14C */ UNK_TYPE1 pad14C[0x2]; + /* 0x14E */ s16 unk14E; + /* 0x150 */ s16 unk150; + /* 0x152 */ s16 unk152; + /* 0x154 */ s16 childActorId; + /* 0x156 */ s16 unk156; + /* 0x158 */ s16 childParams; + /* 0x15A */ s16 csId; + /* 0x15C */ s16 switchFlag; + /* 0x15E */ s16 timer; + /* 0x160 */ f32 unk160; + /* 0x164 */ f32 unk164; + /* 0x168 */ f32 unk168; + /* 0x16C */ f32 unk16C; + /* 0x170 */ f32 unk170; + /* 0x174 */ f32 unk174; + /* 0x178 */ f32 unk178; + /* 0x17C */ Actor* child; + /* 0x180 */ UNK_TYPE1 unk180[0x4C]; } EnEncount3; // size = 0x1CC #endif // Z_EN_ENCOUNT3_H From f08a69a2cbded60798101e87797cc7a691ff5749 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 3 Oct 2023 18:13:22 -0300 Subject: [PATCH 43/74] `ovl_Bg_Dy_Yoseizo` and related docs (#1390) * Add ido setting to permuter * OK * Data imported & named, change spec * Some easy naming * Cleanup * More object stuff and enums * Document EnDyExtra * Document DemoGetitem * Document DemoEffect * Some work on Elforg * Elforg params macro, some more on Elfgrp * Defines for number of fairies * Tweak some flags wording * Label beam * Elfgrp: Name most of the stray fairy handling stuff * cleanup * fix typo * GreatFairyAnimation * name animations * BgDyYoseizo_TrainPlayer * Choose behaviour? * fix merge * format * self review * WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK * jenkins * review * Update src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c Co-authored-by: Derek Hensley * review * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c * review --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_dy_obj.xml | 165 ++-- assets/xml/objects/object_efc_tw.xml | 17 +- include/z64save.h | 8 +- spec | 3 +- src/code/z_actor.c | 30 +- src/code/z_en_item00.c | 13 +- src/code/z_sram_NES.c | 3 +- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c | 747 +++++++++++++++++- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h | 52 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 146 ++-- .../actors/ovl_Demo_Effect/z_demo_effect.h | 19 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 38 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.h | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 3 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 62 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.h | 11 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 10 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 479 ++++++----- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 31 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 33 +- .../actors/ovl_En_Elforg/z_en_elforg.h | 39 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 8 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 59 +- .../actors/ovl_player_actor/z_player.c | 2 +- .../ovl_kaleido_scope/z_kaleido_map.c | 2 +- tools/disasm/functions.txt | 80 +- tools/disasm/variables.txt | 26 +- tools/weekeventregconvert.py | 2 +- undefined_syms.txt | 8 - 31 files changed, 1467 insertions(+), 635 deletions(-) diff --git a/assets/xml/objects/object_dy_obj.xml b/assets/xml/objects/object_dy_obj.xml index 91b9a55fb..37fef4ab1 100644 --- a/assets/xml/objects/object_dy_obj.xml +++ b/assets/xml/objects/object_dy_obj.xml @@ -1,51 +1,62 @@  + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -55,42 +66,46 @@ + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_efc_tw.xml b/assets/xml/objects/object_efc_tw.xml index a7ca81b55..c28ae3c81 100644 --- a/assets/xml/objects/object_efc_tw.xml +++ b/assets/xml/objects/object_efc_tw.xml @@ -1,13 +1,16 @@  - - + + + - - - - - + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 1db5a566d..7d1bc781d 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -650,11 +650,14 @@ typedef enum { #define WEEKEVENTREG_CLOCK_TOWER_OPENED PACK_WEEKEVENTREG_FLAG(8, 0x40) #define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80) + +// This 5 flags are managed in a special way by EnElfgrp #define WEEKEVENTREG_09_01 PACK_WEEKEVENTREG_FLAG(9, 0x01) #define WEEKEVENTREG_09_02 PACK_WEEKEVENTREG_FLAG(9, 0x02) #define WEEKEVENTREG_09_04 PACK_WEEKEVENTREG_FLAG(9, 0x04) #define WEEKEVENTREG_09_08 PACK_WEEKEVENTREG_FLAG(9, 0x08) #define WEEKEVENTREG_09_10 PACK_WEEKEVENTREG_FLAG(9, 0x10) + #define WEEKEVENTREG_09_20 PACK_WEEKEVENTREG_FLAG(9, 0x20) #define WEEKEVENTREG_09_40 PACK_WEEKEVENTREG_FLAG(9, 0x40) #define WEEKEVENTREG_09_80 PACK_WEEKEVENTREG_FLAG(9, 0x80) @@ -795,7 +798,7 @@ typedef enum { #define WEEKEVENTREG_22_40 PACK_WEEKEVENTREG_FLAG(22, 0x40) #define WEEKEVENTREG_22_80 PACK_WEEKEVENTREG_FLAG(22, 0x80) #define WEEKEVENTREG_23_01 PACK_WEEKEVENTREG_FLAG(23, 0x01) -#define WEEKEVENTREG_23_02 PACK_WEEKEVENTREG_FLAG(23, 0x02) +#define WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK PACK_WEEKEVENTREG_FLAG(23, 0x02) #define WEEKEVENTREG_23_04 PACK_WEEKEVENTREG_FLAG(23, 0x04) #define WEEKEVENTREG_23_08 PACK_WEEKEVENTREG_FLAG(23, 0x08) #define WEEKEVENTREG_23_10 PACK_WEEKEVENTREG_FLAG(23, 0x10) @@ -1631,6 +1634,9 @@ typedef enum { /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple } DungeonIndex; +#define STRAY_FAIRY_TOTAL 25 // total number of stray fairies, including those already in the Great Fairy Fountain +#define STRAY_FAIRY_SCATTERED_TOTAL 15 // original number of stray fairies in one dungeon area + void Sram_ActivateOwl(u8 owlId); void Sram_ClearFlagsAtDawnOfTheFirstDay(void); void Sram_SaveEndOfCycle(struct PlayState* play); diff --git a/spec b/spec index eb09f058f..d7d51ec20 100644 --- a/spec +++ b/spec @@ -2365,8 +2365,7 @@ beginseg name "ovl_Bg_Dy_Yoseizo" compress include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.o" - include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.data.o" - include "build/data/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Dy_Yoseizo/ovl_Bg_Dy_Yoseizo_reloc.o" endseg beginseg diff --git a/src/code/z_actor.c b/src/code/z_actor.c index a69dada41..10f782e25 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -725,7 +725,7 @@ void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor, /* Start of Flags section */ /** - * Tests if current scene switch flag is set. + * Tests if a current scene switch flag is set. */ s32 Flags_GetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -735,7 +735,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { } /** - * Sets current scene switch flag. + * Sets a current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -744,7 +744,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) { } /** - * Unsets current scene switch flag. + * Unsets a current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { if ((flag >= 0) && (flag < 0x80)) { @@ -753,77 +753,77 @@ void Flags_UnsetSwitch(PlayState* play, s32 flag) { } /** - * Tests if current scene chest flag is set. + * Tests if a current scene chest flag is set. */ s32 Flags_GetTreasure(PlayState* play, s32 flag) { return play->actorCtx.sceneFlags.chest & (1 << flag); } /** - * Sets current scene chest flag. + * Sets a current scene chest flag. */ void Flags_SetTreasure(PlayState* play, s32 flag) { play->actorCtx.sceneFlags.chest |= (1 << flag); } /** - * Overrides the all the chest flags. + * Overrides all the current scene chest flags. */ void Flags_SetAllTreasure(PlayState* play, s32 flag) { play->actorCtx.sceneFlags.chest = flag; } /** - * Returns all the chest flags. + * Returns all the current scene chest flags. */ s32 Flags_GetAllTreasure(PlayState* play) { return play->actorCtx.sceneFlags.chest; } /** - * Tests if current scene clear flag is set. + * Tests if a current scene clear flag is set. */ s32 Flags_GetClear(PlayState* play, s32 roomNumber) { return play->actorCtx.sceneFlags.clearedRoom & (1 << roomNumber); } /** - * Sets current scene clear flag. + * Sets a current scene clear flag. */ void Flags_SetClear(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoom |= (1 << roomNumber); } /** - * Unsets current scene clear flag. + * Unsets a current scene clear flag. */ void Flags_UnsetClear(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoom &= ~(1 << roomNumber); } /** - * Tests if current scene temp clear flag is set. + * Tests if a current scene temp clear flag is set. */ s32 Flags_GetClearTemp(PlayState* play, s32 roomNumber) { return play->actorCtx.sceneFlags.clearedRoomTemp & (1 << roomNumber); } /** - * Sets current scene temp clear flag. + * Sets a current scene temp clear flag. */ void Flags_SetClearTemp(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoomTemp |= (1 << roomNumber); } /** - * Unsets current scene temp clear flag. + * Unsets a current scene temp clear flag. */ void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) { play->actorCtx.sceneFlags.clearedRoomTemp &= ~(1 << roomNumber); } /** - * Tests if current scene collectible flag is set. + * Tests if a current scene collectible flag is set. */ s32 Flags_GetCollectible(PlayState* play, s32 flag) { if ((flag > 0) && (flag < 0x80)) { @@ -833,7 +833,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) { } /** - * Sets current scene collectible flag. + * Sets a current scene collectible flag. */ void Flags_SetCollectible(PlayState* play, s32 flag) { if ((flag > 0) && (flag < 0x80)) { diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 55ab1a708..f9f5df5a8 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -1,4 +1,5 @@ #include "global.h" +#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_gi_hearts/object_gi_hearts.h" #include "overlays/actors/ovl_En_Elf/z_en_elf.h" @@ -935,9 +936,9 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); } } else { - spawnedActor = - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, - 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE)); + spawnedActor = Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, + STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE)); if (param20000 == 0) { if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); @@ -993,9 +994,9 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8)); } else { - spawnedActor = - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, - 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE)); + spawnedActor = Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, + STRAY_FAIRY_PARAMS((param7F00 >> 8) & 0x7F, STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_COLLECTIBLE)); } if (Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F) == 0) { SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 8d382e5db..c5fe03475 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -97,7 +97,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve /* 20 */ 0, /* 21 */ 0, /* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80), - /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80), + /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80), /* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80), /* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01), /* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40), diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c index 332e4e543..404530342 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c @@ -5,6 +5,7 @@ */ #include "z_bg_dy_yoseizo.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) @@ -13,19 +14,17 @@ void BgDyYoseizo_Init(Actor* thisx, PlayState* play); void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play); void BgDyYoseizo_Update(Actor* thisx, PlayState* play); +void BgDyYoseizo_Draw(Actor* thisx, PlayState* play); -void func_80A0AE1C(BgDyYoseizo* this, PlayState* play); -void func_80A0B078(BgDyYoseizo* this, PlayState* play); void func_80A0B184(BgDyYoseizo* this, PlayState* play); -void func_80A0B290(BgDyYoseizo* this, PlayState* play); -void func_80A0B35C(BgDyYoseizo* this, PlayState* play); -void func_80A0B500(BgDyYoseizo* this, PlayState* play); -void func_80A0B5F0(BgDyYoseizo* this, PlayState* play); -void func_80A0B75C(BgDyYoseizo* this, PlayState* play); -void func_80A0B8CC(BgDyYoseizo* this, PlayState* play); void func_80A0BB08(BgDyYoseizo* this, PlayState* play); -#if 0 +/* Effects functions */ +void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel, + Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type); +void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play); +void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play); + ActorInit Bg_Dy_Yoseizo_InitVars = { ACTOR_BG_DY_YOSEIZO, ACTORCAT_PROP, @@ -38,56 +37,730 @@ ActorInit Bg_Dy_Yoseizo_InitVars = { (ActorFunc)NULL, }; -#endif +typedef enum GreatFairyAnimation { + /* 0 */ GREATFAIRY_ANIM_START_GIVING_UPGRADE, + /* 1 */ GREATFAIRY_ANIM_GIVING_UPGRADE, + /* 2 */ GREATFAIRY_ANIM_SPIN_LAY_DOWN, + /* 3 */ GREATFAIRY_ANIM_LAY_DOWN_TRANSITION, + /* 4 */ GREATFAIRY_ANIM_LAYING_DOWN, + /* 5 */ GREATFAIRY_ANIM_SHOWING_ITEM, + /* 6 */ GREATFAIRY_ANIM_ARMS_FOLDED, + /* 7 */ GREATFAIRY_ANIM_CLAPPING, + /* 8 */ GREATFAIRY_ANIM_TEACH_SPIN_ATTACK, + /* 9 */ GREATFAIRY_ANIM_MAX +} GreatFairyAnimation; -extern UNK_TYPE D_06008090; -extern UNK_TYPE D_0600D228; -extern UNK_TYPE D_0601C6F4; +static AnimationHeader* sAnimations[GREATFAIRY_ANIM_MAX] = { + &gGreatFairyStartGivingUpgradeAnim, // GREATFAIRY_ANIM_START_GIVING_UPGRADE + &gGreatFairyGivingUpgradeAnim, // GREATFAIRY_ANIM_GIVING_UPGRADE + &gGreatFairySpinLayDownAnim, // GREATFAIRY_ANIM_SPIN_LAY_DOWN + &gGreatFairyLayDownTransitionAnim, // GREATFAIRY_ANIM_LAY_DOWN_TRANSITION + &gGreatFairyLayingDownAnim, // GREATFAIRY_ANIM_LAYING_DOWN + &gGreatFairyShowingItemAnim, // GREATFAIRY_ANIM_SHOWING_ITEM + &gGreatFairyArmsFoldedAnim, // GREATFAIRY_ANIM_ARMS_FOLDED + &gGreatFairyClappingAnim, // GREATFAIRY_ANIM_CLAPPING + &gGreatFairyTeachSpinAttackAnim, // GREATFAIRY_ANIM_TEACH_SPIN_ATTACK +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Init.s") +void BgDyYoseizo_Init(Actor* thisx, PlayState* play) { + BgDyYoseizo* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Destroy.s") + this->unk2EC = this->actor.world.pos.y + 40.0f; + this->actor.focus.pos = this->actor.world.pos; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A96C.s") + SkelAnime_InitFlex(play, &this->skelAnime, &gGreatFairySkel, &gGreatFairyShowingItemAnim, this->jointTable, + this->morphTable, GREAT_FAIRY_LIMB_MAX); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0A9E4.s") + this->actionFunc = func_80A0BB08; + Actor_SetScale(&this->actor, 0.0f); + this->eyeIndex = 0; + this->mouthIndex = 0; + this->blinkTimer = 0; + this->unk2F8 = 0; + GREAT_FAIRY_ROTZ(&this->actor) = 1; + this->unk302 = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AA40.s") +void BgDyYoseizo_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AD50.s") +// Has no visible effect since no segment is set for manually-controllable eye textures +void BgDyYoseizo_UpdateEyes(BgDyYoseizo* this) { + if (this->blinkTimer != 0) { + this->blinkTimer--; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AE1C.s") + if (this->blinkTimer == 0) { + this->eyeIndex++; + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; + this->blinkTimer = (s32)Rand_ZeroFloat(60.0f) + 20; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0AFDC.s") +void BgDyYoseizo_Bob(BgDyYoseizo* this, PlayState* play) { + this->actor.shape.yOffset = Math_SinS(play->gameplayFrames * 1000) * 15.0f; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B078.s") +typedef enum GreatFairyEffectTrajectory { + /* 0 */ GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, // Dispersing particles, in the Great Fairy's signature colour. + /* 2 */ GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT = 2, // As above, but initially move 10 times faster. + /* 5 */ GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER = 5 // Similar to OoT's healing effect, fixed colour. +} GreatFairyEffectTrajectory; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B184.s") +/** + * Spawn particle effects; see `GreatFairyEffectTrajectory` enum for details + * + * @param trajectoryType use the `GreatFairyEffectTrajectory` enum. + * @param count number to spawn. + */ +void BgDyYoseizo_SpawnEffects(BgDyYoseizo* this, s16 trajectoryType, s32 count) { + static Color_RGB8 sEffectPrimColors[] = { + { 255, 235, 220 }, // Magic + { 255, 220, 220 }, // Power + { 220, 255, 220 }, // Wisdom + { 220, 220, 255 }, // Courage + { 255, 255, 200 }, // Kindness + { 255, 255, 170 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER + }; + static Color_RGB8 sEffectEnvColors[] = { + { 255, 150, 0 }, // Magic + { 255, 0, 0 }, // Power + { 0, 255, 0 }, // Wisdom + { 0, 0, 255 }, // Courage + { 255, 255, 0 }, // Kindness + { 255, 100, 255 }, // GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER + }; + Vec3f velocity; + Vec3f accel; + Vec3f pos; + Color_RGB8 primColor; + Color_RGB8 envColor; + f32 spawnHeightVariation; + f32 scale; + s32 effectType; + s32 life; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B290.s") + if (this->actor.scale.y < 0.01f) { + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B35C.s") + spawnHeightVariation = this->actor.scale.y * 3500.0f; + accel.x = Rand_ZeroOne() - 0.5f; + accel.y = Rand_ZeroOne() - 0.5f; + accel.z = Rand_ZeroOne() - 0.5f; + velocity.x = accel.x * 10.0f; + velocity.y = accel.y * 10.0f; + velocity.z = accel.z * 10.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B500.s") + for (i = 0; i < count; i++) { + switch (trajectoryType) { + case GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT: + scale = 1.0f; + life = 90; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B5F0.s") + velocity.x = accel.x * 100.0f; + velocity.y = accel.y * 100.0f; + velocity.z = accel.z * 100.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B75C.s") + effectType = GREAT_FAIRY_GET_TYPE(&this->actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B834.s") + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f); + pos.z = this->actor.world.pos.z + 30.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0B8CC.s") + case GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT: + scale = 1.0f; + life = 90; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BB08.s") + effectType = GREAT_FAIRY_GET_TYPE(&this->actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/BgDyYoseizo_Update.s") + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.5f); + pos.z = this->actor.world.pos.z + 30.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BCD8.s") + default: // all become convergent type + scale = 0.2f; + life = 50; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BD40.s") + effectType = GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BE60.s") + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + spawnHeightVariation + 50.0f + + (Rand_ZeroOne() - 0.5f) * (spawnHeightVariation * 0.1f); + pos.z = this->actor.world.pos.z + 30.0f; + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0BF70.s") + primColor.r = sEffectPrimColors[effectType].r; + primColor.g = sEffectPrimColors[effectType].g; + primColor.b = sEffectPrimColors[effectType].b; + envColor.r = sEffectEnvColors[effectType].r; + envColor.g = sEffectEnvColors[effectType].g; + envColor.b = sEffectEnvColors[effectType].b; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dy_Yoseizo/func_80A0C270.s") + BgDyYoseizo_SpawnEffect(this, &pos, &velocity, &accel, &primColor, &envColor, scale, life, effectType); + } +} + +void func_80A0AD50(BgDyYoseizo* this) { + f32 scale = this->actor.scale.x; + f32 heightTarget = this->actor.home.pos.y + 40.0f; + + Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f); + Math_ApproachF(&scale, 0.035f, this->unk2F4, 0.005f); + Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f); + Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f); + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2); + Actor_SetScale(&this->actor, scale); +} + +void func_80A0AE1C(BgDyYoseizo* this, PlayState* play) { + f32 scale = this->actor.scale.x; + f32 heightTarget = this->actor.home.pos.y; + + if (scale < 0.003f) { + this->actionFunc = func_80A0BB08; + Actor_SetScale(&this->actor, 0.0f); + this->unk2F0 = 0.0f; + this->unk2F4 = 0.0f; + this->unk2F8 = 0; + + if (GREAT_FAIRY_GET_TYPE(&this->actor) <= GREAT_FAIRY_TYPE_COURAGE) { + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, + this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0, + GREAT_FAIRY_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE); + } else { + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, + this->actor.world.pos.y + 20.0f, this->actor.world.pos.z, 0, 0, 0, + DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW); + } + Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); + } else { + Math_ApproachF(&this->actor.world.pos.y, heightTarget, this->unk2F0, 100.0f); + Math_ApproachZeroF(&scale, this->unk2F4, 0.005f); + Math_ApproachF(&this->unk2F0, 0.8f, 0.1f, 0.02f); + Math_ApproachF(&this->unk2F4, 0.2f, 0.03f, 0.05f); + + this->actor.shape.rot.y += this->unk2F8; + if (this->unk2F8 < 0x1770) { + this->unk2F8 += 0x12C; + } + + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_RADIANT, 2); + Actor_SetScale(&this->actor, scale); + } +} + +void func_80A0AFDC(BgDyYoseizo* this) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 0.0f, 46.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f); + this->actionFunc = func_80A0AE1C; + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0); + Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_VANISH); + this->unk2F8 = 0; + this->actor.velocity.y = 0.0f; + this->unk2F0 = 0.0f; + this->unk2F4 = 0.0f; + this->actor.shape.yOffset = 0.0f; +} + +void func_80A0B078(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B184; + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } +} + +void func_80A0B184(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 8)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SHOWING_ITEM]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B078; + } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } +} + +void func_80A0B290(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, -10.0f); + this->actionFunc = func_80A0B184; + this->mouthIndex = 0; + } +} + +void func_80A0B35C(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + SkelAnime_Update(&this->skelAnime); + + if (this->timer == 60) { + if (!Flags_GetSwitch(play, GREAT_FAIRY_GET_SWITCHFLAG(&this->actor))) { + switch (GREAT_FAIRY_GET_TYPE(&this->actor)) { + case GREAT_FAIRY_TYPE_MAGIC: + if (gSaveContext.save.saveInfo.playerData.isMagicAcquired != true) { + gSaveContext.save.saveInfo.playerData.isMagicAcquired = true; + gSaveContext.magicFillTarget = MAGIC_NORMAL_METER; + } + break; + + case GREAT_FAIRY_TYPE_WISDOM: + if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired != true) { + gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = true; + gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; + } + break; + + case GREAT_FAIRY_TYPE_COURAGE: + if (gSaveContext.save.saveInfo.playerData.doubleDefense != true) { + gSaveContext.save.saveInfo.playerData.doubleDefense = true; + } + break; + + default: + break; + } + } + Interface_SetHudVisibility(9); + } + + if ((this->timer < 50) && (GREAT_FAIRY_GET_TYPE(&this->actor) == GREAT_FAIRY_TYPE_COURAGE)) { + if (gSaveContext.save.saveInfo.inventory.defenseHearts < 20) { + gSaveContext.save.saveInfo.inventory.defenseHearts++; + } + } + + if (this->timer == 50) { + gSaveContext.healthAccumulator = 0x140; + Magic_Add(play, MAGIC_FILL_TO_CAPACITY); + } + + if (this->timer == 0) { + this->beam->trigger = true; + this->actionFunc = func_80A0B290; + } +} + +void func_80A0B500(BgDyYoseizo* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + BgDyYoseizo_Bob(this, play); + + if (SkelAnime_Update(&this->skelAnime)) { + Vec3f pos; + + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_GIVING_UPGRADE]), ANIMMODE_LOOP, 0.0f); + this->actionFunc = func_80A0B35C; + pos.x = player->actor.world.pos.x; + pos.y = player->actor.world.pos.y + 200.0f; + pos.z = player->actor.world.pos.z; + this->beam = (EnDyExtra*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_DY_EXTRA, pos.x, + pos.y, pos.z, 0, 0, 0, GREAT_FAIRY_GET_TYPE(&this->actor)); + this->timer = 120; + } +} + +void func_80A0B5F0(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizo_Bob(this, play); + + if (SkelAnime_Update(&this->skelAnime)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]), ANIMMODE_LOOP, 0.0f); + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 5)) { + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_START_GIVING_UPGRADE]), ANIMMODE_ONCE, + -5.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0); + this->mouthIndex = 1; + this->eyeIndex = 0; + this->actionFunc = func_80A0B500; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 6)) { + func_80A0AFDC(this); + } + + BgDyYoseizo_UpdateEyes(this); +} + +void func_80A0B75C(BgDyYoseizo* this, PlayState* play) { + func_80A0AD50(this); + SkelAnime_Update(&this->skelAnime); + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 4)) { + this->actor.shape.rot.y = 0; + this->actionFunc = func_80A0B5F0; + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION], 1.0f, 2.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_LAY_DOWN_TRANSITION]), ANIMMODE_ONCE, 0.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_SMILE_0); + this->unk2F8 = 0; + } +} + +void func_80A0B834(BgDyYoseizo* this) { + this->actor.draw = BgDyYoseizo_Draw; + Animation_Change(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[GREATFAIRY_ANIM_SPIN_LAY_DOWN]), ANIMMODE_ONCE, 0.0f); + Actor_PlaySfx(&this->actor, NA_SE_VO_FR_LAUGH_0); + Actor_PlaySfx(&this->actor, NA_SE_EV_GREAT_FAIRY_APPEAR); + BgDyYoseizo_SpawnEffects(this, GREAT_FAIRY_EFFECT_TRAJECTORY_FAST_RADIANT, 30); +} + +void BgDyYoseizo_TrainPlayer(BgDyYoseizo* this, PlayState* play) { + s16 csId; + s32 pad; + Player* player = GET_PLAYER(play); + + SkelAnime_Update(&this->skelAnime); + + csId = 0; + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) { + csId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id; + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)); + } else { + if (GREAT_FAIRY_ROTZ(&this->actor) != 0) { + this->actor.home.pos.x = player->actor.world.pos.x; + this->actor.home.pos.z = player->actor.world.pos.z; + GREAT_FAIRY_ROTZ(&this->actor) = 0; + } else { + player->actor.world.pos.x = this->actor.home.pos.x; + player->actor.world.pos.z = this->actor.home.pos.z; + } + + if (this->unk302 & 1) { + if (this->timer == 0) { + if (CutsceneManager_IsNext(this->actor.csId)) { + CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); + this->unk302 &= ~1; + } else { + CutsceneManager_Queue(this->actor.csId); + } + } + } else if (!(this->unk302 & 2) && (player->meleeWeaponState != 0)) { + if (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) { + if (player->unk_B08 >= 0.85f) { + this->unk302 |= 1; + this->unk302 |= 2; + if (play->msgCtx.currentTextId == 0x59A) { + Message_CloseTextbox(play); + } + this->timer = 20; + return; + } + } + + if (play->msgCtx.currentTextId != 0x59A) { + // "Hold B and then release" + Message_StartTextbox(play, 0x59A, &this->actor); + } + } + } + + if (csId != this->csId) { + switch (csId) { + case 9: + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]); + break; + + case 10: + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_CLAPPING]); + break; + + case 11: + Animation_PlayOnce(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_TEACH_SPIN_ATTACK]); + break; + + default: + break; + } + + this->csId = csId; + } +} + +// Choose behaviour? +void func_80A0BB08(BgDyYoseizo* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 2)) { + func_80A0B834(this); + this->actionFunc = func_80A0B75C; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 7)) { + this->actor.draw = BgDyYoseizo_Draw; + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_LAYING_DOWN]); + this->actionFunc = func_80A0B184; + this->mouthIndex = 0; + this->actor.world.pos.y = this->actor.home.pos.y + 40.0f; + Actor_SetScale(&this->actor, 0.035f); + this->unk2F8 = 0; + } + + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103) && + (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_103)]->id == 9)) { + Actor_SetScale(&this->actor, 0.01f); + Animation_PlayLoop(&this->skelAnime, sAnimations[GREATFAIRY_ANIM_ARMS_FOLDED]); + this->csId = 9; + this->actionFunc = BgDyYoseizo_TrainPlayer; + this->actor.draw = BgDyYoseizo_Draw; + } +} + +void BgDyYoseizo_Update(Actor* thisx, PlayState* play) { + BgDyYoseizo* this = THIS; + + this->actionFunc(this, play); + Actor_MoveWithGravity(&this->actor); + + DECR(this->timer); + + BgDyYoseizo_UpdateEffects(this, play); +} + +s32 BgDyYoseizo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + BgDyYoseizo* this = THIS; + + if (limbIndex == GREAT_FAIRY_LIMB_TORSO) { + rot->x += this->torsoRot.y; + } + + if (limbIndex == GREAT_FAIRY_LIMB_HEAD) { + rot->x += this->headRot.y; + rot->z += this->headRot.z; + } + + return false; +} + +/* Colour and shape of eyebrows, hair colour. */ +typedef enum GreatFairyAppearance { + /* 0 */ GREAT_FAIRY_APPEARANCE_MAGIC, // Orange + /* 1 */ GREAT_FAIRY_APPEARANCE_WISDOM, // Green + /* 2 */ GREAT_FAIRY_APPEARANCE_POWER, // Pink + /* 3 */ GREAT_FAIRY_APPEARANCE_COURAGE, // Purple + /* 4 */ GREAT_FAIRY_APPEARANCE_KINDNESS // Yellow +} GreatFairyAppearance; + +void BgDyYoseizo_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sMouthTextures[] = { + gGreatFairyMouthClosedTex, + gGreatFairyMouthOpenTex, + }; + BgDyYoseizo* this = THIS; + GreatFairyAppearance appearance = GREAT_FAIRY_APPEARANCE_MAGIC; + + // The differing eyes and hair colours + switch (GREAT_FAIRY_GET_TYPE(&this->actor)) { + case GREAT_FAIRY_TYPE_POWER: + appearance = GREAT_FAIRY_APPEARANCE_POWER; + break; + + case GREAT_FAIRY_TYPE_WISDOM: + appearance = GREAT_FAIRY_APPEARANCE_WISDOM; + break; + + case GREAT_FAIRY_TYPE_COURAGE: + case GREAT_FAIRY_TYPE_KINDNESS: + appearance = GREAT_FAIRY_GET_TYPE(&this->actor); + break; + + default: // GREAT_FAIRY_APPEARANCE_MAGIC + break; + } + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + // Set eyes and hair colour, not actually animated. + AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(gGreatFairyAppearenceTexAnim), appearance); + + // Draw mouth + { + Gfx* gfx = POLY_OPA_DISP; + s16 index = this->mouthIndex; + TexturePtr mouthTex = Lib_SegmentedToVirtual(sMouthTextures[index]); + + gSPSegment(&gfx[0], 0x09, mouthTex); + POLY_OPA_DISP = &gfx[1]; + } + + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + BgDyYoseizo_OverrideLimbDraw, NULL, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); + + BgDyYoseizo_DrawEffects(this, play); +} + +/* Effects functions */ + +void BgDyYoseizo_SpawnEffect(BgDyYoseizo* this, Vec3f* initPos, Vec3f* initVelocity, Vec3f* accel, + Color_RGB8* primColor, Color_RGB8* envColor, f32 scale, s16 life, s16 type) { + BgDyYoseizoEffect* effect = this->effects; + s16 i; + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (!effect->alive) { + effect->alive = true; + effect->pos = *initPos; + effect->velocity = *initVelocity; + effect->accel = *accel; + effect->primColor = *primColor; + effect->alpha = 0; + effect->envColor = *envColor; + effect->scale = scale; + effect->timer = life; + effect->type = type; + effect->pitch = 0; + effect->yaw = TRUNCF_BINANG(Rand_CenteredFloat(30000.0f)); + effect->roll = 0; + return; + } + } +} + +void BgDyYoseizo_UpdateEffects(BgDyYoseizo* this, PlayState* play) { + BgDyYoseizoEffect* effect = this->effects; + Player* player = GET_PLAYER(play); + Vec3f sp94; + Vec3f sp88; + s32 pad[2]; + f32 targetPitch; + f32 targetYaw; + f32 floatAngle; + s16 i = 0; + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (effect->alive) { + effect->roll += 3000; + + if (effect->type < GREAT_FAIRY_EFFECT_TRAJECTORY_CONVERGE_ON_PLAYER) { + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; + } else { + Actor_PlaySfx(&this->actor, NA_SE_EV_HEALING - SFX_FLAG); + + sp94 = player->actor.world.pos; + sp94.y = player->actor.world.pos.y - 150.0f; + sp94.z = player->actor.world.pos.z - 50.0f; + + targetPitch = Math_Vec3f_Pitch(&effect->pos, &sp94); + targetYaw = Math_Vec3f_Yaw(&effect->pos, &sp94); + + floatAngle = effect->pitch; + Math_ApproachF(&floatAngle, targetPitch, 0.9f, 5000.0f); + effect->pitch = floatAngle; + + floatAngle = effect->yaw; + Math_ApproachF(&floatAngle, targetYaw, 0.9f, 5000.0f); + effect->yaw = floatAngle; + + Matrix_Push(); + Matrix_RotateYS(effect->yaw, MTXMODE_NEW); + Matrix_RotateXS(effect->pitch, MTXMODE_APPLY); + + sp94.x = sp94.y = sp94.z = 3.0f; + + Matrix_MultVec3f(&sp94, &sp88); + Matrix_Pop(); + effect->pos.x += sp88.x; + effect->pos.y += sp88.y; + effect->pos.z += sp88.z; + } + } + + // fade up, fade down, vanish and reset + if (effect->timer != 0) { + effect->timer--; + effect->alpha += 30; + + if (effect->alpha > 255) { + effect->alpha = 255; + } + } else { + effect->alpha -= 30; + + if (effect->alpha <= 0) { + effect->alpha = 0; + effect->alive = false; + } + } + } +} + +void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play) { + static f32 sStretchFactors[] = { + 1.0f, 1.1f, 1.15f, 1.1f, 1.0f, 0.9f, 0.85f, 0.9f, + }; + GraphicsContext* gfxCtx = play->state.gfxCtx; + u8 setup = 0; + BgDyYoseizoEffect* effect = this->effects; + f32 stretchFactor = sStretchFactors[play->gameplayFrames % ARRAY_COUNT(sStretchFactors)]; + s16 i; + + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + for (i = 0; i < BG_DY_YOSEIZO_EFFECT_COUNT; i++, effect++) { + if (effect->alive == true) { + if (setup == 0) { + gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleSetupDL); + gDPPipeSync(POLY_XLU_DISP++); + setup++; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, effect->primColor.r, effect->primColor.g, effect->primColor.b, + effect->alpha); + gDPSetEnvColor(POLY_XLU_DISP++, effect->envColor.r, effect->envColor.g, effect->envColor.b, 0); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + + Matrix_Scale(effect->scale, effect->scale * stretchFactor, 1.0f, MTXMODE_APPLY); + Matrix_RotateZS(effect->roll, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gGreatFairyParticleDL); + } + } + + CLOSE_DISPS(gfxCtx); +} diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h index bd06cdb38..4aaf67e77 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h @@ -2,15 +2,65 @@ #define Z_BG_DY_YOSEIZO_H #include "global.h" +#include "overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h" +#include "objects/object_dy_obj/object_dy_obj.h" struct BgDyYoseizo; typedef void (*BgDyYoseizoActionFunc)(struct BgDyYoseizo*, PlayState*); +#define GREAT_FAIRY_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define GREAT_FAIRY_GET_TYPE(thisx) ((thisx)->params & 0xF) +#define GREAT_FAIRY_ROTZ(thisx) ((thisx)->home.rot.z) + +typedef enum GreatFairyType { + /* 0 */ GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ GREAT_FAIRY_TYPE_POWER, + /* 2 */ GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ GREAT_FAIRY_TYPE_KINDNESS +} GreatFairyType; + +#define BG_DY_YOSEIZO_EFFECT_COUNT 200 + +typedef struct BgDyYoseizoEffect { + /* 0x00 */ u8 alive; // drawn if 1, respawn if 0 + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Color_RGB8 primColor; + /* 0x2B */ Color_RGB8 envColor; + /* 0x2E */ s16 alpha; + /* 0x30 */ f32 scale; + /* 0x34 */ s16 timer; // lifetime + /* 0x36 */ s16 type; // 0 is general radiance, else is directed towards Player + /* 0x38 */ s16 pitch; + /* 0x3A */ s16 yaw; + /* 0x3C */ s16 roll; // all three are f32 in OoT +} BgDyYoseizoEffect; // size = 0x40 + typedef struct BgDyYoseizo { /* 0x0000 */ Actor actor; /* 0x0144 */ BgDyYoseizoActionFunc actionFunc; - /* 0x0148 */ char unk_148[0x33BC]; + /* 0x0148 */ SkelAnime skelAnime; + /* 0x018C */ Vec3s jointTable[GREAT_FAIRY_LIMB_MAX]; + /* 0x0234 */ Vec3s morphTable[GREAT_FAIRY_LIMB_MAX]; + /* 0x02DC */ Vec3s headRot; + /* 0x02DC */ Vec3s torsoRot; + /* 0x02E8 */ EnDyExtra* beam; + /* 0x02EC */ f32 unk2EC; // unused + /* 0x02F0 */ f32 unk2F0; + /* 0x02F4 */ f32 unk2F4; + /* 0x02F8 */ union { + s16 unk2F8; + s16 csId; // used on BgDyYoseizo_TrainPlayer + }; + /* 0x02FA */ s16 eyeIndex; + /* 0x02FC */ s16 mouthIndex; + /* 0x02FE */ s16 blinkTimer; + /* 0x0300 */ s16 timer; + /* 0x0302 */ u16 unk302; + /* 0x0304 */ BgDyYoseizoEffect effects[BG_DY_YOSEIZO_EFFECT_COUNT]; } BgDyYoseizo; // size = 0x3504 #endif // Z_BG_DY_YOSEIZO_H diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index ca472ccc3..ff88a61db 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -16,14 +16,13 @@ void DemoEffect_Init(Actor* thisx, PlayState* play); void DemoEffect_Destroy(Actor* thisx, PlayState* play); void DemoEffect_Update(Actor* thisx, PlayState* play); -void func_808CD940(DemoEffect* this, PlayState* play); -void func_808CD998(DemoEffect* this, PlayState* play); -void func_808CDBDC(DemoEffect* this, PlayState* play); -void func_808CDCEC(DemoEffect* this, PlayState* play); -void func_808CDD70(DemoEffect* this, PlayState* play); -void func_808CDDE0(DemoEffect* this, PlayState* play); -void func_808CDFF8(Actor* thisx, PlayState* play); -void func_808CE078(Actor* thisx, PlayState* play2); +void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play); +void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play); +void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play); +void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play); +void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play); +void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play); +void DemoEffect_DrawLight(Actor* thisx, PlayState* play2); ActorInit Demo_Effect_InitVars = { ACTOR_DEMO_EFFECT, @@ -47,8 +46,12 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); s32 objectIndex; s32 pad2; - Color_RGB8 colors[] = { - { 200, 200, 0 }, { 255, 40, 100 }, { 50, 255, 0 }, { 0, 0, 255 }, { 255, 255, 80 }, + Color_RGB8 lightColors[] = { + { 200, 200, 0 }, // Yellow + { 255, 40, 100 }, // Pink + { 50, 255, 0 }, // Light green + { 0, 0, 255 }, // Blue + { 255, 255, 80 }, // Light Yellow }; if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) { @@ -66,14 +69,14 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.2f); switch (type) { - case DEMO_EFFECT_TYPE_0: - case DEMO_EFFECT_TYPE_1: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: this->actor.flags |= ACTOR_FLAG_2000000; - - case DEMO_EFFECT_TYPE_2: - case DEMO_EFFECT_TYPE_3: - this->initDrawFunc = func_808CDFF8; - this->initActionFunc = func_808CD998; + // FALLTHROUGH + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: + this->initDrawFunc = DemoEffect_DrawTimewarp; + this->initActionFunc = DemoEffect_SetupTimewarp; this->envXluColor[0] = 0; this->envXluColor[1] = 100; this->envXluColor[2] = 255; @@ -81,17 +84,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { this->timer = 0; break; - case DEMO_EFFECT_TYPE_4: - case DEMO_EFFECT_TYPE_5: - case DEMO_EFFECT_TYPE_6: - case DEMO_EFFECT_TYPE_7: - case DEMO_EFFECT_TYPE_8: - this->envXluColor[0] = colors[type - 4].r; - this->envXluColor[1] = colors[type - 4].g; - this->envXluColor[2] = colors[type - 4].b; + case DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW: + case DEMO_EFFECT_TYPE_LIGHT_PINK: + case DEMO_EFFECT_TYPE_LIGHT_GREEN: + case DEMO_EFFECT_TYPE_LIGHT_BLUE: + case DEMO_EFFECT_TYPE_LIGHT_YELLOW: + this->envXluColor[0] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].r; + this->envXluColor[1] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].g; + this->envXluColor[2] = lightColors[type - DEMO_EFFECT_TYPE_LIGHT_BASE].b; Actor_SetScale(&this->actor, 0.0f); - this->initDrawFunc = func_808CE078; - this->initActionFunc = func_808CDDE0; + this->initDrawFunc = DemoEffect_DrawLight; + this->initActionFunc = DemoEffect_ExpandLight; this->timer = 0; break; @@ -100,17 +103,17 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - this->actionFunc = func_808CD940; + this->actionFunc = DemoEffect_WaitForObject; } void DemoEffect_Destroy(Actor* thisx, PlayState* play) { DemoEffect* this = THIS; switch (DEMO_EFFECT_GET_TYPE(&this->actor)) { - case DEMO_EFFECT_TYPE_0: - case DEMO_EFFECT_TYPE_1: - case DEMO_EFFECT_TYPE_2: - case DEMO_EFFECT_TYPE_3: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: SkelCurve_Destroy(play, &this->skelCurve); break; @@ -119,7 +122,7 @@ void DemoEffect_Destroy(Actor* thisx, PlayState* play) { } } -void func_808CD940(DemoEffect* this, PlayState* play) { +void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->initObjectIndex)) { this->actor.objBankIndex = this->initObjectIndex; this->actor.draw = this->initDrawFunc; @@ -127,41 +130,41 @@ void func_808CD940(DemoEffect* this, PlayState* play) { } } -void func_808CD998(DemoEffect* this, PlayState* play) { +void DemoEffect_SetupTimewarp(DemoEffect* this, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); - if (SkelCurve_Init(play, &this->skelCurve, &object_efc_tw_Skel_0012E8, &object_efc_tw_CurveAnim_000050)) {} + if (SkelCurve_Init(play, &this->skelCurve, &gTimewarpSkel, &gTimewarpAnim)) {} - SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 59.0f, 1.0f, 1.7f); + SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 59.0f, 1.0f, 1.7f); SkelCurve_Update(play, &this->skelCurve); - this->actionFunc = func_808CDCEC; + this->actionFunc = DemoEffect_StartTimewarp; switch (type) { - case DEMO_EFFECT_TYPE_0: - Actor_SetScale(&this->actor, 0.16800001f); + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: + Actor_SetScale(&this->actor, 168.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_1: - Actor_SetScale(&this->actor, 0.08400001f); + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: + Actor_SetScale(&this->actor, 84.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_2: - Actor_SetScale(&this->actor, 0.16800001f); + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: + Actor_SetScale(&this->actor, 168.0f * 0.001f); break; - case DEMO_EFFECT_TYPE_3: - Actor_SetScale(&this->actor, 0.28f); + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: + Actor_SetScale(&this->actor, 280.0f * 0.001f); break; default: - Actor_SetScale(&this->actor, 0.014f); + Actor_SetScale(&this->actor, 14.0f * 0.001f); break; } } -void func_808CDAD0(f32 alphaScale) { +void DemoEffect_SetPerVertexAlpha(f32 alphaScale) { static u8 sAlphaTypes[] = { 1, 1, 2, 0, 1, 1, 2, 0, 1, 2, 0, 2, 1, 0, 1, 0, 2, 0, 2, 2, 0 }; - Vtx* vtx = Lib_SegmentedToVirtual(object_efc_tw_Vtx_000060); + Vtx* vtx = Lib_SegmentedToVirtual(gTimewarpVtx); s32 i; u8 alphas[3]; @@ -176,7 +179,10 @@ void func_808CDAD0(f32 alphaScale) { } } -void func_808CDBDC(DemoEffect* this, PlayState* play) { +/** + * Shrink and fade linearly for 100 frames then remove. + */ +void DemoEffect_FinishTimewarp(DemoEffect* this, PlayState* play) { s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); f32 scale; f32 alphaScale; @@ -187,19 +193,19 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { scale = alphaScale * 0.14f; switch (type) { - case DEMO_EFFECT_TYPE_0: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE: scale *= 1.2f; break; - case DEMO_EFFECT_TYPE_1: + case DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL: scale *= 0.6f; break; - case DEMO_EFFECT_TYPE_2: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE: scale *= 1.2f; break; - case DEMO_EFFECT_TYPE_3: + case DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE: scale *= 2.0f; break; @@ -209,25 +215,31 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) { this->actor.scale.x = scale; this->actor.scale.z = scale; - func_808CDAD0(alphaScale); + DemoEffect_SetPerVertexAlpha(alphaScale); Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); } else { - func_808CDAD0(1.0f); + DemoEffect_SetPerVertexAlpha(1.0f); Actor_Kill(&this->actor); } } -void func_808CDCEC(DemoEffect* this, PlayState* play) { +/** + * Runs until animation plays to frame 59 and pauses it on frame 59. + */ +void DemoEffect_StartTimewarp(DemoEffect* this, PlayState* play) { Actor_PlaySfx_FlaggedCentered3(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG); if (SkelCurve_Update(play, &this->skelCurve)) { - SkelCurve_SetAnim(&this->skelCurve, &object_efc_tw_CurveAnim_000050, 1.0f, 60.0f, 59.0f, 0.0f); - this->actionFunc = func_808CDBDC; + SkelCurve_SetAnim(&this->skelCurve, &gTimewarpAnim, 1.0f, 60.0f, 59.0f, 0.0f); + this->actionFunc = DemoEffect_FinishTimewarp; this->timer = 0; } } -void func_808CDD70(DemoEffect* this, PlayState* play) { +/** + * Take scale to 0 linearly, when scale is small enough, remove. + */ +void DemoEffect_ShrinkLight(DemoEffect* this, PlayState* play) { Actor_SetScale(&this->actor, this->actor.scale.x - 0.02f); this->timer++; @@ -236,12 +248,16 @@ void func_808CDD70(DemoEffect* this, PlayState* play) { } } -void func_808CDDE0(DemoEffect* this, PlayState* play) { +/** + * Changes scale for 3 frames, scale is successively 0.0f, 0.2f, 0.3f, 0.35f (would converge to 0.4 exponentially if run + * for a long time). + */ +void DemoEffect_ExpandLight(DemoEffect* this, PlayState* play) { Actor_SetScale(&this->actor, (this->actor.scale.x * 0.5f) + 0.2f); this->timer++; if (this->timer >= 3) { - this->actionFunc = func_808CDD70; + this->actionFunc = DemoEffect_ShrinkLight; } } @@ -251,7 +267,7 @@ void DemoEffect_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); } -s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) { +s32 DemoEffect_OverrideLimbDrawTimewarp(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* thisx) { s32 pad; DemoEffect* this = THIS; u32 frames = play->gameplayFrames; @@ -278,7 +294,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t return true; } -void func_808CDFF8(Actor* thisx, PlayState* play) { +void DemoEffect_DrawTimewarp(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; DemoEffect* this = THIS; @@ -287,12 +303,12 @@ void func_808CDFF8(Actor* thisx, PlayState* play) { POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); - SkelCurve_Draw(&this->actor, play, &this->skelCurve, func_808CDE78, NULL, 1, &this->actor); + SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoEffect_OverrideLimbDrawTimewarp, NULL, 1, &this->actor); CLOSE_DISPS(gfxCtx); } -void func_808CE078(Actor* thisx, PlayState* play2) { +void DemoEffect_DrawLight(Actor* thisx, PlayState* play2) { PlayState* play = play2; DemoEffect* this = THIS; s16 zRot = (this->timer * 0x400) & 0xFFFF; diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h index 9901a3189..a69316308 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h @@ -11,15 +11,16 @@ typedef void (*DemoEffectActionFunc)(struct DemoEffect*, PlayState*); #define DEMO_EFFECT_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { - /* 0 */ DEMO_EFFECT_TYPE_0, - /* 1 */ DEMO_EFFECT_TYPE_1, - /* 2 */ DEMO_EFFECT_TYPE_2, - /* 3 */ DEMO_EFFECT_TYPE_3, - /* 4 */ DEMO_EFFECT_TYPE_4, - /* 5 */ DEMO_EFFECT_TYPE_5, - /* 6 */ DEMO_EFFECT_TYPE_6, - /* 7 */ DEMO_EFFECT_TYPE_7, - /* 8 */ DEMO_EFFECT_TYPE_8 + /* 0 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE, + /* 1 */ DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL, + /* 2 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE, + /* 3 */ DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE, + /* 4 */ DEMO_EFFECT_TYPE_LIGHT_BASE, + /* 4 */ DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW = DEMO_EFFECT_TYPE_LIGHT_BASE, + /* 5 */ DEMO_EFFECT_TYPE_LIGHT_PINK, + /* 6 */ DEMO_EFFECT_TYPE_LIGHT_GREEN, + /* 7 */ DEMO_EFFECT_TYPE_LIGHT_BLUE, + /* 8 */ DEMO_EFFECT_TYPE_LIGHT_YELLOW // Unused } DemoEffectType; typedef struct DemoEffect { diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c index 6882c189a..63228436f 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -1,7 +1,7 @@ /* * File: z_demo_getitem.c * Overlay: ovl_Demo_Getitem - * Description: Cutscene objectIndex for Great Fairy's Mask and Great Fairy's Sword + * Description: Cutscene objects for Great Fairy's Mask and Great Fairy's Sword */ #include "z_demo_getitem.h" @@ -14,8 +14,8 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play); void DemoGetitem_Destroy(Actor* thisx, PlayState* play); void DemoGetitem_Update(Actor* thisx, PlayState* play); -void func_80A4FB10(DemoGetitem* this, PlayState* play); -void func_80A4FB68(DemoGetitem* this, PlayState* play2); +void DemoGetitem_Wait(DemoGetitem* this, PlayState* play); +void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play); void DemoGetitem_Draw(Actor* thisx, PlayState* play); ActorInit Demo_Getitem_InitVars = { @@ -36,20 +36,27 @@ static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY }; static u16 sCueTypes[] = { CS_CMD_ACTOR_CUE_110, CS_CMD_ACTOR_CUE_566 }; +typedef enum GreatFairyRewardItem { + /* 0 */ DEMOGETITEM_ITEM_MASK_GREAT_FAIRY, + /* 1 */ DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY +} GreatFairyRewardItem; + void DemoGetitem_Init(Actor* thisx, PlayState* play) { s32 pad; s32 objectIndex; s32 itemIndex; DemoGetitem* this = THIS; - itemIndex = 0; - if (DEMOGETITEM_GET_F(thisx) == 1) { - itemIndex = 1; + itemIndex = DEMOGETITEM_ITEM_MASK_GREAT_FAIRY; + if (DEMOGETITEM_GET_F(&this->actor) == 1) { + itemIndex = DEMOGETITEM_ITEM_SWORD_GREAT_FAIRY; } + Actor_SetScale(&this->actor, 0.25f); - this->actionFunc = func_80A4FB10; - this->item = sGetItemDraws[itemIndex]; + this->actionFunc = DemoGetitem_Wait; + this->getItemDrawId = sGetItemDraws[itemIndex]; this->cueType = sCueTypes[itemIndex]; + objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]); if (objectIndex < 0) { Actor_Kill(&this->actor); @@ -62,22 +69,23 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { void DemoGetitem_Destroy(Actor* thisx, PlayState* play) { } -void func_80A4FB10(DemoGetitem* this, PlayState* play) { +void DemoGetitem_Wait(DemoGetitem* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { this->actor.draw = NULL; this->actor.objBankIndex = this->objectIndex; - this->actionFunc = func_80A4FB68; + this->actionFunc = DemoGetitem_PerformCutsceneActions; } } -void func_80A4FB68(DemoGetitem* this, PlayState* play2) { - PlayState* play = play2; - u16 sp22 = (play->gameplayFrames * 1000) & 0xFFFF; +void DemoGetitem_PerformCutsceneActions(DemoGetitem* this, PlayState* play) { + s32 pad; + u16 bobPhase = (play->gameplayFrames * 1000) % 0x10000; if (Cutscene_IsCueInChannel(play, this->cueType)) { if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id != 4) { this->actor.shape.yOffset = 0.0f; } + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) { case 2: this->actor.draw = DemoGetitem_Draw; @@ -92,7 +100,7 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) { case 4: this->actor.draw = DemoGetitem_Draw; Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); - this->actor.shape.yOffset = Math_SinS(sp22) * 15.0f; + this->actor.shape.yOffset = Math_SinS(bobPhase) * 15.0f; break; default: @@ -115,5 +123,5 @@ void DemoGetitem_Draw(Actor* thisx, PlayState* play) { func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); - GetItem_Draw(play, this->item); + GetItem_Draw(play, this->getItemDrawId); } diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h index ca00f6048..130b2cfa6 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h @@ -11,7 +11,7 @@ typedef void (*DemoGetitemActionFunc)(struct DemoGetitem*, PlayState*); typedef struct DemoGetitem { /* 0x000 */ Actor actor; - /* 0x144 */ s16 item; + /* 0x144 */ s16 getItemDrawId; /* 0x146 */ u16 cueType; /* 0x148 */ s8 objectIndex; /* 0x14C */ DemoGetitemActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 959a986a4..8157d09c6 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -539,7 +539,8 @@ void EnBox_Open(EnBox* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_ELFORG, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, this->dyna.actor.world.rot.x, this->dyna.actor.world.rot.y, this->dyna.actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), 0, STRAY_FAIRY_TYPE_CHEST)); + STRAY_FAIRY_PARAMS(ENBOX_GET_CHEST_FLAG(&this->dyna.actor), STRAY_FAIRY_AREA_CLOCK_TOWN, + STRAY_FAIRY_TYPE_CHEST)); } else if (this->movementFlags & ENBOX_MOVE_0x40) { this->movementFlags &= ~ENBOX_MOVE_0x40; } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 14f08c531..b8dea95a0 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -16,8 +16,8 @@ void EnDyExtra_Destroy(Actor* thisx, PlayState* play); void EnDyExtra_Update(Actor* thisx, PlayState* play); void EnDyExtra_Draw(Actor* thisx, PlayState* play); -void func_80A61334(EnDyExtra* this, PlayState* play); -void func_80A613C8(EnDyExtra* this, PlayState* play); +void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play); +void EnDyExtra_Fall(EnDyExtra* this, PlayState* play); ActorInit En_Dy_Extra_InitVars = { ACTOR_EN_DY_EXTRA, @@ -41,35 +41,35 @@ void EnDyExtra_Init(Actor* thisx, PlayState* play) { this->actor.scale.x = 0.025f; this->actor.scale.y = 0.039f; this->actor.scale.z = 0.025f; - this->unk160 = this->actor.world.pos; + this->initPos = this->actor.world.pos; this->actor.gravity = -0.2f; - this->unk150 = 1.0f; - this->unk14C = 0x3C; - this->actionFunc = func_80A61334; + this->alphaScale = 1.0f; + this->timer = 60; + this->actionFunc = EnDyExtra_WaitForTrigger; } -void func_80A61334(EnDyExtra* this, PlayState* play) { +void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f); if (this->actor.world.pos.y < -85.0f) { this->actor.velocity.y = 0.0f; } - if ((this->unk14C == 0) && (this->unk14A != 0)) { - this->unk14C = 0x32; - this->actionFunc = func_80A613C8; + if ((this->timer == 0) && this->trigger) { + this->timer = 50; + this->actionFunc = EnDyExtra_Fall; } } -void func_80A613C8(EnDyExtra* this, PlayState* play) { +void EnDyExtra_Fall(EnDyExtra* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f); - if ((this->unk14C == 0) || (this->unk150 < 0.02f)) { + if ((this->timer == 0) || (this->alphaScale < 0.02f)) { Actor_Kill(&this->actor); return; } - this->unk150 -= 0.02f; + this->alphaScale -= 0.02f; if (this->actor.world.pos.y < -85.0f) { this->actor.velocity.y = 0.0f; @@ -79,40 +79,40 @@ void func_80A613C8(EnDyExtra* this, PlayState* play) { void EnDyExtra_Update(Actor* thisx, PlayState* play) { EnDyExtra* this = THIS; - DECR(this->unk14C); + DECR(this->timer); Actor_PlaySfx(&this->actor, NA_SE_PL_SPIRAL_HEAL_BEAM - SFX_FLAG); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); } -static Color_RGBA8 D_80A61740[] = { +static Color_RGBA8 sPrimColors[] = { { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, }; -static Color_RGBA8 D_80A61754[] = { +static Color_RGBA8 sEnvColors[] = { { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } }; -static u8 D_80A61768[] = { - 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 0, +static u8 sAlphaTypeIndices[] = { + 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, }; void EnDyExtra_Draw(Actor* thisx, PlayState* play) { - EnDyExtra* this = THIS; s32 pad; + EnDyExtra* this = THIS; GraphicsContext* gfxCtx = play->state.gfxCtx; - Vtx* vertices = Lib_SegmentedToVirtual(object_dy_obj_Vtx_00DD40); + Vtx* vertices = Lib_SegmentedToVirtual(gGreatFairySpiralBeamVtx); s32 i; - u8 unk[3]; + u8 alphas[3]; - unk[0] = 0.0f; - unk[1] = (s8)(this->unk150 * 240.0f); - unk[2] = (s8)(this->unk150 * 255.0f); + alphas[0] = 0.0f; + alphas[1] = (s32)(this->alphaScale * 240.0f); + alphas[2] = (s32)(this->alphaScale * 255.0f); - for (i = 0; i < 27; i++) { - if (D_80A61768[i]) { - vertices[i].v.cn[3] = unk[D_80A61768[i]]; + for (i = 0; i < ARRAY_COUNT(sAlphaTypeIndices); i++) { + if (sAlphaTypeIndices[i]) { + vertices[i].v.cn[3] = alphas[sAlphaTypeIndices[i]]; } } @@ -124,10 +124,10 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) { play->state.frames * -8, 0x10, 0x10)); gDPPipeSync(POLY_XLU_DISP++); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, D_80A61740[this->type].r, D_80A61740[this->type].g, - D_80A61740[this->type].b, 255); - gDPSetEnvColor(POLY_XLU_DISP++, D_80A61754[this->type].r, D_80A61754[this->type].g, D_80A61754[this->type].b, 128); - gSPDisplayList(POLY_XLU_DISP++, object_dy_obj_DL_00DEF0); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sPrimColors[this->type].r, sPrimColors[this->type].g, + sPrimColors[this->type].b, 255); + gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[this->type].r, sEnvColors[this->type].g, sEnvColors[this->type].b, 128); + gSPDisplayList(POLY_XLU_DISP++, gGreatFairySpiralBeamDL); CLOSE_DISPS(gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h index 0e5d8614b..f36b12051 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h @@ -11,12 +11,11 @@ typedef struct EnDyExtra { /* 0x000 */ Actor actor; /* 0x144 */ EnDyExtraActionFunc actionFunc; /* 0x148 */ s16 type; - /* 0x14A */ s16 unk14A; - /* 0x14C */ s16 unk14C; - /* 0x14E */ s16 unk14E; - /* 0x150 */ f32 unk150; - /* 0x154 */ UNK_TYPE1 unk154[0xC]; - /* 0x160 */ Vec3f unk160; + /* 0x14A */ s16 trigger; + /* 0x14C */ s16 timer; + /* 0x150 */ f32 alphaScale; + /* 0x154 */ Vec3f scale; // not used, leftover from OoT + /* 0x160 */ Vec3f initPos; // set and not used } EnDyExtra; // size = 0x16C #endif // Z_EN_DY_EXTRA_H diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 61cf693d7..f1526d66b 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -744,7 +744,7 @@ void func_8088E0F0(EnElf* this, PlayState* play) { if (this->unk_250 < 2.0f) { this->unk_250 += 0.1f; } else { - gSaveContext.healthAccumulator = 160; + gSaveContext.healthAccumulator = 0xA0; this->unk_246++; } break; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index ef53999de..9b34bf410 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -73,10 +73,11 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - childActor = Actor_SpawnAsChild( - &play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, this->actor.world.pos.y + 12.0f, - this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), 0, STRAY_FAIRY_TYPE_BUBBLE)); + childActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, + this->actor.world.pos.y + 12.0f, this->actor.world.pos.z, this->actor.world.rot.x, + this->actor.world.rot.y, this->actor.world.rot.z, + STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), + STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_BUBBLE)); if (childActor != NULL) { childActor->parent = &this->actor; } @@ -140,6 +141,7 @@ void EnElfbub_Idle(EnElfbub* this, PlayState* play) { void EnElfbub_Update(Actor* thisx, PlayState* play) { EnElfbub* this = THIS; + Collider_UpdateCylinder(&this->actor, &this->collider); this->actionFunc(this, play); Actor_SetFocus(&this->actor, this->actor.shape.yOffset); diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index 42ac47f69..937c6bc8c 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -1,11 +1,38 @@ -/* - * File: z_en_elfgrp.c +/** + * @file z_en_elfgrp.c * Overlay: ovl_En_Elfgrp - * Description: Group of Stray Fairies in Fairy Fountain + * Description: Manager for group of Stray Fairies and Great Fairy in Fairy's Fountains + * + * There are many different quantities associated to the Stray Fairies in each of the 3 places (missing, in the + * Fountain, held by Player) + * - Total number of fairies (always 25 in the original game) + * - Original number in the Fountain (24 for Clock Town Fairy Fountain, 10 for the other 4) + * - Current number in the Fountain (bitpacked in Fountain scene flags, see below) + * - Total number found (stored in save context) + * - Current number held (i.e. found but not returned) + * + * The permanentSceneFlags for Fairy Fountains used in this actor are of the form + * ```c + * struct { + * u32 clockTown : 1; + * u32 fountains[4] : 5; + * } FairyFountains; + * ``` + * where arg1 is: + * - 0: Clock Town + * - 1: Woodfall, + * - 2: Snowhead, + * - 3: Great Bay, + * - 4: Ikana + * + * Clock Town is handled separately, and then the fountains are looked up with manual array indexing + * + * @note Clock Town is handled separately in a number of places */ #include "z_en_elfgrp.h" #include "overlays/actors/ovl_En_Elforg/z_en_elforg.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #define FLAGS (ACTOR_FLAG_10) @@ -17,24 +44,28 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play); void EnElfgrp_Destroy(Actor* thisx, PlayState* play); void EnElfgrp_Update(Actor* thisx, PlayState* play); -s32 func_80A39BD0(PlayState* play, s32 arg2); -s32 func_80A39C1C(PlayState* play, s32 arg1); -void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3); -void func_80A3A0AC(EnElfgrp* this, PlayState* play); -void func_80A3A0F4(EnElfgrp* this, PlayState* play); -void func_80A3A210(EnElfgrp* this, PlayState* play); -void func_80A3A274(EnElfgrp* this, PlayState* play); +s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type); +s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type); +void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType); void func_80A3A398(EnElfgrp* this, PlayState* play); -void func_80A3A484(EnElfgrp* this, PlayState* play); -void func_80A3A4AC(EnElfgrp* this, PlayState* play); void func_80A3A520(EnElfgrp* this, PlayState* play); -void func_80A3A600(EnElfgrp* this, PlayState* play); -void func_80A3A610(EnElfgrp* this, PlayState* play); -void func_80A3A6F4(EnElfgrp* this, PlayState* play); -void func_80A3A77C(EnElfgrp* this, PlayState* play); +void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play); void func_80A3A7FC(EnElfgrp* this, PlayState* play); void func_80A3A8F8(EnElfgrp* this, PlayState* play); +// State flags +#define ELFGRP_STATE_0 (1 << 0) +#define ELFGRP_STATE_1 (1 << 1) +#define ELFGRP_STATE_2 (1 << 2) +#define ELFGRP_STATE_3 (1 << 3) +#define ELFGRP_STATE_4 (1 << 4) + +// Used for the type in EnElfgrp_SpawnStrayFairies +typedef enum ElfgrpSpawnedFairyTypes { + /* 0 */ SPAWNED_STRAY_FAIRY_TYPE_PRESENT, // STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN + /* 1 */ SPAWNED_STRAY_FAIRY_TYPE_RETURNING // STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN +} ElfgrpSpawnedFairyTypes; + ActorInit En_Elfgrp_InitVars = { ACTOR_EN_ELFGRP, ACTORCAT_PROP, @@ -47,7 +78,15 @@ ActorInit En_Elfgrp_InitVars = { (ActorFunc)NULL, }; -void func_80A396B0(EnElfgrp* this, s32 numCutscenes) { +/** + * Set the actor's cutscene id to a later one, or -1 if run out. + * + * @note This is only expected to be called in Init when this actor has the first cutscene set, but can also work for + * later cutscenes if \p numCutscenes is set correcly. + * + * @param numCutscenes Number of cutscenes in the list to skip forward to set this one. + */ +void EnElfgrp_SetCutscene(EnElfgrp* this, s32 numCutscenes) { while (numCutscenes > 0) { if (this->actor.csId == CS_ID_NONE) { break; @@ -61,113 +100,118 @@ void func_80A396B0(EnElfgrp* this, s32 numCutscenes) { void EnElfgrp_Init(Actor* thisx, PlayState* play) { s32 pad; EnElfgrp* this = THIS; - s32 sp24; + s32 numberInFountain; - this->unk_147 = ENELFGRP_GET(&this->actor); + this->type = ENELFGRP_GET_TYPE(&this->actor); this->unk_148 = 0; - this->unk_14A = 0; + this->stateFlags = 0; this->actor.focus.pos.y += 40.0f; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; - switch (this->unk_147) { - case ENELFGRP_1: - case ENELFGRP_2: - case ENELFGRP_3: - case ENELFGRP_4: - this->unk_148 = this->unk_147 - 1; - sp24 = func_80A39C1C(play, this->unk_147); - this->unk_146 = 1 << this->unk_147; + switch (this->type) { + case ENELFGRP_TYPE_POWER: + case ENELFGRP_TYPE_WISDOM: + case ENELFGRP_TYPE_COURAGE: + case ENELFGRP_TYPE_KINDNESS: + this->unk_148 = this->type - 1; + numberInFountain = EnElfgrp_GetFountainFairiesCount(play, this->type); + this->talkedOnceFlag = 1 << this->type; - if (sp24 < 25) { - func_80A39DC8(this, play, sp24, 0); + if (numberInFountain < STRAY_FAIRY_TOTAL) { + EnElfgrp_SpawnStrayFairies(this, play, numberInFountain, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); } - if (sp24 >= 25) { + if (numberInFountain >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A520; - func_80A396B0(this, 2); - return; + EnElfgrp_SetCutscene(this, 2); + break; } - if ((func_80A39BD0(play, this->unk_147) + sp24) >= 25) { + if ((EnElfgrp_GetHeldFairiesCount(play, this->type) + numberInFountain) >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A398; - switch (this->unk_147) { - case ENELFGRP_1: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { - func_80A396B0(this, 1); + switch (this->type) { + case ENELFGRP_TYPE_POWER: + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) { + EnElfgrp_SetCutscene(this, 1); } else { - this->unk_14A |= 4; + this->stateFlags |= ELFGRP_STATE_2; } break; - case ENELFGRP_2: + case ENELFGRP_TYPE_WISDOM: if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired == true) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } break; - case ENELFGRP_3: + case ENELFGRP_TYPE_COURAGE: if (gSaveContext.save.saveInfo.playerData.doubleDefense) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } break; - case ENELFGRP_4: + case ENELFGRP_TYPE_KINDNESS: if (INV_CONTENT(ITEM_SWORD_GREAT_FAIRY) == ITEM_SWORD_GREAT_FAIRY) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } else { - this->unk_14A |= 0x10; + this->stateFlags |= ELFGRP_STATE_4; } break; default: break; } - } else if (func_80A39BD0(play, this->unk_147)) { + } else if (EnElfgrp_GetHeldFairiesCount(play, this->type)) { this->actionFunc = func_80A3A7FC; - this->actor.textId = (this->unk_147 * 3) + 0x581; + this->actor.textId = (this->type * 3) + 0x581; } else { this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { - this->actor.textId = (this->unk_147 * 3) + 0x580; + + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) { // talked for first time + this->actor.textId = (this->type * 3) + 0x580; } else { - this->actor.textId = (this->unk_147 * 3) + 0x57F; + this->actor.textId = (this->type * 3) + 0x57F; } } break; - default: - sp24 = func_80A39C1C(play, 0); - this->unk_146 = ENELFGRP_1; - if (sp24 >= 25) { + default: // ENELFGRP_TYPE_MAGIC + numberInFountain = EnElfgrp_GetFountainFairiesCount(play, ENELFGRP_TYPE_MAGIC); + this->talkedOnceFlag = 1 << ENELFGRP_TYPE_MAGIC; + + if (numberInFountain >= STRAY_FAIRY_TOTAL) { this->actionFunc = func_80A3A520; - if ((this->actor.home.rot.z != 0) && Flags_GetSwitch(play, this->actor.home.rot.z)) { - this->actionFunc = func_80A3A600; + + if ((ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) && + Flags_GetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor))) { + this->actionFunc = EnElfgrp_DoNothing; } else if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) { - func_80A396B0(this, 4); + EnElfgrp_SetCutscene(this, 4); } else if (INV_CONTENT(ITEM_MASK_DEKU) != ITEM_MASK_DEKU) { - func_80A396B0(this, 5); + EnElfgrp_SetCutscene(this, 5); } else { - this->unk_14A |= 2; - func_80A396B0(this, 6); + this->stateFlags |= ELFGRP_STATE_1; + EnElfgrp_SetCutscene(this, 6); } } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) { - func_80A39DC8(this, play, 24, 0); + EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); this->actionFunc = func_80A3A398; + if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) { - func_80A396B0(this, 2); + EnElfgrp_SetCutscene(this, 2); } else { - func_80A396B0(this, 3); - this->unk_14A |= 2; + EnElfgrp_SetCutscene(this, 3); + this->stateFlags |= ELFGRP_STATE_1; } } else if (gSaveContext.save.saveInfo.playerData.isMagicAcquired == true) { - func_80A396B0(this, 1); + EnElfgrp_SetCutscene(this, 1); } } else { - func_80A39DC8(this, play, 24, 0); + EnElfgrp_SpawnStrayFairies(this, play, STRAY_FAIRY_TOTAL - 1, SPAWNED_STRAY_FAIRY_TYPE_PRESENT); this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->talkedOnceFlag)) { this->actor.textId = 0x580; } else { this->actor.textId = 0x578; @@ -181,116 +225,119 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { void EnElfgrp_Destroy(Actor* thisx, PlayState* play) { } -s32 func_80A39BD0(PlayState* play, s32 arg2) { - if ((arg2 < 1) || (arg2 >= 5)) { +// Number of Stray Fairies currently held by Player +s32 EnElfgrp_GetHeldFairiesCount(PlayState* play, s32 type) { + if ((type <= ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) { return 0; } - return (((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10; + // Number in fountain originally + total number collected - number currently in fountain + return (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) + + ((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[type - 1]) - + EnElfgrp_GetFountainFairiesCount(play, type); } -s32 func_80A39C1C(PlayState* play, s32 arg1) { - // the permanentSceneFlags access here is in the form - // struct { - // u32 clockTown : 1; - // u32 fountains[4] : 5; - // } FairyFountains; - // where arg1 is: - // 0: clocktown - // 1: woodfall, - // 2: snowhead, - // 3: great bay, - // 4: stone tower - // clocktown is handled separately, and then the fountains are looked up as array indexing +// Number of Stray Fairies in currently in Fountain +s32 EnElfgrp_GetFountainFairiesCount(PlayState* play, s32 type) { + s32 numberInFountain; - s32 temp_v1; - - if ((arg1 < 0) || (arg1 >= 5)) { + if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS)) { return 0; } - if (arg1 == 0) { + if (type == ENELFGRP_TYPE_MAGIC) { if (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1) { - return 25; + return STRAY_FAIRY_TOTAL; + } else { + return STRAY_FAIRY_TOTAL - 1; } - return 24; } - temp_v1 = (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F; - if (temp_v1 < 10) { - temp_v1 = 10; - } else if (temp_v1 > 25) { - temp_v1 = 25; + numberInFountain = + (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((type - 1) * 5) + 1)) & 0x1F; + if (numberInFountain < STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL) { + numberInFountain = STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL; + } else if (numberInFountain > STRAY_FAIRY_TOTAL) { + numberInFountain = STRAY_FAIRY_TOTAL; } - return temp_v1; + return numberInFountain; } -void func_80A39CD4(PlayState* play, s32 arg1, s32 arg2) { - if ((arg1 < 0) || (arg1 > 4) || (arg2 < 10) || (arg2 > 25)) { +// Update number of Stray Fairies in Fountain +void EnElfgrp_SetFountainFairiesCount(PlayState* play, s32 type, s32 newCount) { + if ((type < ENELFGRP_TYPE_MAGIC) || (type > ENELFGRP_TYPE_KINDNESS) || + (newCount < (STRAY_FAIRY_TOTAL - STRAY_FAIRY_SCATTERED_TOTAL)) || (newCount > STRAY_FAIRY_TOTAL)) { return; } - if (arg1 == 0) { - if (arg2 == 25) { + if (type == ENELFGRP_TYPE_MAGIC) { + if (newCount == STRAY_FAIRY_TOTAL) { gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1; } else { gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~1; } } else { - gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4)); - gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((type * 5) - 4)); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= newCount << ((type * 5) - 4); } } -void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) { +void EnElfgrp_SpawnStrayFairies(EnElfgrp* this, PlayState* play, s32 count, s32 fairyType) { s32 pad; s32 i; - Actor* elforg; - s32 params; - Vec3f sp6C; + Actor* strayFairy; + s32 strayFairyParams; + Vec3f spawnCenterPos; Player* player = GET_PLAYER(play); - if (arg3 == 0) { - this->unk_14A |= 8; + if (fairyType == 0) { + this->stateFlags |= ELFGRP_STATE_3; } - if (arg3 == 0) { - sp6C = this->actor.world.pos; - sp6C.y += 20.0f; - params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN); + if (fairyType == 0) { + spawnCenterPos = this->actor.world.pos; + spawnCenterPos.y += 20.0f; + strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN); } else { - sp6C = player->actor.world.pos; - sp6C.y += 20.0f; - params = STRAY_FAIRY_PARAMS(0, this->unk_147, STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN); + spawnCenterPos = player->actor.world.pos; + spawnCenterPos.y += 20.0f; + strayFairyParams = STRAY_FAIRY_PARAMS(0, this->type, STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN); } - for (i = 0; i < arg2; i++) { - elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + sp6C.x, sp6C.y, - Rand_CenteredFloat(20.0f) + sp6C.z, 0, 0, 0, params); - if (elforg == NULL) { + for (i = 0; i < count; i++) { + strayFairy = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + spawnCenterPos.x, + spawnCenterPos.y, Rand_CenteredFloat(20.0f) + spawnCenterPos.z, 0, 0, 0, strayFairyParams); + + if (strayFairy == NULL) { continue; } - elforg->home.pos.x = this->actor.home.pos.x; - elforg->home.pos.y = this->actor.home.pos.y + 20.0f; - elforg->home.pos.z = this->actor.home.pos.z; + strayFairy->home.pos.x = this->actor.home.pos.x; + strayFairy->home.pos.y = this->actor.home.pos.y + 20.0f; + strayFairy->home.pos.z = this->actor.home.pos.z; } } -s32 func_80A39F50(PlayState* play) { +/** + * Tell any spawned Stray Fairies to come to the Fountain center. + * + * @return s32 always 0 + */ +s32 EnElfgrp_SummonStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; + EnElforg* strayFairy; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) { - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME; + strayFairy = (EnElforg*)itemAction; + if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME)) { + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME; } itemAction = itemAction->next; } @@ -298,50 +345,58 @@ s32 func_80A39F50(PlayState* play) { return 0; } -s32 func_80A39FBC(PlayState* play) { +/** + * Make the Stray Fairies in the fountain spin quickly when healing Player. + * + * @return s32 time to spend in healing action. + */ +s32 EnElfgrp_SpinStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; - s32 phi_v1 = 30; + EnElforg* strayFairy; + s32 timer = 30; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - if (!(elfOrg->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) { - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN; - if (phi_v1 >= 100) { - return phi_v1; + strayFairy = (EnElforg*)itemAction; + if (!(strayFairy->strayFairyFlags & STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN)) { + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN; + if (timer >= 100) { + return timer; } - elfOrg->secondaryTimer = phi_v1; - phi_v1 += 5; + strayFairy->secondaryTimer = timer; + timer += 5; } itemAction = itemAction->next; } - return phi_v1; + return timer; } -void func_80A3A044(PlayState* play) { +/** + * Tell the Stray Fairies to disappear, before reviving the Great Fairy + */ +void EnElfgrp_VanishStrayFairies(PlayState* play) { Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; - EnElforg* elfOrg; + EnElforg* strayFairy; while (itemAction != NULL) { if ((itemAction->id != ACTOR_EN_ELFORG) || ((STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN) && - (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN))) { + (STRAY_FAIRY_TYPE(itemAction) != STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN))) { itemAction = itemAction->next; continue; } - elfOrg = (EnElforg*)itemAction; - elfOrg->actor.home.rot.x = 0x14; - elfOrg->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS; + strayFairy = (EnElforg*)itemAction; + STRAY_FAIRY_SPARKLE_COUNT(&strayFairy->actor) = 20; + strayFairy->strayFairyFlags |= STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS; itemAction = itemAction->next; } @@ -349,68 +404,70 @@ void func_80A3A044(PlayState* play) { void func_80A3A0AC(EnElfgrp* this, PlayState* play) { if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { - this->actionFunc = func_80A3A600; + this->actionFunc = EnElfgrp_DoNothing; CutsceneManager_Stop(this->actor.csId); } } void func_80A3A0F4(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 10) { + if (this->timer == 10) { Audio_PlaySfx(NA_SE_SY_WHITE_OUT_T); - if (ENELFGRP_GET(&this->actor) < ENELFGRP_4) { + if (ENELFGRP_GET_TYPE(&this->actor) < ENELFGRP_TYPE_KINDNESS) { Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, - ENELFGRP_GET(&this->actor) + ENELFGRP_4); - } else { + ENELFGRP_GET_TYPE(&this->actor) + DEMO_EFFECT_TYPE_LIGHT_BASE); + } else { // ENELFGRP_TYPE_KINDNESS Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->actor.world.pos.x, - this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 4); + this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, + DEMO_EFFECT_TYPE_LIGHT_DARK_YELLOW); } } - if ((this->unk_144 > 10) && (this->unk_14A & 1)) { + if ((this->timer > 10) && (this->stateFlags & ELFGRP_STATE_0)) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0AC; } } void func_80A3A210(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0F4; - func_80A3A044(play); - this->unk_144 = 30; + EnElfgrp_VanishStrayFairies(play); + this->timer = 30; } - if (this->unk_14A & 1) { + if (this->stateFlags & ELFGRP_STATE_0) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } } void func_80A3A274(EnElfgrp* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) { - if (this->unk_14A & 1) { + if (this->stateFlags & ELFGRP_STATE_0) { Actor_PlaySfx_Flagged(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG); } switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id) { case 2: - if (!(this->unk_14A & 1)) { - if (this->unk_147 == ENELFGRP_0) { - func_80A39DC8(this, play, 1, 1); + if (!(this->stateFlags & ELFGRP_STATE_0)) { + if (this->type == ENELFGRP_TYPE_MAGIC) { // Clock Town + EnElfgrp_SpawnStrayFairies(this, play, 1, SPAWNED_STRAY_FAIRY_TYPE_RETURNING); } else { - func_80A39DC8(this, play, func_80A39BD0(play, this->unk_147), 1); + EnElfgrp_SpawnStrayFairies(this, play, EnElfgrp_GetHeldFairiesCount(play, this->type), + SPAWNED_STRAY_FAIRY_TYPE_RETURNING); } - this->unk_14A |= 1; - func_80A39CD4(play, this->unk_147, 25); + this->stateFlags |= ELFGRP_STATE_0; + EnElfgrp_SetFountainFairiesCount(play, this->type, STRAY_FAIRY_TOTAL); } break; case 3: - func_80A39F50(play); + EnElfgrp_SummonStrayFairies(play); this->actionFunc = func_80A3A210; - this->unk_144 = 90; + this->timer = 90; break; default: @@ -423,28 +480,30 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A274; - Flags_UnsetSwitch(play, ENELFGRP_GET_FE00(&this->actor)); - if (this->unk_14A & 2) { + Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + + if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); } - if ((this->unk_14A & 4) != 0) { - SET_WEEKEVENTREG(WEEKEVENTREG_23_02); + if (this->stateFlags & ELFGRP_STATE_2) { + SET_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK); } - if (this->unk_14A & 0x10) { + if (this->stateFlags & ELFGRP_STATE_4) { Item_Give(play, ITEM_SWORD_GREAT_FAIRY); } - this->unk_14A &= ~8; + + this->stateFlags &= ~ELFGRP_STATE_3; } else if (this->actor.xzDistToPlayer < 350.0f) { CutsceneManager_Queue(this->actor.csId); } } void func_80A3A484(EnElfgrp* this, PlayState* play) { - if (this->unk_144 == 0) { + if (this->timer == 0) { this->actionFunc = func_80A3A0F4; - this->unk_144 = 30; + this->timer = 30; } } @@ -454,51 +513,51 @@ void func_80A3A4AC(EnElfgrp* this, PlayState* play) { if (cueId == 3) { this->actionFunc = func_80A3A484; - this->unk_144 = 90; + this->timer = 90; } } } void func_80A3A520(EnElfgrp* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) { - this->actionFunc = func_80A3A600; + this->actionFunc = EnElfgrp_DoNothing; } else if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A4AC; - Flags_SetSwitch(play, ENELFGRP_GET_FE00(&this->actor)); + Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); - if (this->unk_14A & 2) { + if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); } - if (this->actor.home.rot.z != 0) { - Flags_SetSwitch(play, this->actor.home.rot.z); + if (ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor) != 0) { + Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_ROT(&this->actor)); } } else if (this->actor.xzDistToPlayer < 350.0f) { CutsceneManager_Queue(this->actor.csId); } } -void func_80A3A600(EnElfgrp* this, PlayState* play) { +void EnElfgrp_DoNothing(EnElfgrp* this, PlayState* play) { } -void func_80A3A610(EnElfgrp* this, PlayState* play) { +void EnElfgrp_HealPlayer(EnElfgrp* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (this->unk_144 == 60) { + if (this->timer == 60) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); - gSaveContext.healthAccumulator = 320; + gSaveContext.healthAccumulator = 0x140; } - if (this->unk_144 > 0) { + if (this->timer > 0) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_HEAL - SFX_FLAG); } else { player->actor.freezeTimer = 0; player->stateFlags1 &= ~PLAYER_STATE1_20000000; - this->actionFunc = func_80A3A600; - this->unk_14A |= 8; + this->actionFunc = EnElfgrp_DoNothing; + this->stateFlags |= ELFGRP_STATE_3; } } @@ -509,9 +568,9 @@ void func_80A3A6F4(EnElfgrp* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; - this->unk_144 = func_80A39FBC(play); - this->actionFunc = func_80A3A610; - this->unk_14A &= ~8; + this->timer = EnElfgrp_SpinStrayFairies(play); + this->actionFunc = EnElfgrp_HealPlayer; + this->stateFlags &= ~ELFGRP_STATE_3; } } @@ -521,25 +580,27 @@ void func_80A3A77C(EnElfgrp* this, PlayState* play) { player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; if (Actor_TextboxIsClosing(&this->actor, play)) { - this->unk_144 = func_80A39FBC(play); - this->actionFunc = func_80A3A610; - this->unk_14A &= ~8; + this->timer = EnElfgrp_SpinStrayFairies(play); + this->actionFunc = EnElfgrp_HealPlayer; + this->stateFlags &= ~ELFGRP_STATE_3; } } void func_80A3A7FC(EnElfgrp* this, PlayState* play) { - s32 temp_s0; + s32 curTotalFairies; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; this->actionFunc = func_80A3A6F4; - temp_s0 = func_80A39BD0(play, this->unk_147); - func_80A39DC8(this, play, temp_s0, 1); - temp_s0 += func_80A39C1C(play, this->unk_147); - if (temp_s0 > 25) { - temp_s0 = 25; + + curTotalFairies = EnElfgrp_GetHeldFairiesCount(play, this->type); + EnElfgrp_SpawnStrayFairies(this, play, curTotalFairies, SPAWNED_STRAY_FAIRY_TYPE_RETURNING); + curTotalFairies += EnElfgrp_GetFountainFairiesCount(play, this->type); + if (curTotalFairies > STRAY_FAIRY_TOTAL) { + curTotalFairies = STRAY_FAIRY_TOTAL; } - func_80A39CD4(play, this->unk_147, temp_s0); + + EnElfgrp_SetFountainFairiesCount(play, this->type, curTotalFairies); } else if (this->actor.xzDistToPlayer < 280.0f) { this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 300.0f); @@ -551,13 +612,13 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; this->actionFunc = func_80A3A6F4; return; } - if (this->unk_147 != ENELFGRP_0) { - if (func_80A39BD0(play, this->unk_147) > 0) { + if (this->type != ENELFGRP_TYPE_MAGIC) { + if (EnElfgrp_GetHeldFairiesCount(play, this->type) > 0) { this->actionFunc = func_80A3A7FC; return; } @@ -570,7 +631,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20000000; Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = func_80A3A77C; - gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->talkedOnceFlag; } else { this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 100.0f); @@ -585,11 +646,11 @@ void EnElfgrp_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->unk_14A & 8) { + if (this->stateFlags & ELFGRP_STATE_3) { Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG); } - if (this->unk_144 != 0) { - this->unk_144--; + if (this->timer != 0) { + this->timer--; } } diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h index 692a76d82..d9767fb2f 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -2,29 +2,32 @@ #define Z_EN_ELFGRP_H #include "global.h" +#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h" struct EnElfgrp; typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); -#define ENELFGRP_GET(thisx) ((thisx)->params & 0xF) -#define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_TYPE(thisx) ((thisx)->params & 0xF) //!< Same type as Great Fairies +#define ENELFGRP_GET_SWITCHFLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_SWITCHFLAG_ROT(thisx) ((thisx)->home.rot.z) -typedef enum { - /* 0 */ ENELFGRP_0, - /* 2 */ ENELFGRP_1, - /* 2 */ ENELFGRP_2, - /* 3 */ ENELFGRP_3, - /* 4 */ ENELFGRP_4 -} EnElfgrpParam; +typedef enum ElfgrpType { + /* 0 */ ENELFGRP_TYPE_MAGIC = GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ ENELFGRP_TYPE_POWER = GREAT_FAIRY_TYPE_POWER, + /* 2 */ ENELFGRP_TYPE_WISDOM = GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ ENELFGRP_TYPE_COURAGE = GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ ENELFGRP_TYPE_KINDNESS = GREAT_FAIRY_TYPE_KINDNESS, + /* 5 */ ENELFGRP_TYPE_MAX +} ElfgrpType; typedef struct EnElfgrp { /* 0x000 */ Actor actor; - /* 0x144 */ s16 unk_144; - /* 0x146 */ u8 unk_146; - /* 0x147 */ u8 unk_147; - /* 0x148 */ s8 unk_148; - /* 0x14A */ u16 unk_14A; + /* 0x144 */ s16 timer; + /* 0x146 */ u8 talkedOnceFlag; + /* 0x147 */ u8 type; + /* 0x148 */ s8 unk_148; // set and not used + /* 0x14A */ u16 stateFlags; /* 0x14C */ EnElfgrpActionFunc actionFunc; } EnElfgrp; // size = 0x150 diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index f57f8e066..27dc844e7 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -96,7 +96,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN: case STRAY_FAIRY_TYPE_BUBBLE: case STRAY_FAIRY_TYPE_CHEST: - case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: + case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN: break; default: @@ -121,7 +121,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { this->targetDistanceFromHome = Rand_ZeroFloat(100.0f) + 50.0f; break; - case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: + case STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN: EnElforg_InitializeParams(this); this->actionFunc = EnElforg_TurnInFairy; this->secondaryTimer = 60; @@ -324,6 +324,7 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) { void EnElforg_QuicklyCircleFairyFountain(EnElforg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); EnElforg_MoveToTargetFairyFountain(this, &this->actor.home.pos); + if (this->secondaryTimer <= 30) { this->actionFunc = EnElforg_TurnInFairy; } @@ -367,9 +368,9 @@ void EnElforg_FreeFloatingFairyFountain(EnElforg* this, PlayState* play) { if (this->strayFairyFlags & STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS) { // This happens right before the Great Fairy appears once all // Stray Fairies are saved. - if (this->actor.home.rot.x > 0) { + if (STRAY_FAIRY_SPARKLE_COUNT(&this->actor) > 0) { EnElforg_SpawnSparkles(this, play, 10); - this->actor.home.rot.x--; + STRAY_FAIRY_SPARKLE_COUNT(&this->actor)--; } Actor_SetScale(&this->actor, this->actor.scale.x * 0.9f); @@ -383,22 +384,24 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) { s32 pad; Actor* playerActor = &GET_PLAYER(play)->actor; Player* player = GET_PLAYER(play); - f32 distanceFromPlayer; + f32 orbitRadius; if (GET_PLAYER_FORM == PLAYER_FORM_GORON) { - distanceFromPlayer = 40.0f; + orbitRadius = 40.0f; } else { - distanceFromPlayer = 20.0f; + orbitRadius = 20.0f; } - this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.x; - this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * distanceFromPlayer) + playerActor->world.pos.z; + this->actor.world.pos.x = (Math_SinS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.x; + this->actor.world.pos.z = (Math_CosS(this->timer * 0x1000) * orbitRadius) + playerActor->world.pos.z; this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; + EnElforg_SpawnSparkles(this, play, 16); } void EnElforg_FairyCollected(EnElforg* this, PlayState* play) { EnElforg_CirclePlayer(this, play); + if (this->timer > 80) { Actor_Kill(&this->actor); return; @@ -424,8 +427,10 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); EnElforg_CirclePlayer(this, play); + player->actor.freezeTimer = 100; player->stateFlags1 |= PLAYER_STATE1_20000000; + if (Actor_TextboxIsClosing(&this->actor, play)) { player->actor.freezeTimer = 0; player->stateFlags1 &= ~PLAYER_STATE1_20000000; @@ -451,6 +456,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); + if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST]; this->targetSpeedXZ = 5.0f; @@ -461,10 +467,12 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { } scaledYDistance = this->actor.playerHeightRel - (this->actor.shape.yOffset * this->actor.scale.y); + if (!Player_InCsMode(play)) { if ((this->actor.xzDistToPlayer < 30.0f) && (scaledYDistance < 12.0f) && (scaledYDistance > -68.0f)) { EnElforg_SetupFairyCollected(this, play); Health_ChangeBy(play, 0x30); + switch (STRAY_FAIRY_TYPE(&this->actor)) { case STRAY_FAIRY_TYPE_COLLECTIBLE: Flags_SetCollectible(play, STRAY_FAIRY_FLAG(&this->actor)); @@ -493,7 +501,8 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { gSaveContext.save.saveInfo.inventory.strayFairies[gSaveContext.dungeonIndex]++; // You found a Stray Fairy! Message_StartTextbox(play, 0x11, NULL); - if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) { + if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= + STRAY_FAIRY_SCATTERED_TOTAL) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } } @@ -502,6 +511,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); func_80ACCBB8(this, play); + if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { if (!(this->strayFairyFlags & STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED)) { Audio_PlaySfx(NA_SE_SY_FAIRY_MASK_SUCCESS); @@ -627,6 +637,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); + switch (this->area) { case STRAY_FAIRY_AREA_WOODFALL: AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim)); @@ -644,7 +655,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyStoneTowerTexAnim)); break; - default: + default: // STRAY_FAIRY_AREA_CLOCK_TOWN AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyClockTownTexAnim)); break; } diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h index 798982b09..7bb8672b1 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h @@ -2,36 +2,41 @@ #define Z_EN_ELFORG_H #include "global.h" +#include "overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h" #include "objects/gameplay_keep/gameplay_keep.h" #define STRAY_FAIRY_TYPE(thisx) ((thisx)->params & 0xF) #define STRAY_FAIRY_GET_NON_DUNGEON_AREA(thisx) (((thisx)->params & 0x1C0) >> 6) #define STRAY_FAIRY_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) -#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) (((flag & 0x7F) << 9) | ((nonDungeonArea & 7) << 6) | (type & 0xF)) +#define STRAY_FAIRY_SPARKLE_COUNT(thisx) ((thisx)->home.rot.x) + +//! @note `nonDungeonArea` does not always use the enum +#define STRAY_FAIRY_PARAMS(flag, nonDungeonArea, type) ((((flag) & 0x7F) << 9) | (((nonDungeonArea) & 7) << 6) | ((type) & 0xF)) #define STRAY_FAIRY_FLAG_MOVES_QUICKLY_TO_HOME (1 << 0) #define STRAY_FAIRY_FLAG_SPARKLES_AND_SHRINKS (1 << 1) #define STRAY_FAIRY_FLAG_CIRCLES_QUICKLY_IN_FOUNTAIN (1 << 2) #define STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED (1 << 3) -typedef enum { - /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around - /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain - /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles - /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town - /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies - /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit - /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests - /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc. - /* 8 */ STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain +typedef enum StrayFairyType { + /* 0 */ STRAY_FAIRY_TYPE_FREE_FLOATING, // The ones just floating around + /* 1 */ STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN, // The ones already present when you enter a Fairy Fountain + /* 2 */ STRAY_FAIRY_TYPE_BUBBLE, // The ones trapped in bubbles + /* 3 */ STRAY_FAIRY_TYPE_CLOCK_TOWN, // The free-floating Stray Fairies in Clock Town + /* 4 */ STRAY_FAIRY_TYPE_ENEMY, // The ones trapped inside enemies + /* 5 */ STRAY_FAIRY_TYPE_COLLIDER, // Unused in retail. The fairy is hidden until the collider is hit + /* 6 */ STRAY_FAIRY_TYPE_CHEST, // The ones in treasure chests + /* 7 */ STRAY_FAIRY_TYPE_COLLECTIBLE, // The ones in boxes, pots, beehives, etc. + /* 8 */ STRAY_FAIRY_TYPE_RETURNING_TO_FOUNTAIN // The ones you "turn in" by walking into a Fairy Fountain } StrayFairyType; -typedef enum { - /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN, - /* 1 */ STRAY_FAIRY_AREA_WOODFALL, - /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD, - /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY, - /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER, +// Corresponds to the Great Fairy types +typedef enum StrayFairyArea { + /* 0 */ STRAY_FAIRY_AREA_CLOCK_TOWN = GREAT_FAIRY_TYPE_MAGIC, + /* 1 */ STRAY_FAIRY_AREA_WOODFALL = GREAT_FAIRY_TYPE_POWER, + /* 2 */ STRAY_FAIRY_AREA_SNOWHEAD = GREAT_FAIRY_TYPE_WISDOM, + /* 3 */ STRAY_FAIRY_AREA_GREAT_BAY = GREAT_FAIRY_TYPE_COURAGE, + /* 4 */ STRAY_FAIRY_AREA_STONE_TOWER = GREAT_FAIRY_TYPE_KINDNESS, /* 5 */ STRAY_FAIRY_AREA_MAX } StrayFairyArea; diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index d6f34a256..b09f8f54d 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -143,7 +143,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_20000; this->isCharging = false; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK)) { player->unk_B08 = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c index aca30fe92..cd8632659 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -255,7 +255,7 @@ void func_80A1BA44(ObjFlowerpot* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spC4, &spB8, &spC4, -600, phi_s0, 30, 0, 0, (Rand_ZeroOne() * 12.0f) + 16.6f, - phi_s1, 0, 35, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0); + phi_s1, 0, 35, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0); } spD0.y += 20.0f; @@ -298,7 +298,7 @@ void func_80A1BD80(ObjFlowerpot* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spBC, &spB0, &spBC, -240, phi_s0, 40, 0, 0, (Rand_ZeroOne() * 20.0f) + 10.6f, 0, 0, - 42, -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0015B0); + 42, -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0015B0); } spBC.y = this->actor.world.pos.y + this->actor.depthInWater; @@ -338,7 +338,7 @@ void func_80A1C0FC(ObjFlowerpot* this, PlayState* play) { Math_Vec3f_Sum(&spB8, &spC4, &spB8); EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -100, 64, 40, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80, - -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0); + -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0); } } @@ -365,7 +365,7 @@ void func_80A1C328(ObjFlowerpot* this, PlayState* play) { Math_Vec3f_Sum(&spB8, &spC4, &spB8); EffectSsKakera_Spawn(play, &spB8, &spAC, &spB8, -80, 64, 44, 0, 0, (Rand_ZeroOne() * 16.0f) + 14.0f, 0, 0, 80, - -1, ACTOR_DEMO_GETITEM, object_flowerpot_DL_0014F0); + -1, OBJECT_FLOWERPOT, object_flowerpot_DL_0014F0); } } diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index 6a6937e7e..f8ee482df 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -5,6 +5,7 @@ */ #include "z_obj_lightblock.h" +#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" #include "objects/object_lightblock/object_lightblock.h" #define FLAGS 0x00000000 @@ -15,12 +16,12 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play); void ObjLightblock_Destroy(Actor* thisx, PlayState* play); void ObjLightblock_Update(Actor* thisx, PlayState* play); void ObjLightblock_Draw(Actor* thisx, PlayState* play); -void func_80AF3AC8(ObjLightblock* this); -void func_80AF3ADC(ObjLightblock* this, PlayState* play); -void func_80AF3B8C(ObjLightblock* this); -void func_80AF3BA0(ObjLightblock* this, PlayState* play); -void func_80AF3C18(ObjLightblock* this); -void func_80AF3C34(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupWait(ObjLightblock* this); +void ObjLightblock_Wait(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupPlayCutscene(ObjLightblock* this); +void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play); +void ObjLightblock_SetupFadeAway(ObjLightblock* this); +void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play); ActorInit Obj_Lightblock_InitVars = { ACTOR_OBJ_LIGHTBLOCK, @@ -54,17 +55,17 @@ static ColliderCylinderInit sCylinderInit = { { 84, 120, 0, { 0, 0, 0 } }, }; -typedef struct { +typedef struct LightblockTypeVars { /* 0x0 */ f32 scale; /* 0x4 */ s16 radius; /* 0x6 */ s16 height; /* 0x8 */ s16 yShift; - /* 0xC */ s32 params; + /* 0xC */ s32 effectParams; } LightblockTypeVars; // size = 0x10 static LightblockTypeVars sLightblockTypeVars[] = { - { 0.1f, 76, 80, 19, 2 }, - { (1.0f / 6), 126, 144, 19, 3 }, + { 0.1f, 76, 80, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_LARGE }, + { (1.0f / 6.0f), 126, 144, 19, DEMO_EFFECT_TIMEWARP_LIGHTBLOCK_VERY_LARGE }, }; static InitChainEntry sInitChain[] = { @@ -76,11 +77,11 @@ static InitChainEntry sInitChain[] = { extern Gfx D_801AEF88[]; extern Gfx D_801AEFA0[]; -void func_80AF3910(ObjLightblock* this, PlayState* play) { +void ObjLightblock_SpawnEffect(ObjLightblock* this, PlayState* play) { LightblockTypeVars* typeVars = &sLightblockTypeVars[LIGHTBLOCK_TYPE(&this->dyna.actor)]; Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_EFFECT, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, - this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->params); + this->dyna.actor.world.pos.z, 0, 0, 0, typeVars->effectParams); } void ObjLightblock_Init(Actor* thisx, PlayState* play) { @@ -104,7 +105,7 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) { this->collider.dim.height = typeVars->height; this->collider.dim.yShift = typeVars->yShift; this->alpha = 255; - func_80AF3AC8(this); + ObjLightblock_SetupWait(this); } void ObjLightblock_Destroy(Actor* thisx, PlayState* play) { @@ -114,11 +115,14 @@ void ObjLightblock_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80AF3AC8(ObjLightblock* this) { - this->actionFunc = func_80AF3ADC; +void ObjLightblock_SetupWait(ObjLightblock* this) { + this->actionFunc = ObjLightblock_Wait; } -void func_80AF3ADC(ObjLightblock* this, PlayState* play) { +/** + * Wait for a single collision from a Light Arrow or 8 frames of Mirror Shield ray collision. + */ +void ObjLightblock_Wait(ObjLightblock* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; // light arrows @@ -135,39 +139,36 @@ void func_80AF3ADC(ObjLightblock* this, PlayState* play) { if (this->collisionCounter >= 8) { CutsceneManager_Queue(this->dyna.actor.csId); - func_80AF3B8C(this); + ObjLightblock_SetupPlayCutscene(this); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } } -void func_80AF3B8C(ObjLightblock* this) { - this->actionFunc = func_80AF3BA0; +void ObjLightblock_SetupPlayCutscene(ObjLightblock* this) { + this->actionFunc = ObjLightblock_PlayCutscene; } -void func_80AF3BA0(ObjLightblock* this, PlayState* play) { +void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor)); - func_80AF3910(this, play); - func_80AF3C18(this); + ObjLightblock_SpawnEffect(this, play); + ObjLightblock_SetupFadeAway(this); } else { CutsceneManager_Queue(this->dyna.actor.csId); } } -void func_80AF3C18(ObjLightblock* this) { +void ObjLightblock_SetupFadeAway(ObjLightblock* this) { this->timer = 80; - this->actionFunc = func_80AF3C34; + this->actionFunc = ObjLightblock_FadeAway; } -void func_80AF3C34(ObjLightblock* this, PlayState* play) { - s8 csId; - +void ObjLightblock_FadeAway(ObjLightblock* this, PlayState* play) { this->timer--; if (this->timer <= 0) { - csId = this->dyna.actor.csId; - CutsceneManager_Stop(csId); + CutsceneManager_Stop(this->dyna.actor.csId); Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index d01dbd3be..07e691591 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10374,7 +10374,7 @@ void func_80840EC0(Player* this, PlayState* play) { // Spin attack size void func_80840F34(Player* this) { - Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f); + Math_StepToF(&this->unk_B08, CHECK_WEEKEVENTREG(WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK) ? 1.0f : 0.5f, 0.02f); } s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* cue, f32 arg3, s16 arg4, s32 arg5) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index b4ed531f8..ec1ca83ec 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -19,7 +19,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); // Get digits for max number of stray fairies - counterDigits[1] = 15; + counterDigits[1] = STRAY_FAIRY_SCATTERED_TOTAL; counterDigits[0] = counterDigits[1] / 10; counterDigits[1] -= (s16)(counterDigits[0] * 10); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c1137d3b2..8a60d1f66 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6263,17 +6263,17 @@ 0x808CD238:("EnVm_Draw",), 0x808CD740:("DemoEffect_Init",), 0x808CD8E8:("DemoEffect_Destroy",), - 0x808CD940:("func_808CD940",), - 0x808CD998:("func_808CD998",), - 0x808CDAD0:("func_808CDAD0",), - 0x808CDBDC:("func_808CDBDC",), - 0x808CDCEC:("func_808CDCEC",), - 0x808CDD70:("func_808CDD70",), - 0x808CDDE0:("func_808CDDE0",), + 0x808CD940:("DemoEffect_WaitForObject",), + 0x808CD998:("DemoEffect_SetupTimewarp",), + 0x808CDAD0:("DemoEffect_SetPerVertexAlpha",), + 0x808CDBDC:("DemoEffect_FinishTimewarp",), + 0x808CDCEC:("DemoEffect_StartTimewarp",), + 0x808CDD70:("DemoEffect_ShrinkLight",), + 0x808CDDE0:("DemoEffect_ExpandLight",), 0x808CDE54:("DemoEffect_Update",), - 0x808CDE78:("func_808CDE78",), - 0x808CDFF8:("func_808CDFF8",), - 0x808CE078:("func_808CE078",), + 0x808CDE78:("DemoEffect_OverrideLimbDrawTimewarp",), + 0x808CDFF8:("DemoEffect_DrawTimewarp",), + 0x808CE078:("DemoEffect_DrawLight",), 0x808CE450:("DemoKankyo_SetupAction",), 0x808CE45C:("func_808CE45C",), 0x808CF06C:("func_808CF06C",), @@ -9573,9 +9573,9 @@ 0x80A07740:("func_80A07740",), 0x80A0A8A0:("BgDyYoseizo_Init",), 0x80A0A95C:("BgDyYoseizo_Destroy",), - 0x80A0A96C:("func_80A0A96C",), - 0x80A0A9E4:("func_80A0A9E4",), - 0x80A0AA40:("func_80A0AA40",), + 0x80A0A96C:("BgDyYoseizo_UpdateEyes",), + 0x80A0A9E4:("BgDyYoseizo_Bob",), + 0x80A0AA40:("BgDyYoseizo_SpawnEffects",), 0x80A0AD50:("func_80A0AD50",), 0x80A0AE1C:("func_80A0AE1C",), 0x80A0AFDC:("func_80A0AFDC",), @@ -9587,14 +9587,14 @@ 0x80A0B5F0:("func_80A0B5F0",), 0x80A0B75C:("func_80A0B75C",), 0x80A0B834:("func_80A0B834",), - 0x80A0B8CC:("func_80A0B8CC",), + 0x80A0B8CC:("BgDyYoseizo_TrainPlayer",), 0x80A0BB08:("func_80A0BB08",), 0x80A0BC84:("BgDyYoseizo_Update",), - 0x80A0BCD8:("func_80A0BCD8",), - 0x80A0BD40:("func_80A0BD40",), - 0x80A0BE60:("func_80A0BE60",), - 0x80A0BF70:("func_80A0BF70",), - 0x80A0C270:("func_80A0C270",), + 0x80A0BCD8:("BgDyYoseizo_OverrideLimbDraw",), + 0x80A0BD40:("BgDyYoseizo_Draw",), + 0x80A0BE60:("BgDyYoseizo_SpawnEffect",), + 0x80A0BF70:("BgDyYoseizo_UpdateEffects",), + 0x80A0C270:("BgDyYoseizo_DrawEffects",), 0x80A0C780:("EnBoj05_Init",), 0x80A0C790:("EnBoj05_Destroy",), 0x80A0C7A0:("EnBoj05_Update",), @@ -10266,16 +10266,16 @@ 0x80A38FB4:("EnRu_OverrideLimbdraw",), 0x80A390F8:("EnRu_PostLimbdraw",), 0x80A39204:("EnRu_Draw",), - 0x80A396B0:("func_80A396B0",), + 0x80A396B0:("EnElfgrp_SetCutscene",), 0x80A3970C:("EnElfgrp_Init",), 0x80A39BC0:("EnElfgrp_Destroy",), - 0x80A39BD0:("func_80A39BD0",), - 0x80A39C1C:("func_80A39C1C",), - 0x80A39CD4:("func_80A39CD4",), - 0x80A39DC8:("func_80A39DC8",), - 0x80A39F50:("func_80A39F50",), - 0x80A39FBC:("func_80A39FBC",), - 0x80A3A044:("func_80A3A044",), + 0x80A39BD0:("EnElfgrp_GetHeldFairiesCount",), + 0x80A39C1C:("EnElfgrp_GetFountainFairiesCount",), + 0x80A39CD4:("EnElfgrp_SetFountainFairiesCount",), + 0x80A39DC8:("EnElfgrp_SpawnStrayFairies",), + 0x80A39F50:("EnElfgrp_SummonStrayFairies",), + 0x80A39FBC:("EnElfgrp_SpinStrayFairies",), + 0x80A3A044:("EnElfgrp_VanishStrayFairies",), 0x80A3A0AC:("func_80A3A0AC",), 0x80A3A0F4:("func_80A3A0F4",), 0x80A3A210:("func_80A3A210",), @@ -10284,8 +10284,8 @@ 0x80A3A484:("func_80A3A484",), 0x80A3A4AC:("func_80A3A4AC",), 0x80A3A520:("func_80A3A520",), - 0x80A3A600:("func_80A3A600",), - 0x80A3A610:("func_80A3A610",), + 0x80A3A600:("EnElfgrp_DoNothing",), + 0x80A3A610:("EnElfgrp_HealPlayer",), 0x80A3A6F4:("func_80A3A6F4",), 0x80A3A77C:("func_80A3A77C",), 0x80A3A7FC:("func_80A3A7FC",), @@ -10546,8 +10546,8 @@ 0x80A4F4C8:("func_80A4F4C8",), 0x80A4FA40:("DemoGetitem_Init",), 0x80A4FB00:("DemoGetitem_Destroy",), - 0x80A4FB10:("func_80A4FB10",), - 0x80A4FB68:("func_80A4FB68",), + 0x80A4FB10:("DemoGetitem_Wait",), + 0x80A4FB68:("DemoGetitem_PerformCutsceneActions",), 0x80A4FCCC:("DemoGetitem_Update",), 0x80A4FCF0:("DemoGetitem_Draw",), 0x80A4FDD0:("func_80A4FDD0",), @@ -10752,8 +10752,8 @@ 0x80A61040:("BgSpoutFire_Draw",), 0x80A612B0:("EnDyExtra_Destroy",), 0x80A612C0:("EnDyExtra_Init",), - 0x80A61334:("func_80A61334",), - 0x80A613C8:("func_80A613C8",), + 0x80A61334:("EnDyExtra_WaitForTrigger",), + 0x80A613C8:("EnDyExtra_Fall",), 0x80A61470:("EnDyExtra_Update",), 0x80A614C4:("EnDyExtra_Draw",), 0x80A61810:("EnBal_Init",), @@ -12656,15 +12656,15 @@ 0x80AF3144:("EnTest7_Update",), 0x80AF31D0:("func_80AF31D0",), 0x80AF3248:("EnTest7_Draw",), - 0x80AF3910:("func_80AF3910",), + 0x80AF3910:("ObjLightblock_SpawnEffect",), 0x80AF397C:("ObjLightblock_Init",), 0x80AF3A80:("ObjLightblock_Destroy",), - 0x80AF3AC8:("func_80AF3AC8",), - 0x80AF3ADC:("func_80AF3ADC",), - 0x80AF3B8C:("func_80AF3B8C",), - 0x80AF3BA0:("func_80AF3BA0",), - 0x80AF3C18:("func_80AF3C18",), - 0x80AF3C34:("func_80AF3C34",), + 0x80AF3AC8:("ObjLightblock_SetupWait",), + 0x80AF3ADC:("ObjLightblock_Wait",), + 0x80AF3B8C:("ObjLightblock_SetupPlayCutscene",), + 0x80AF3BA0:("ObjLightblock_PlayCutscene",), + 0x80AF3C18:("ObjLightblock_SetupFadeAway",), + 0x80AF3C34:("ObjLightblock_FadeAway",), 0x80AF3CC0:("ObjLightblock_Update",), 0x80AF3CE4:("ObjLightblock_Draw",), 0x80AF3F70:("func_80AF3F70",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 417e27b77..5aaa2f1d0 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -10574,27 +10574,11 @@ 0x80A0A88C:("D_80A0A88C","UNK_TYPE4","",0x4), 0x80A0A890:("D_80A0A890","UNK_TYPE4","",0x4), 0x80A0C4A0:("Bg_Dy_Yoseizo_InitVars","UNK_TYPE1","",0x1), - 0x80A0C4C0:("D_80A0C4C0","UNK_TYPE4","",0x4), - 0x80A0C4C4:("D_80A0C4C4","UNK_TYPE4","",0x4), - 0x80A0C4C8:("D_80A0C4C8","UNK_TYPE4","",0x4), - 0x80A0C4CC:("D_80A0C4CC","UNK_TYPE4","",0x4), - 0x80A0C4D0:("D_80A0C4D0","UNK_TYPE4","",0x4), - 0x80A0C4D8:("D_80A0C4D8","UNK_TYPE4","",0x4), - 0x80A0C4DC:("D_80A0C4DC","UNK_TYPE4","",0x4), - 0x80A0C4E0:("D_80A0C4E0","UNK_TYPE4","",0x4), - 0x80A0C4E4:("D_80A0C4E4","UNK_TYPE1","",0x1), - 0x80A0C4F8:("D_80A0C4F8","UNK_TYPE1","",0x1), - 0x80A0C50C:("D_80A0C50C","UNK_TYPE1","",0x1), - 0x80A0C514:("D_80A0C514","UNK_TYPE1","",0x1), - 0x80A0C540:("D_80A0C540","f32","",0x4), - 0x80A0C544:("D_80A0C544","f32","",0x4), - 0x80A0C548:("D_80A0C548","f32","",0x4), - 0x80A0C54C:("D_80A0C54C","f32","",0x4), - 0x80A0C550:("D_80A0C550","f32","",0x4), - 0x80A0C554:("D_80A0C554","f32","",0x4), - 0x80A0C558:("D_80A0C558","f32","",0x4), - 0x80A0C55C:("D_80A0C55C","f32","",0x4), - 0x80A0C560:("D_80A0C560","f32","",0x4), + 0x80A0C4C0:("sAnimations","AnimationHeader*","9",0x24), + 0x80A0C4E4:("sEffectPrimColors","Color_RGB8","6",0x12), + 0x80A0C4F8:("sEffectEnvColors","Color_RGB8","6",0x12), + 0x80A0C50C:("sMouthTextures","UNK_TYPE1","2",0x8), + 0x80A0C514:("sStretchFactors","f32","8",0x20), 0x80A0C7C0:("En_Boj_05_InitVars","UNK_TYPE1","",0x1), 0x80A10860:("sAnimationsBombShopkeeper","UNK_PTR","",0x4), 0x80A10890:("En_Sob1_InitVars","UNK_TYPE1","",0x1), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 0bde4a5ce..35757a022 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -189,7 +189,7 @@ weekEventReg = { (22 << 8) | 0x40: "WEEKEVENTREG_22_40", (22 << 8) | 0x80: "WEEKEVENTREG_22_80", (23 << 8) | 0x01: "WEEKEVENTREG_23_01", - (23 << 8) | 0x02: "WEEKEVENTREG_23_02", + (23 << 8) | 0x02: "WEEKEVENTREG_OBTAINED_GREAT_SPIN_ATTACK", (23 << 8) | 0x04: "WEEKEVENTREG_23_04", (23 << 8) | 0x08: "WEEKEVENTREG_23_08", (23 << 8) | 0x10: "WEEKEVENTREG_23_10", diff --git a/undefined_syms.txt b/undefined_syms.txt index 45307fc87..010f94c05 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -191,14 +191,6 @@ D_050089D0 = 0x050089D0; D_060002C8 = 0x060002C8; D_060005C4 = 0x060005C4; -// ovl_Bg_Dy_Yoseizo - -D_06008090 = 0x06008090; -D_0600D1B0 = 0x0600D1B0; -D_0600D228 = 0x0600D228; -D_0601C6F4 = 0x0601C6F4; -D_0601C8B4 = 0x0601C8B4; - // ovl_Bg_Lotus D_06000A20 = 0x06000A20; From 9e72c240d9d1190244a0b0a1fd9de1cec4a82bcb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 3 Oct 2023 14:51:45 -0700 Subject: [PATCH 44/74] Z_message (2 NON_MATCHINGS) (#1398) * matched func_8014D62C * matched func_8014D304 * matched func_80149048 * matched func_80159438 & func_8014CDF0 * matched Message_GetState * matched func_80152CAC * matched func_80149454 * matched func_801491DC * matched func_80150A84 * matched func_801496C8 * matched func_80149C18 * func_8014995C progress * matched 8014995C * matched func_80153EF0 * fix MessageContext lottery guess array size to match func_801496C8 * matched 80148D64 * matched func_8014AAD0 * progress func_8014CFDC * matched func_8014CFDC * progress func_801514B0 * progress#2 func_801514B0 * matched func_801514B0 * progress func_8014C70C * Progress on few functions * fix some variables & func name * change unk11F00 type and usages * func_8014C70C matched * match func_8015268c * fix building * format * engi message WIP * enums, cleanup * missed one * oops * even more enums * another oops * func_8015E7EC NON_MATCHING * cleanup Message_DrawTextCredits * MSGMODE cleanup * import sFontWidths * Import z_message_nes data * Message_DrawTextNES draft * fix types in message_nes * Message_DrawTextNES NON_EQUIVALENT * Message_DrawTextNES improvement Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Import bss * fixes * Data clean up * Delete Message_Decode m2c output * Readd Message_Update data * import data * func declaration * cleanup * Language enum * fix naming, some flags * Update functions and variables related to the bombers notebook event queue. * Update renamed variables.txt * format * attempt Message_DecodeCredits * begin Message_DecodeNES * decode cleanup * incremental improvements on Message_DecodeNES * oops * more progress * first attempt at Message_Decode * cleanup Message_Decode * Message_Decode progress * good progress on decode loops * more progress * good Message_Decode progress, thank anon * decode creep * big improvements, thanks anon/hatal * small nes improvement * cleanup * match Message_DrawTextDefault, big progress on Message_DrawTextNES * namefixer for save structs * Some cleanup/fix non-equivalencies in decodes * cleanup * Small cleanup * func_80150A84 * TextBoxType enum usage * Format * match Message_DecodeCredit by Maide, small improvement in Message_DrawTextNES * comments * some docs * cleanup, improve matches * Some improvement Co-Authored-By: Santiago * Fixes * Missed * Match Message_DrawTextNES * Move functions to z64message.h * string macros * Small cleanups * 1 more small thing * decompme scratches * Cleanup * Item enum * PR * SEGMENT_ROM_START * PR * format * ocarina cleanup --------- Co-authored-by: andzura Co-authored-by: Angie Co-authored-by: engineer124 Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: Zoey Zolotova Co-authored-by: Santiago --- include/functions.h | 64 +- include/variables.h | 131 - include/z64item.h | 21 + include/z64message.h | 37 +- include/z64ocarina.h | 143 +- include/z64save.h | 10 +- spec | 2 - src/code/z_common_data.c | 2 +- src/code/z_demo.c | 8 +- src/code/z_kaleido_setup.c | 2 +- src/code/z_message.c | 5764 ++++++++++++++++- src/code/z_message_nes.c | 1 - src/code/z_message_tables.inc.c | 1172 ++++ src/code/z_parameter.c | 57 +- src/code/z_play.c | 2 +- src/code/z_sram_NES.c | 13 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 2 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 2 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 24 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 8 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 10 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 2 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 2 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 6 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 2 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 16 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 16 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 14 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 4 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 12 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 4 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 12 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 12 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 5 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 6 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 21 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 8 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 2 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 6 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 8 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 10 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 6 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 8 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 14 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 8 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 6 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 14 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 8 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 11 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 10 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 10 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 14 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 2 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 16 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 4 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 4 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 4 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 8 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 3 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 5 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 6 +- .../actors/ovl_player_actor/z_player.c | 39 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 22 +- tools/disasm/functions.txt | 50 +- tools/disasm/variables.txt | 172 +- tools/namefixer.py | 2 +- tools/sizes/code_functions.csv | 66 +- 88 files changed, 7398 insertions(+), 815 deletions(-) create mode 100644 src/code/z_message_tables.inc.c diff --git a/include/functions.h b/include/functions.h index 47bc7fe3d..9f4aea656 100644 --- a/include/functions.h +++ b/include/functions.h @@ -991,68 +991,6 @@ void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height // void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx); -// void func_80147520(void); -void func_80147564(PlayState* play); -s32 Message_ShouldAdvance(PlayState* play); -s32 Message_ShouldAdvanceSilent(PlayState* play); -void Message_CloseTextbox(PlayState* play); -void func_80147818(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -// void func_80147F18(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -// void func_80148558(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4); -void func_80148B98(PlayState* play, u8 arg1); -// void func_80148CBC(void); -// void func_80148D64(void); -// void func_80149048(void); -// void func_801491DC(void); -// void func_80149454(void); -// void func_801496C8(void); -void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP); -void func_80149C18(PlayState* play); -// void Message_FindMessage(void); -void Message_DrawItemIcon(PlayState* play, Gfx** gfxP); -void Message_HandleOcarina(PlayState* play); -void func_8014ADBC(PlayState* play, UNK_PTR puParm2); -void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2); -void Message_SetupLoadItemIcon(PlayState* play); -// void func_8014CCB4(void); -// void func_8014CDF0(void); -// void Message_SetupLoadItemIcon(void); -void func_8014D304(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_8014D62C(void); -// void func_8014D7B4(void); -void func_80150A84(PlayState* play); -void func_80150D08(PlayState* play, u32 uParm2); -void func_801514B0(PlayState* play, u16 arg1, u8 arg2); -void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor); -void Message_ContinueTextbox(PlayState* play, u16 textId); -void func_80151A68(PlayState* play, u16 textId); -void Message_BombersNotebookQueueEvent(PlayState* play, u8 event); -// void func_80151C9C(void); -void func_80151DA4(PlayState* play, u16 arg2); -void func_80152434(PlayState* play, u16 arg2); -// void func_80152464(void); -u8 Message_GetState(MessageContext* msgCtx); -// void func_8015268C(void); -// void func_80152C64(void); -// void func_80152CAC(void); -// void func_80152EC0(void); -// void func_80152FB8(void); -// void func_80153750(void); -// void func_80153E7C(void); -// void func_80153EF0(void); -void func_801541D4(PlayState* play, Gfx** gfxp); -void Message_Draw(PlayState* play); -void Message_Update(PlayState* play); -void func_801586A4(PlayState* play); -void Message_Init(PlayState* play); -void Message_FindMessageNES(PlayState* play, u16 textId); -void Message_DrawTextNES(PlayState* play, Gfx** gfxP, u16 textDrawPos); -void Message_DecodeNES(PlayState* play); -void Message_FindCreditsMessage(PlayState* play, u16 textId); -void Message_FindCreditsMessage(PlayState* play, u16 textId); -void Message_DrawTextCredits(PlayState* play, Gfx** gfxP); -void Message_DecodeCredits(PlayState* play); - uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); @@ -1463,7 +1401,7 @@ void Audio_StopSequenceInCutscene(u16 seqId); s32 Audio_IsSequencePlaying(u8 seqId); void Audio_PlayBgm_StorePrevBgm(u16 seqId); void Audio_RestorePrevBgm(void); -// void func_801A3000(void); +void func_801A3000(u16 seqId, u8 ioData); // void func_801A3038(void); void Audio_PlayFanfare(u16 seqId); // void func_801A312C(void); diff --git a/include/variables.h b/include/variables.h index 2d64bd2b0..8a2e66960 100644 --- a/include/variables.h +++ b/include/variables.h @@ -219,137 +219,6 @@ extern UNK_PTR D_801C5C50; // extern UNK_TYPE1 D_801C5C9C; extern UNK_PTR D_801C5CB0; -// extern UNK_TYPE1 D_801C6A70; -// extern UNK_TYPE2 D_801C6A74; -// extern UNK_TYPE2 D_801C6A78; -// extern UNK_TYPE2 D_801C6A7C; -// extern UNK_TYPE2 D_801C6A80; -// extern UNK_TYPE2 D_801C6A84; -// extern UNK_TYPE2 D_801C6A88; -// extern UNK_TYPE2 D_801C6A8C; -// extern UNK_TYPE2 D_801C6A90; -// extern UNK_TYPE2 D_801C6A94; -extern u8 gPageSwitchNextButtonStatus[6][5]; -// extern UNK_TYPE1 D_801CED40; -// extern UNK_TYPE2 D_801CFC78; -// extern UNK_TYPE1 D_801CFC7A; -// extern UNK_TYPE1 D_801CFC7C; -// extern UNK_TYPE1 D_801CFC7E; -// extern UNK_TYPE1 D_801CFC84; -// extern UNK_TYPE1 D_801CFC88; -// extern UNK_TYPE1 D_801CFC8C; -// extern UNK_TYPE1 D_801CFC8E; -// extern UNK_TYPE1 D_801CFC92; -extern u8 D_801CFC98; -extern s16 D_801CFCA4[9]; -// extern UNK_TYPE2 D_801CFCAC; -extern s16 gOcarinaSongItemMap[]; -// extern UNK_TYPE2 D_801CFCD8; -// extern UNK_TYPE2 D_801CFCE4; -// extern UNK_TYPE2 D_801CFCF0; -// extern UNK_TYPE2 D_801CFCF4; -// extern UNK_TYPE2 D_801CFCF8; -// extern UNK_TYPE2 D_801CFCFC; -// extern UNK_TYPE2 D_801CFD00; -// extern UNK_TYPE2 D_801CFD04; -// extern UNK_TYPE2 D_801CFD08; -// extern UNK_TYPE2 D_801CFD0C; -// extern UNK_TYPE2 D_801CFD10; -// extern UNK_TYPE2 D_801CFD1C; -// extern UNK_TYPE2 D_801CFD28; -// extern UNK_TYPE2 D_801CFD2C; -// extern UNK_TYPE2 D_801CFD30; -// extern UNK_TYPE2 D_801CFD34; -// extern UNK_TYPE2 D_801CFD38; -// extern UNK_TYPE2 D_801CFD3C; -// extern UNK_TYPE2 D_801CFD40; -// extern UNK_TYPE2 D_801CFD44; -// extern UNK_TYPE2 D_801CFD48; -// extern UNK_TYPE2 D_801CFD54; -// extern UNK_TYPE2 D_801CFD60; -// extern UNK_TYPE2 D_801CFD64; -// extern UNK_TYPE2 D_801CFD68; -// extern UNK_TYPE2 D_801CFD6C; -// extern UNK_TYPE2 D_801CFD70; -// extern UNK_TYPE2 D_801CFD74; -// extern UNK_TYPE2 D_801CFD78; -// extern UNK_TYPE2 D_801CFD7C; -// extern UNK_TYPE2 D_801CFD80; -// extern UNK_TYPE2 D_801CFD84; -// extern UNK_TYPE2 D_801CFD88; -// extern UNK_TYPE2 D_801CFD8C; -// extern UNK_TYPE2 D_801CFD90; -extern UNK_PTR D_801CFD94; -// extern UNK_TYPE2 D_801CFD98; -// extern UNK_TYPE2 D_801CFD9C; -// extern UNK_TYPE2 D_801CFDA0; -// extern UNK_TYPE1 D_801CFDA4; -// extern UNK_TYPE1 D_801CFDC8; -// extern UNK_TYPE1 D_801CFDEC; -// extern UNK_TYPE1 D_801CFE04; -// extern UNK_TYPE1 D_801CFE1C; -// extern UNK_TYPE1 D_801CFE34; -// extern UNK_TYPE1 D_801CFE4C; -// extern UNK_TYPE1 D_801CFE5C; -// extern UNK_TYPE1 D_801CFE68; -// extern UNK_TYPE1 D_801CFE74; -// extern UNK_TYPE1 D_801CFEA4; -// extern UNK_TYPE1 D_801CFED4; -// extern UNK_TYPE1 D_801CFF04; -// extern UNK_TYPE1 D_801CFF34; -// extern UNK_TYPE1 D_801CFF64; -// extern UNK_TYPE1 D_801CFF70; -// extern UNK_TYPE1 D_801CFF7C; -// extern UNK_TYPE1 D_801CFF88; -// extern UNK_TYPE1 D_801CFF94; -// extern UNK_TYPE1 D_801D0000; -// extern UNK_TYPE1 D_801D0001; -// extern UNK_TYPE1 D_801D001F; -// extern UNK_TYPE1 D_801D0188; -// extern UNK_TYPE1 D_801D023A; -// extern UNK_TYPE1 D_801D0250; -// extern UNK_TYPE2 D_801D0268; -// extern UNK_TYPE1 D_801D027C; -// extern UNK_TYPE1 D_801D0284; -// extern UNK_TYPE1 D_801D028C; -// extern UNK_TYPE1 D_801D02C0; -// extern UNK_TYPE1 D_801D02D8; -// extern UNK_TYPE1 D_801D02F8; -// extern UNK_TYPE1 D_801D0330; -// extern UNK_TYPE1 D_801D0334; -// extern UNK_TYPE1 D_801D0340; -// extern UNK_TYPE1 D_801D034C; -// extern UNK_TYPE1 D_801D0358; -// extern UNK_TYPE1 D_801D0364; -// extern UNK_TYPE1 D_801D0378; -extern char D_801D039C[]; -// extern UNK_TYPE1 D_801D03A4; -// extern UNK_TYPE1 D_801D03A8; -// extern UNK_TYPE1 D_801D03C8; -// extern UNK_TYPE1 D_801D03E8; -// extern UNK_TYPE1 D_801D03F0; -// extern UNK_TYPE1 D_801D0401; -// extern UNK_TYPE1 D_801D0408; -// extern UNK_TYPE1 D_801D0428; -// extern UNK_TYPE1 D_801D045A; -// extern UNK_TYPE1 D_801D0462; -//extern UNK_TYPE1 D_801D0468; -// extern UNK_TYPE1 sNESFontWidths; -// extern char sRupeesTextLocalization[]; -// extern UNK_TYPE1 sRupeesTextLength; -// extern char D_801D0714[]; -// extern UNK_TYPE1 D_801D07C4; -// extern UNK_TYPE1 D_801D07DC; -// extern UNK_TYPE1 D_801D080C; -// extern UNK_TYPE1 D_801D083C; -// extern UNK_TYPE1 D_801D086C; -// extern UNK_TYPE1 D_801D0890; -// extern UNK_TYPE1 D_801D089C; -// extern UNK_TYPE1 D_801D08CC; -// extern UNK_TYPE1 D_801D08D8; -// extern UNK_TYPE1 D_801D08E4; -// extern UNK_TYPE1 sMaskCodeTextENG; -// extern UNK_TYPE1 sMaskCodeTextLengthENG; extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; // extern UNK_TYPE1 D_801D0B8C; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; diff --git a/include/z64item.h b/include/z64item.h index 7cc31eeca..1a43b00af 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -326,6 +326,27 @@ typedef enum ItemId { /* 0xB1 */ ITEM_MAP_POINT_MOUNTAIN_VILLAGE, /* 0xB2 */ ITEM_MAP_POINT_MILK_ROAD, /* 0xB3 */ ITEM_MAP_POINT_ZORA_CAPE, + /* 0xB8 */ ITEM_B8 = 0xB8, + /* 0xB9 */ ITEM_B9, + /* 0xBA */ ITEM_BA, + /* 0xBB */ ITEM_BB, + /* 0xBC */ ITEM_BC, + /* 0xBD */ ITEM_BD, + /* 0xBE */ ITEM_BE, + /* 0xBF */ ITEM_BF, + /* 0xC0 */ ITEM_C0, + /* 0xC1 */ ITEM_C1, + /* 0xC2 */ ITEM_C2, + /* 0xC3 */ ITEM_C3, + /* 0xC4 */ ITEM_C4, + /* 0xC5 */ ITEM_C5, + /* 0xC6 */ ITEM_C6, + /* 0xC7 */ ITEM_C7, + /* 0xC8 */ ITEM_C8, + /* 0xC9 */ ITEM_C9, + /* 0xCA */ ITEM_CA, + /* 0xCB */ ITEM_CB, + /* 0xCC */ ITEM_CC, /* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST /* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN /* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO diff --git a/include/z64message.h b/include/z64message.h index fc41055d4..1b84f90db 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -139,9 +139,6 @@ typedef enum MessageMode { /* 0x4F */ MSGMODE_OWL_SAVE_2 } MessageMode; -extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; -extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; - typedef enum FaceReactionSet { /* 0x11 */ FACE_REACTION_SET_JIM = 0x11, /* 0x12 */ FACE_REACTION_SET_BOMBERS, @@ -177,7 +174,6 @@ typedef enum TextState { /* 18 */ TEXT_STATE_18 } TextState; - #define FONT_CHAR_TEX_WIDTH 16 #define FONT_CHAR_TEX_HEIGHT 16 //! TODO: Make this use `sizeof(AnyFontTextureSymbol)` @@ -203,8 +199,8 @@ typedef struct { u16 wchar[640]; // msgBufWide u64 force_structure_alignment_msg; } msgBuf; - /* 0x11D80 */ u8* messageStart; - /* 0x11D84 */ u8* messageEnd; + /* 0x11D80 */ u32 messageStart; + /* 0x11D84 */ u32 messageEnd; /* 0x11D88 */ u8 unk_11D88; // current Char Buffer ? } Font; // size = 0x11D90 @@ -324,4 +320,33 @@ typedef struct MessageContext { /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6]; } MessageContext; // size = 0x120E0 +s32 Message_ShouldAdvance(struct PlayState* play); +void Message_CloseTextbox(struct PlayState* play); +void Message_DrawTextChar(struct PlayState* play, TexturePtr texture, Gfx** gfxP); +void Message_DrawItemIcon(struct PlayState* play, Gfx** gfxP); +void Message_HandleOcarina(struct PlayState* play); +void Message_LoadItemIcon(struct PlayState* play, u16 itemId, s16 arg2); +void Message_SetupLoadItemIcon(struct PlayState* play); +void func_801514B0(struct PlayState* play, u16 arg1, u8 arg2); +void Message_StartTextbox(struct PlayState* play, u16 textId, Actor* actor); +void Message_ContinueTextbox(struct PlayState* play, u16 textId); +void Message_DisplaySceneTitleCard(struct PlayState* play, u16 textId); +void Message_BombersNotebookQueueEvent(struct PlayState* play, u8 event); +void Message_DisplayOcarinaStaff(struct PlayState* play, u16 ocarinaAction); +void Message_DisplayOcarinaStaffBlockSunsSong(struct PlayState* play, u16 ocarinaAction); +u8 Message_GetState(MessageContext* msgCtx); +void Message_Draw(struct PlayState* play); +void Message_Update(struct PlayState* play); +void Message_Init(struct PlayState* play); +void Message_FindMessageNES(struct PlayState* play, u16 textId); +void Message_DrawTextNES(struct PlayState* play, Gfx** gfxP, u16 textDrawPos); +void Message_DecodeNES(struct PlayState* play); +void Message_FindCreditsMessage(struct PlayState* play, u16 textId); +void Message_DrawTextCredits(struct PlayState* play, Gfx** gfxP); +void Message_DecodeCredits(struct PlayState* play); + +extern u8 gPageSwitchNextButtonStatus[6][5]; +extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; +extern s16 gOcarinaSongItemMap[]; + #endif diff --git a/include/z64ocarina.h b/include/z64ocarina.h index 7cfafde4f..2419a98df 100644 --- a/include/z64ocarina.h +++ b/include/z64ocarina.h @@ -32,10 +32,135 @@ typedef enum { /* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song } OcarinaSongId; -typedef enum OcarinaMode { - /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST = 24, +typedef enum { + /* 0x00 */ OCARINA_ACTION_0, // acts like free play but never set + /* 0x01 */ OCARINA_ACTION_FREE_PLAY, + /* 0x02 */ OCARINA_ACTION_DEMONSTRATE_SONATA, // Song demonstrated/previewed by another actor/teacher + /* 0x03 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY, + /* 0x04 */ OCARINA_ACTION_DEMONSTRATE_NEW_WAVE, + /* 0x05 */ OCARINA_ACTION_DEMONSTRATE_ELEGY, + /* 0x06 */ OCARINA_ACTION_DEMONSTRATE_OATH, + /* 0x07 */ OCARINA_ACTION_DEMONSTRATE_SARIAS, + /* 0x08 */ OCARINA_ACTION_DEMONSTRATE_TIME, + /* 0x09 */ OCARINA_ACTION_DEMONSTRATE_HEALING, + /* 0x0A */ OCARINA_ACTION_DEMONSTRATE_EPONAS, + /* 0x0B */ OCARINA_ACTION_DEMONSTRATE_SOARING, + /* 0x0C */ OCARINA_ACTION_DEMONSTRATE_STORMS, + /* 0x0D */ OCARINA_ACTION_DEMONSTRATE_SUNS, + /* 0x0E */ OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME, + /* 0x0F */ OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME, + /* 0x10 */ OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO, + /* 0x11 */ OCARINA_ACTION_11, + /* 0x12 */ OCARINA_ACTION_PROMPT_SONATA, // User plays back song through inputing 1 note at a time, as a tutorial. Each note is verified. + /* 0x13 */ OCARINA_ACTION_PROMPT_GORON_LULLABY, + /* 0x14 */ OCARINA_ACTION_PROMPT_NEW_WAVE, + /* 0x15 */ OCARINA_ACTION_PROMPT_ELEGY, + /* 0x16 */ OCARINA_ACTION_PROMPT_OATH, + /* 0x17 */ OCARINA_ACTION_PROMPT_SARIAS, + /* 0x18 */ OCARINA_ACTION_PROMPT_TIME, + /* 0x19 */ OCARINA_ACTION_PROMPT_HEALING, + /* 0x1A */ OCARINA_ACTION_PROMPT_EPONAS, + /* 0x1B */ OCARINA_ACTION_PROMPT_SOARING, + /* 0x1C */ OCARINA_ACTION_PROMPT_STORMS, + /* 0x1D */ OCARINA_ACTION_PROMPT_SUNS, + /* 0x1E */ OCARINA_ACTION_PROMPT_INVERTED_TIME, + /* 0x1F */ OCARINA_ACTION_PROMPT_DOUBLE_TIME, + /* 0x20 */ OCARINA_ACTION_PROMPT_GORON_LULLABY_INTRO, + /* 0x21 */ OCARINA_ACTION_21, + /* 0x22 */ OCARINA_ACTION_CHECK_SONATA, // Once the entire song is played, checks for a specific song. Broken as playing any dungeon song will softlock. + /* 0x23 */ OCARINA_ACTION_CHECK_GORON_LULLABY, + /* 0x24 */ OCARINA_ACTION_CHECK_NEW_WAVE, + /* 0x25 */ OCARINA_ACTION_CHECK_ELEGY, + /* 0x26 */ OCARINA_ACTION_CHECK_OATH, + /* 0x27 */ OCARINA_ACTION_CHECK_SARIAS, + /* 0x28 */ OCARINA_ACTION_CHECK_TIME, + /* 0x29 */ OCARINA_ACTION_CHECK_HEALING, + /* 0x2A */ OCARINA_ACTION_CHECK_EPONAS, + /* 0x2B */ OCARINA_ACTION_CHECK_SOARING, + /* 0x2C */ OCARINA_ACTION_CHECK_STORMS, + /* 0x2D */ OCARINA_ACTION_CHECK_SUNS, + /* 0x2E */ OCARINA_ACTION_CHECK_INVERTED_TIME, + /* 0x2F */ OCARINA_ACTION_CHECK_DOUBLE_TIME, + /* 0x30 */ OCARINA_ACTION_CHECK_GORON_LULLABY_INTRO, + /* 0x31 */ OCARINA_ACTION_CHECK_SCARECROW_SPAWN, // TODO: Verify (may include more) + /* 0x32 */ OCARINA_ACTION_FREE_PLAY_DONE, + /* 0x33 */ OCARINA_ACTION_SCARECROW_LONG_RECORDING, + /* 0x34 */ OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION, + /* 0x35 */ OCARINA_ACTION_SCARECROW_SPAWN_RECORDING, + /* 0x36 */ OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION, + /* 0x37 */ OCARINA_ACTION_37, + /* 0x38 */ OCARINA_ACTION_CHECK_NOTIME, + /* 0x39 */ OCARINA_ACTION_CHECK_NOTIME_DONE, + /* 0x3A */ OCARINA_ACTION_3A, // Monkey Instrument Prompt + /* 0x3B */ OCARINA_ACTION_3B, + /* 0x3C */ OCARINA_ACTION_3C, + /* 0x3D */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF, // Evan Part 1 demonstrate first half (Japa) + /* 0x3E */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF, // Evan Part 2 demonstrate first half (Japa) + /* 0x3F */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF, // Evan Part 1 demonstrate second half (Diary) + /* 0x40 */ OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF, // Evan Part 2 demonstrate second half (Diary) + /* 0x41 */ OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF, // Evan Part 1 prompt second half (Japa) + /* 0x42 */ OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF, // Evan Part 2 prompt second half (Japa) + /* 0x43 */ OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN, + /* 0x44 */ OCARINA_ACTION_PROMPT_WIND_FISH_GORON, + /* 0x45 */ OCARINA_ACTION_PROMPT_WIND_FISH_ZORA, + /* 0x46 */ OCARINA_ACTION_PROMPT_WIND_FISH_DEKU, + /* 0x47 */ OCARINA_ACTION_TIMED_PROMPT_SONATA, // Playing back a particular song, but must also time the notes properly. Not fully implemented + /* 0x48 */ OCARINA_ACTION_TIMED_PROMPT_GORON_LULLABY, + /* 0x49 */ OCARINA_ACTION_TIMED_PROMPT_NEW_WAVE, + /* 0x4A */ OCARINA_ACTION_TIMED_PROMPT_ELEGY, + /* 0x4B */ OCARINA_ACTION_TIMED_PROMPT_OATH, + /* 0x4C */ OCARINA_ACTION_TIMED_PROMPT_SARIAS, + /* 0x4D */ OCARINA_ACTION_TIMED_PROMPT_TIME, + /* 0x4E */ OCARINA_ACTION_TIMED_PROMPT_HEALING, + /* 0x4F */ OCARINA_ACTION_TIMED_PROMPT_EPONAS, + /* 0x50 */ OCARINA_ACTION_TIMED_PROMPT_SOARING, + /* 0x51 */ OCARINA_ACTION_TIMED_PROMPT_STORMS +} OcarinaSongActionId; + +typedef enum { + /* 0x00 */ OCARINA_MODE_NONE, + /* 0x01 */ OCARINA_MODE_ACTIVE, + /* 0x02 */ OCARINA_MODE_WARP, + /* 0x03 */ OCARINA_MODE_EVENT, + /* 0x04 */ OCARINA_MODE_END, + /* 0x05 */ OCARINA_MODE_PLAYED_TIME, // Played Time + /* 0x06 */ OCARINA_MODE_PLAYED_HEALING, + /* 0x07 */ OCARINA_MODE_PLAYED_EPONAS, + /* 0x08 */ OCARINA_MODE_PLAYED_SOARING, + /* 0x09 */ OCARINA_MODE_PLAYED_STORMS, + /* 0x0A */ OCARINA_MODE_PLAYED_SUNS, + /* 0x0B */ OCARINA_MODE_PLAYED_INVERTED_TIME, + /* 0x0C */ OCARINA_MODE_PLAYED_DOUBLE_TIME, + /* 0x0D */ OCARINA_MODE_PLAYED_SCARECROW_SPAWN, + /* 0x0E */ OCARINA_MODE_E, + /* 0x0F */ OCARINA_MODE_F, + /* 0x10 */ OCARINA_MODE_10, + /* 0x11 */ OCARINA_MODE_11, // End memory/scarecrow from OoT + /* 0x12 */ OCARINA_MODE_PROCESS_SOT, // Song of Time related + /* 0x13 */ OCARINA_MODE_PROCESS_INVERTED_TIME, // Inverted Song of Time related + /* 0x14 */ OCARINA_MODE_14, + /* 0x15 */ OCARINA_MODE_PROCESS_DOUBLE_TIME, // Song of Double Time related + /* 0x16 */ OCARINA_MODE_APPLY_SOT, // Apply + /* 0x17 */ OCARINA_MODE_17, + /* 0x18 */ OCARINA_MODE_APPLY_INV_SOT_FAST, /* 0x19 */ OCARINA_MODE_APPLY_INV_SOT_SLOW, - /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT + /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT, + /* 0x1B */ OCARINA_MODE_1B, + /* 0x1C */ OCARINA_MODE_WARP_TO_GREAT_BAY_COAST, + /* 0x1D */ OCARINA_MODE_WARP_TO_ZORA_CAPE, + /* 0x1E */ OCARINA_MODE_WARP_TO_SNOWHEAD, + /* 0x1F */ OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE, + /* 0x20 */ OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN, + /* 0x21 */ OCARINA_MODE_WARP_TO_MILK_ROAD, + /* 0x22 */ OCARINA_MODE_WARP_TO_WOODFALL, + /* 0x23 */ OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP, + /* 0x24 */ OCARINA_MODE_WARP_TO_IKANA_CANYON, + /* 0x25 */ OCARINA_MODE_WARP_TO_STONE_TOWER, + /* 0x26 */ OCARINA_MODE_WARP_TO_ENTRANCE, + /* 0x27 */ OCARINA_MODE_PROCESS_RESTRICTED_SONG, // Variants of Song of Time, Soaring, or Elegy restricted + /* 0x28 */ OCARINA_MODE_28, + /* 0x29 */ OCARINA_MODE_29, + /* 0x2A */ OCARINA_MODE_PLAYED_FULL_EVAN_SONG } OcarinaMode; typedef enum { @@ -78,7 +203,7 @@ typedef enum { /* 3 */ OCARINA_INSTRUMENT_WHISTLING_FLUTE, /* 4 */ OCARINA_INSTRUMENT_HARP, /* 5 */ OCARINA_INSTRUMENT_IKANA_KING, - /* 6 */ OCARINA_INSTRUMENT_TATL, + /* 6 */ OCARINA_INSTRUMENT_TATL, // Sounds like bells /* 7 */ OCARINA_INSTRUMENT_GORON_DRUMS, /* 8 */ OCARINA_INSTRUMENT_ZORA_GUITAR, /* 9 */ OCARINA_INSTRUMENT_DEKU_PIPES, @@ -98,6 +223,16 @@ typedef enum { /* -1 */ OCARINA_RECORD_REJECTED = 0xFF } OcarinaRecordingState; +typedef enum { + /* 0 */ OCARINA_ERROR_NONE, + /* 1 */ OCARINA_ERROR_1, + /* 2 */ OCARINA_ERROR_2, + /* 3 */ OCARINA_ERROR_3, + /* 4 */ OCARINA_ERROR_BEND, + /* 5 */ OCARINA_ERROR_5, + /* 0xFF */ OCARINA_ERROR_INACTIVE = 0xFF // Song not available +} OcarinaError; + /** * bFlat4Flag Note: * Flag for resolving whether (pitch = OCARINA_PITCH_BFLAT4) diff --git a/include/z64save.h b/include/z64save.h index 7d1bc781d..e22b2c58f 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -115,7 +115,7 @@ typedef enum { /* 16 */ TIMER_STATE_POSTMAN_END } TimerState; -typedef enum { +typedef enum BottleTimerState { /* 0 */ BOTTLE_TIMER_STATE_OFF, /* 1 */ BOTTLE_TIMER_STATE_COUNTING } BottleTimerState; @@ -126,7 +126,7 @@ typedef enum { /* 3 */ MINIGAME_STATUS_END = 3 } MinigameStatus; -typedef enum { +typedef enum HudVisibility { /* 0 */ HUD_VISIBILITY_IDLE, /* 1 */ HUD_VISIBILITY_NONE, /* 2 */ HUD_VISIBILITY_NONE_ALT, // Identical to HUD_VISIBILITY_NONE @@ -304,7 +304,7 @@ typedef struct SaveInfo { /* 0xF38 */ u32 regionsVisited; // "area_arrival" /* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear" /* 0xF40 */ u8 unk_F40; // "oca_rec_flag" has scarecrows song - /* 0xF41 */ u8 unk_F41; // "oca_rec_flag8" scarecrows song set? + /* 0xF41 */ u8 scarecrowSpawnSongSet; // "oca_rec_flag8" /* 0xF42 */ u8 scarecrowSpawnSong[128]; /* 0xFC2 */ s8 bombersCaughtNum; // "aikotoba_index" /* 0xFC3 */ s8 bombersCaughtOrder[5]; // "aikotoba_table" @@ -453,8 +453,8 @@ typedef enum { // The day begins at CLOCK_TIME(6, 0) so it must be offset. #define TIME_UNTIL_MOON_CRASH \ - ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); -#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); + ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))) +#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))) #define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm) diff --git a/spec b/spec index d7d51ec20..dcd055a6f 100644 --- a/spec +++ b/spec @@ -528,8 +528,6 @@ beginseg include "build/src/code/z_vr_box_draw.o" include "build/src/code/z_sram_NES.o" include "build/src/code/z_message.o" - include "build/data/code/z_message.data.o" - include "build/data/code/z_message.bss.o" include "build/src/code/z_message_nes.o" include "build/src/code/z_message_staff.o" include "build/src/code/z_player_call.o" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 46dfe189e..976b0fd4d 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -18,7 +18,7 @@ void SaveContext_Init(void) { gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.zTargetSetting = 0; } diff --git a/src/code/z_demo.c b/src/code/z_demo.c index ba9199dbb..11d614fc1 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -197,7 +197,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { if (isFirstFrame) { loadedScene = play->loadedScene; if (loadedScene->titleTextId != 0) { - func_80151A68(play, loadedScene->titleTextId); + Message_DisplaySceneTitleCard(play, loadedScene->titleTextId); } } break; @@ -1043,7 +1043,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { if (sCurOcarinaAction != cmd->textId) { sCutsceneTextboxType = CS_TEXT_OCARINA_ACTION; sCurOcarinaAction = cmd->textId; - func_80152434(play, cmd->textId); + Message_DisplayOcarinaStaff(play, cmd->textId); return; } } @@ -1098,7 +1098,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - func_80152434(play, cmd->textId); + Message_DisplayOcarinaStaff(play, cmd->textId); } } @@ -1565,7 +1565,7 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) { if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)) & 0x4000) != 0) { - func_80151A68(play, scene->titleTextId); + Message_DisplaySceneTitleCard(play, scene->titleTextId); } } diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index a08f2b56b..1b3aa49d7 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -93,7 +93,7 @@ void KaleidoSetup_Update(PlayState* play) { (play->gameOverCtx.state == GAMEOVER_INACTIVE)) { if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if ((gSaveContext.save.cutsceneIndex < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) { - if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) { + if (!Play_InCsMode(play) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF))) { if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { if (!CHECK_EVENTINF(EVENTINF_17) && !(player->stateFlags1 & PLAYER_STATE1_20)) { diff --git a/src/code/z_message.c b/src/code/z_message.c index 42a0e301f..3fb8f5bac 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -1,10 +1,31 @@ #include "global.h" +#include "z64horse.h" #include "z64shrink_window.h" #include "z64view.h" #include "message_data_static.h" +#include "interface/parameter_static/parameter_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#if 0 +u8 D_801C6A70 = 0; +s16 sOcarinaButtonIndexBufPos = 0; +s16 sOcarinaButtonIndexBufLen = 0; +s16 sLastPlayedSong = 0xFF; +s16 sOcarinaButtonStepR = 0; +s16 sOcarinaButtonStepG = 0; +s16 sOcarinaButtonStepB = 0; +s16 sOcarinaButtonFlashTimer = 12; +s16 sOcarinaButtonFlashColorIndex = 1; +s16 D_801C6A94 = 0; + +u8 gPageSwitchNextButtonStatus[][5] = { + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, + { BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED }, +}; + #define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage, #define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage, @@ -27,44 +48,65 @@ u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = { #undef DEFINE_PERSON #undef DEFINE_EVENT -s16 D_801D02D8[15] = { - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect - ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE7, // Song of Time Effect, Song of Healing Effect - ACTOR_OCEFF_WIPE2, ACTOR_OCEFF_WIPE6, // Epona's Song Effect, Song of Soaring Effect - ACTOR_OCEFF_STORM, ACTOR_OCEFF_SPOT, // Song of Storms Effect II [?], Sun's Song Effect - ACTOR_OCEFF_WIPE, ACTOR_OCEFF_WIPE, // Song of Time Effect, Song of Time Effect - ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect +// TODO: Scripts +// Include message tables D_801C6B98 and D_801CFB08 +#include "src/code/z_message_tables.inc.c" + +s16 D_801CFC78[TEXTBOX_TYPE_MAX] = { + 0, // TEXTBOX_TYPE_0 + 1, // TEXTBOX_TYPE_1 + 3, // TEXTBOX_TYPE_2 + 2, // TEXTBOX_TYPE_3 + 14, // TEXTBOX_TYPE_4 + 14, // TEXTBOX_TYPE_5 + 0, // TEXTBOX_TYPE_6 + 14, // TEXTBOX_TYPE_7 + 0, // TEXTBOX_TYPE_8 + 0, // TEXTBOX_TYPE_9 + 0, // TEXTBOX_TYPE_A + 14, // TEXTBOX_TYPE_B + 14, // TEXTBOX_TYPE_C + 4, // TEXTBOX_TYPE_D + 14, // TEXTBOX_TYPE_E + 0, // TEXTBOX_TYPE_F +}; +u8 sOcarinaButtonIndexBuf[12] = { 0 }; +s16 sOcarinaButtonAlphaValues[9] = { 0 }; +s16 gOcarinaSongItemMap[] = { + OCARINA_SONG_SONATA, OCARINA_SONG_GORON_LULLABY, OCARINA_SONG_NEW_WAVE, + OCARINA_SONG_ELEGY, OCARINA_SONG_OATH, OCARINA_SONG_SARIAS, + OCARINA_SONG_TIME, OCARINA_SONG_HEALING, OCARINA_SONG_EPONAS, + OCARINA_SONG_SOARING, OCARINA_SONG_STORMS, OCARINA_SONG_SUNS, + OCARINA_SONG_INVERTED_TIME, OCARINA_SONG_DOUBLE_TIME, OCARINA_SONG_GORON_LULLABY_INTRO, }; -s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 }; -#endif +// bss -extern s16 D_801D02D8[]; -extern s32 D_801D02F8[]; -extern s16 D_801F6B0C; -extern s16 D_801F6B0E; -extern s16 D_801F6B10; -extern s16 D_801F6B12; -extern s16 D_801F6B14; -extern s16 D_801F6B16; -extern s16 D_801F6B18; -extern s16 D_801F6B1A; -extern s16 D_801F6B1C; -extern s16 D_801F6B1E; -extern s16 D_801F6B20; -extern s16 D_801F6B22; -extern MessageTableEntry D_801C6B98[]; -extern MessageTableEntry D_801CFB08[]; +s32 sCharTexSize; +s32 sCharTexScale; +s32 D_801F6B08; -void func_80147520(void) { - D_801CFC98 = 0xFF; - D_801CFCA4[0] = D_801CFCA4[1] = D_801CFCA4[2] = D_801CFCA4[3] = D_801CFCA4[4] = D_801CFCA4[5] = D_801CFCA4[6] = - D_801CFCA4[7] = D_801CFCA4[8] = 0; +s16 sOcarinaButtonAPrimR; +s16 sOcarinaButtonAPrimB; +s16 sOcarinaButtonAPrimG; +s16 sOcarinaButtonAEnvR; +s16 sOcarinaButtonAEnvB; +s16 sOcarinaButtonAEnvG; +s16 sOcarinaButtonCPrimR; +s16 sOcarinaButtonCPrimB; +s16 sOcarinaButtonCPrimG; +s16 sOcarinaButtonCEnvR; +s16 sOcarinaButtonCEnvB; +s16 sOcarinaButtonCEnvG; + +void Message_ResetOcarinaButtonAlphas(void) { + sOcarinaButtonIndexBuf[0] = OCARINA_BTN_INVALID; + sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] = + sOcarinaButtonAlphaValues[3] = sOcarinaButtonAlphaValues[4] = sOcarinaButtonAlphaValues[5] = + sOcarinaButtonAlphaValues[6] = sOcarinaButtonAlphaValues[7] = sOcarinaButtonAlphaValues[8] = 0; } -void func_80147564(PlayState* play) { +void Message_ResetOcarinaButtonState(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_A] = 189; @@ -72,19 +114,21 @@ void func_80147564(PlayState* play) { msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_RIGHT] = 179; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_LEFT] = 174; msgCtx->ocarinaButtonsPosY[OCARINA_BTN_C_UP] = 169; - func_80147520(); - D_801F6B0C = 0x50; - D_801F6B10 = 0x96; - D_801F6B0E = 0xFF; - D_801F6B12 = 0xA; - D_801F6B16 = 0xA; - D_801F6B14 = 0xA; - D_801F6B18 = 0xFF; - D_801F6B1C = 0xFF; - D_801F6B1A = 0x32; - D_801F6B1E = 0xA; - D_801F6B22 = 0xA; - D_801F6B20 = 0xA; + + Message_ResetOcarinaButtonAlphas(); + + sOcarinaButtonAPrimR = 80; + sOcarinaButtonAPrimG = 150; + sOcarinaButtonAPrimB = 255; + sOcarinaButtonAEnvR = 10; + sOcarinaButtonAEnvG = 10; + sOcarinaButtonAEnvB = 10; + sOcarinaButtonCPrimR = 255; + sOcarinaButtonCPrimG = 255; + sOcarinaButtonCPrimB = 50; + sOcarinaButtonCEnvR = 10; + sOcarinaButtonCEnvG = 10; + sOcarinaButtonCEnvB = 10; } s32 Message_ShouldAdvance(PlayState* play) { @@ -123,77 +167,617 @@ void Message_CloseTextbox(PlayState* play) { if (play->msgCtx.msgLength != 0) { msgCtx->stateTimer = 2; - msgCtx->msgMode = 0x43; + msgCtx->msgMode = MSGMODE_TEXT_CLOSING; msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; Audio_PlaySfx(NA_SE_NONE); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147818.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80147F18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148558.s") - -#ifdef NON_MATCHING -void func_80148B98(PlayState* play, u8 arg1) { - static s16 held = 0; +void Message_DrawTextboxIcon(PlayState* play, Gfx** gfxP, s16 x, s16 y) { + static Color_RGB16 sIconPrimColors[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 sIconEnvColors[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 sIconPrimR = 0; + static s16 sIconPrimG = 80; + static s16 sIconPrimB = 200; + static s16 sIconFlashTimer = 12; + static s16 sIconFlashColorIndex = 0; + static s16 sIconEnvR = 0; + static s16 sIconEnvG = 0; + static s16 sIconEnvB = 0; + Gfx* gfx; MessageContext* msgCtx = &play->msgCtx; - Input* curInput = CONTROLLER1(&play->state); + Font* font = &msgCtx->font; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + u8* iconTexture = msgCtx->font.iconBuf; - if ((curInput->rel.stick_y > 29) && held == 0) { - held = 1; + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(sIconPrimR - sIconPrimColors[sIconFlashColorIndex].r) / sIconFlashTimer; + primG = ABS_ALT(sIconPrimG - sIconPrimColors[sIconFlashColorIndex].g) / sIconFlashTimer; + primB = ABS_ALT(sIconPrimB - sIconPrimColors[sIconFlashColorIndex].b) / sIconFlashTimer; + + if (sIconPrimR >= sIconPrimColors[sIconFlashColorIndex].r) { + sIconPrimR -= primR; + } else { + sIconPrimR += primR; + } + + if (sIconPrimG >= sIconPrimColors[sIconFlashColorIndex].g) { + sIconPrimG -= primG; + } else { + sIconPrimG += primG; + } + + if (sIconPrimB >= sIconPrimColors[sIconFlashColorIndex].b) { + sIconPrimB -= primB; + } else { + sIconPrimB += primB; + } + + envR = ABS_ALT(sIconEnvR - sIconEnvColors[sIconFlashColorIndex].r) / sIconFlashTimer; + envG = ABS_ALT(sIconEnvG - sIconEnvColors[sIconFlashColorIndex].g) / sIconFlashTimer; + envB = ABS_ALT(sIconEnvB - sIconEnvColors[sIconFlashColorIndex].b) / sIconFlashTimer; + + if (sIconEnvR >= sIconEnvColors[sIconFlashColorIndex].r) { + sIconEnvR -= envR; + } else { + sIconEnvR += envR; + } + + if (sIconEnvG >= sIconEnvColors[sIconFlashColorIndex].g) { + sIconEnvG -= envG; + } else { + sIconEnvG += envG; + } + + if (sIconEnvB >= sIconEnvColors[sIconFlashColorIndex].b) { + sIconEnvB -= envB; + } else { + sIconEnvB += envB; + } + + sIconFlashTimer--; + if (sIconFlashTimer == 0) { + sIconPrimR = sIconPrimColors[sIconFlashColorIndex].r; + sIconPrimG = sIconPrimColors[sIconFlashColorIndex].g; + sIconPrimB = sIconPrimColors[sIconFlashColorIndex].b; + sIconEnvR = sIconEnvColors[sIconFlashColorIndex].r; + sIconEnvG = sIconEnvColors[sIconFlashColorIndex].g; + sIconEnvB = sIconEnvColors[sIconFlashColorIndex].b; + sIconFlashTimer = 12; + sIconFlashColorIndex ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, sIconPrimR, sIconPrimG, sIconPrimB, 255); + gDPSetEnvColor(gfx++, sIconEnvR, sIconEnvG, sIconEnvB, 255); + + if (!play->pauseCtx.bombersNotebookOpen) { + gDPLoadTextureBlock_4b(gfx++, iconTexture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2, + G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale); + } + + msgCtx->stateTimer++; + *gfxP = gfx; + } +} + +void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) { + static Color_RGB16 D_801CFD10[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 D_801CFD1C[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 D_801CFD28 = 0; + static s16 D_801CFD2C = 80; + static s16 D_801CFD30 = 200; + static s16 D_801CFD34 = 12; + static s16 D_801CFD38 = 0; + static s16 D_801CFD3C = 0; + static s16 D_801CFD40 = 0; + static s16 D_801CFD44 = 0; + Gfx* gfx; + MessageContext* msgCtx = &play->msgCtx; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(D_801CFD28 - D_801CFD10[D_801CFD38].r) / D_801CFD34; + primG = ABS_ALT(D_801CFD2C - D_801CFD10[D_801CFD38].g) / D_801CFD34; + primB = ABS_ALT(D_801CFD30 - D_801CFD10[D_801CFD38].b) / D_801CFD34; + + if (D_801CFD28 >= D_801CFD10[D_801CFD38].r) { + D_801CFD28 -= primR; + } else { + D_801CFD28 += primR; + } + + if (D_801CFD2C >= D_801CFD10[D_801CFD38].g) { + D_801CFD2C -= primG; + } else { + D_801CFD2C += primG; + } + + if (D_801CFD30 >= D_801CFD10[D_801CFD38].b) { + D_801CFD30 -= primB; + } else { + D_801CFD30 += primB; + } + + envR = ABS_ALT(D_801CFD3C - D_801CFD1C[D_801CFD38].r) / D_801CFD34; + envG = ABS_ALT(D_801CFD40 - D_801CFD1C[D_801CFD38].g) / D_801CFD34; + envB = ABS_ALT(D_801CFD44 - D_801CFD1C[D_801CFD38].b) / D_801CFD34; + + if (D_801CFD3C >= D_801CFD1C[D_801CFD38].r) { + D_801CFD3C -= envR; + } else { + D_801CFD3C += envR; + } + + if (D_801CFD40 >= D_801CFD1C[D_801CFD38].g) { + D_801CFD40 -= envG; + } else { + D_801CFD40 += envG; + } + + if (D_801CFD44 >= D_801CFD1C[D_801CFD38].b) { + D_801CFD44 -= envB; + } else { + D_801CFD44 += envB; + } + + D_801CFD34--; + if (D_801CFD34 == 0) { + D_801CFD28 = D_801CFD10[D_801CFD38].r; + D_801CFD2C = D_801CFD10[D_801CFD38].g; + D_801CFD30 = D_801CFD10[D_801CFD38].b; + D_801CFD3C = D_801CFD1C[D_801CFD38].r; + D_801CFD40 = D_801CFD1C[D_801CFD38].g; + D_801CFD44 = D_801CFD1C[D_801CFD38].b; + D_801CFD34 = 12; + D_801CFD38 ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gfx++, 0, 0, D_801CFD28, D_801CFD2C, D_801CFD30, 120); + gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 17, arg3 + 11); + gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 14, arg3 + 13); + gDPPipeSync(gfx++); + + msgCtx->stateTimer++; + *gfxP = gfx++; + } +} + +void func_80148558(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) { + static Color_RGB16 D_801CFD48[] = { + { 0, 80, 200 }, + { 50, 130, 255 }, + }; + static Color_RGB16 D_801CFD54[] = { + { 0, 0, 0 }, + { 0, 130, 255 }, + }; + static s16 D_801CFD60 = 0; + static s16 D_801CFD64 = 80; + static s16 D_801CFD68 = 200; + static s16 D_801CFD6C = 12; + static s16 D_801CFD70 = 0; + static s16 D_801CFD74 = 0; + static s16 D_801CFD78 = 0; + static s16 D_801CFD7C = 0; + Gfx* gfx; + MessageContext* msgCtx = &play->msgCtx; + s16 primR; + s16 primG; + s16 primB; + s16 envR; + s16 envG; + s16 envB; + + gfx = *gfxP; + + if (!msgCtx->textIsCredits) { + primR = ABS_ALT(D_801CFD60 - D_801CFD48[D_801CFD70].r) / D_801CFD6C; + primG = ABS_ALT(D_801CFD64 - D_801CFD48[D_801CFD70].g) / D_801CFD6C; + primB = ABS_ALT(D_801CFD68 - D_801CFD48[D_801CFD70].b) / D_801CFD6C; + + if (D_801CFD60 >= D_801CFD48[D_801CFD70].r) { + D_801CFD60 -= primR; + } else { + D_801CFD60 += primR; + } + + if (D_801CFD64 >= D_801CFD48[D_801CFD70].g) { + D_801CFD64 -= primG; + } else { + D_801CFD64 += primG; + } + + if (D_801CFD68 >= D_801CFD48[D_801CFD70].b) { + D_801CFD68 -= primB; + } else { + D_801CFD68 += primB; + } + + envR = ABS_ALT(D_801CFD74 - D_801CFD54[D_801CFD70].r) / D_801CFD6C; + envG = ABS_ALT(D_801CFD78 - D_801CFD54[D_801CFD70].g) / D_801CFD6C; + envB = ABS_ALT(D_801CFD7C - D_801CFD54[D_801CFD70].b) / D_801CFD6C; + + if (D_801CFD74 >= D_801CFD54[D_801CFD70].r) { + D_801CFD74 -= envR; + } else { + D_801CFD74 += envR; + } + + if (D_801CFD78 >= D_801CFD54[D_801CFD70].g) { + D_801CFD78 -= envG; + } else { + D_801CFD78 += envG; + } + + if (D_801CFD7C >= D_801CFD54[D_801CFD70].b) { + D_801CFD7C -= envB; + } else { + D_801CFD7C += envB; + } + + D_801CFD6C--; + if (D_801CFD6C == 0) { + D_801CFD60 = D_801CFD48[D_801CFD70].r; + D_801CFD64 = D_801CFD48[D_801CFD70].g; + D_801CFD68 = D_801CFD48[D_801CFD70].b; + D_801CFD74 = D_801CFD54[D_801CFD70].r; + D_801CFD78 = D_801CFD54[D_801CFD70].g; + D_801CFD7C = D_801CFD54[D_801CFD70].b; + D_801CFD6C = 12; + D_801CFD70 ^= 1; + } + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gfx++, 0, 0, D_801CFD60, D_801CFD64, D_801CFD68, 120); + gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 29, arg3 + 11); + gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 26, arg3 + 13); + gDPPipeSync(gfx++); + + msgCtx->stateTimer++; + *gfxP = gfx++; + } +} + +void Message_HandleChoiceSelection(PlayState* play, u8 numChoices) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + Input* input = CONTROLLER1(&play->state); + + if ((input->rel.stick_y >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; msgCtx->choiceIndex--; if (msgCtx->choiceIndex > 128) { msgCtx->choiceIndex = 0; } else { Audio_PlaySfx(NA_SE_SY_CURSOR); } - return; - } else if ((curInput->rel.stick_y < -29) && held == 0) { - held = 1; + } else if ((input->rel.stick_y <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; msgCtx->choiceIndex++; - if (msgCtx->choiceIndex > arg1) { - msgCtx->choiceIndex = arg1; + if (msgCtx->choiceIndex > numChoices) { + msgCtx->choiceIndex = numChoices; } else { Audio_PlaySfx(NA_SE_SY_CURSOR); } - return; - } else { - if (ABS_ALT(curInput->rel.stick_y) < 30) { - held = 0; - } + } else if (ABS_ALT(input->rel.stick_y) < 30) { + sAnalogStickHeld = false; } } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148B98.s") -#endif -void func_80148CBC(PlayState* play, UNK_PTR puParm2, u8 arg2) { +void func_80148CBC(PlayState* play, Gfx** gfxP, u8 arg2) { MessageContext* msgCtx = &play->msgCtx; - msgCtx->textPosX = 0x30; + msgCtx->textPosX = 48; if (arg2 == 1) { msgCtx->textPosY = msgCtx->unk11FFE[1 + msgCtx->choiceIndex]; } else { msgCtx->textPosY = msgCtx->unk11FFE[msgCtx->choiceIndex]; } - func_80147818(play, puParm2, msgCtx->textPosX, msgCtx->textPosY); + Message_DrawTextboxIcon(play, gfxP, msgCtx->textPosX, msgCtx->textPosY); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80148D64.s") +void func_80148D64(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149048.s") + if (play->msgCtx.stickAdjY <= -30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 2) { + msgCtx->unk120C2 = 2; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801491DC.s") + msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 100; + msgCtx->bankRupeesSelected += (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 1] - '0') * 10; + msgCtx->bankRupeesSelected += msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + 2] - '0'; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149454.s") +void func_80149048(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801496C8.s") + if (msgCtx->stickAdjY <= -30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]--; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] < '0') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '9'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2]++; + if (msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] > '9') { + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = '0'; + } + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawTextChar.s") + msgCtx->bankRupeesSelected = (msgCtx->decodedBuffer.schar[msgCtx->unk120C0] - '0') * 10; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80149C18.s") +void func_801491DC(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] <= 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 5; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] > 5) { + msgCtx->unk12054[msgCtx->unk120C2] = 1; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 4) { + msgCtx->unk120C2 = 4; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void func_80149454(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] < 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 9; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] > 9) { + msgCtx->unk12054[msgCtx->unk120C2] = 0; + } + msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + '0'; + Font_LoadCharNES(play, msgCtx->decodedBuffer.schar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 2) { + msgCtx->unk120C2 = 2; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void func_801496C8(PlayState* play) { + static s16 sAnalogStickHeld = false; + MessageContext* msgCtx = &play->msgCtx; + + if (play->msgCtx.stickAdjY <= -30) { + msgCtx->unk12054[msgCtx->unk120C2]--; + if (msgCtx->unk12054[msgCtx->unk120C2] < 0) { + msgCtx->unk12054[msgCtx->unk120C2] = 3; + } + msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; + Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if (msgCtx->stickAdjY >= 30) { + msgCtx->unk12054[msgCtx->unk120C2]++; + if (msgCtx->unk12054[msgCtx->unk120C2] >= 4) { + msgCtx->unk12054[msgCtx->unk120C2] = 0; + } + msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2] = msgCtx->unk12054[msgCtx->unk120C2] + 0x824F; + Font_LoadChar(play, msgCtx->decodedBuffer.wchar[msgCtx->unk120C0 + msgCtx->unk120C2], + msgCtx->unk120C4 + (msgCtx->unk120C2 << 7)); + Audio_PlaySfx(NA_SE_SY_RUPY_COUNT); + } else if ((msgCtx->stickAdjX >= 30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2++; + if (msgCtx->unk120C2 > 5) { + msgCtx->unk120C2 = 5; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else if ((msgCtx->stickAdjX <= -30) && !sAnalogStickHeld) { + sAnalogStickHeld = true; + msgCtx->unk120C2--; + if (msgCtx->unk120C2 < 0) { + msgCtx->unk120C2 = 0; + } else { + Audio_PlaySfx(NA_SE_SY_CURSOR); + } + } else { + sAnalogStickHeld = false; + } +} + +void Message_DrawTextChar(PlayState* play, TexturePtr texture, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + s16 x = msgCtx->textPosX; + s16 y = msgCtx->textPosY; + + gDPPipeSync(gfx++); + + gDPLoadTextureBlock_4b(gfx++, texture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + if ((msgCtx->textBoxType != TEXTBOX_TYPE_5) && (msgCtx->textBoxType != TEXTBOX_TYPE_D) && + !play->pauseCtx.bombersNotebookOpen) { + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gSPTextureRectangle(gfx++, (x + 1) << 2, (y + 1) << 2, (x + sCharTexSize + 1) << 2, (y + sCharTexSize + 1) << 2, + G_TX_RENDERTILE, 0, 0, sCharTexScale, sCharTexScale); + gDPPipeSync(gfx++); + } + + gDPSetPrimColor(gfx++, 0, 0, msgCtx->textColorR, msgCtx->textColorG, msgCtx->textColorB, msgCtx->textColorAlpha); + gSPTextureRectangle(gfx++, x << 2, y << 2, (x + sCharTexSize) << 2, (y + sCharTexSize) << 2, G_TX_RENDERTILE, 0, 0, + sCharTexScale, sCharTexScale); + *gfxP = gfx++; +} + +s16 sTextboxWidth = 256; +s16 sTextboxHeight = 64; +s16 sTextboxTexWidth = 1024; +s16 sTextboxTexHeight = 1024; + +f32 D_801CFDA4[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f }; +f32 D_801CFDC8[] = { 0.6f, 0.75f, 0.9f, 1.0f, 1.05f, 1.1f, 1.05f, 1.0f, 1.0f }; + +// resizes textboxes when opening them +void Message_GrowTextbox(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + + if (!play->pauseCtx.bombersNotebookOpen) { + sTextboxWidth = D_801CFDA4[msgCtx->stateTimer] * 256.0f; + sTextboxTexWidth = 1024.0f / D_801CFDA4[msgCtx->stateTimer]; + sTextboxHeight = D_801CFDC8[msgCtx->stateTimer] * 64.0f; + sTextboxTexHeight = 1024.0f / D_801CFDC8[msgCtx->stateTimer]; + msgCtx->textboxY = msgCtx->textboxYTarget + ((64 - sTextboxHeight) / 2); + msgCtx->textboxColorAlphaCurrent += msgCtx->textboxColorAlphaTarget / 8; + msgCtx->stateTimer++; + } else { + msgCtx->stateTimer = 8; + sTextboxWidth = 512; + sTextboxTexWidth = 512; + sTextboxHeight = 89; + sTextboxTexHeight = 731; + msgCtx->textboxY = msgCtx->textboxYTarget + ((90 - sTextboxHeight) / 2); + } + + if (msgCtx->stateTimer == 8) { + // Reached the end + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + msgCtx->msgMode = MSGMODE_TEXT_STARTING; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + } + + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textboxX = msgCtx->textboxXTarget + ((256 - sTextboxWidth) / 2); + } else { + msgCtx->textboxX = msgCtx->textboxXTarget + ((512 - sTextboxWidth) / 2); + } +} void Message_FindMessage(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; @@ -223,13 +807,1075 @@ void Message_FindMessage(PlayState* play, u16 textId) { font->messageEnd = nextSegment - foundSegment; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_DrawItemIcon.s") +Color_RGB8 D_801CFDEC[] = { + { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 255 }, { 255, 0, 0 }, + { 255, 0, 255 }, { 255, 255, 255 }, { 255, 100, 0 }, { 0, 0, 0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_HandleOcarina.s") +s16 D_801CFE04[] = { + 150, // ITEM_SONG_SONATA + 255, // ITEM_SONG_LULLABY + 100, // ITEM_SONG_NOVA + 255, // ITEM_SONG_ELEGY + 255, // ITEM_SONG_OATH + 255, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014ADBC.s") +}; +s16 D_801CFE1C[] = { + 255, // ITEM_SONG_SONATA + 80, // ITEM_SONG_LULLABY + 150, // ITEM_SONG_NOVA + 160, // ITEM_SONG_ELEGY + 100, // ITEM_SONG_OATH + 240, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_LoadItemIcon.s") +}; +s16 D_801CFE34[] = { + 100, // ITEM_SONG_SONATA + 40, // ITEM_SONG_LULLABY + 255, // ITEM_SONG_NOVA + 0, // ITEM_SONG_ELEGY + 255, // ITEM_SONG_OATH + 100, // ITEM_SONG_SARIA + 255, // ITEM_SONG_TIME + 255, // ITEM_SONG_HEALING + 255, // ITEM_SONG_EPONA + 255, // ITEM_SONG_SOARING + 255, // ITEM_SONG_STORMS + 255 // ITEM_SONG_SUN +}; + +static TexturePtr sStrayFairyIconTextures[] = { + gStrayFairyWoodfallIconTex, + gStrayFairySnowheadIconTex, + gStrayFairyGreatBayIconTex, + gStrayFairyStoneTowerIconTex, +}; + +static Color_RGB8 sStrayFairyIconPrimColors[] = { + { 255, 110, 160 }, + { 90, 255, 100 }, + { 120, 255, 255 }, + { 245, 245, 90 }, +}; + +static Color_RGB8 sStrayFairyIconEnvColors[] = { + { 255, 255, 255 }, + { 255, 255, 255 }, + { 255, 255, 255 }, + { 225, 170, 0 }, +}; + +void Message_DrawItemIcon(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + s32 index; + + msgCtx->unk12016 = msgCtx->unk12014; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha); + + if (msgCtx->itemId == ITEM_RECOVERY_HEART) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 0, 0, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 80, 0, 255); + gDPLoadTextureBlock(gfx++, gHeartFullTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else if ((msgCtx->itemId >= ITEM_RUPEE_GREEN) && (msgCtx->itemId <= ITEM_RUPEE_HUGE)) { + index = msgCtx->itemId - ITEM_RUPEE_GREEN; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, D_801CFDEC[index].r, D_801CFDEC[index].g, D_801CFDEC[index].b, + msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 80, 0, 255); + gDPLoadTextureBlock(gfx++, gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else if (msgCtx->itemId == ITEM_STRAY_FAIRIES) { + msgCtx->unk12016 = 0x18; + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].r, + sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].g, + sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)].b, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].r, + sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].g, + sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)].b, 0); + gDPLoadTextureBlock_4b(gfx++, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2, + (msgCtx->unk12010 + msgCtx->unk12014) << 2, (msgCtx->unk12012 + msgCtx->unk12016) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha); + gDPLoadTextureBlock(gfx++, sStrayFairyIconTextures[((void)0, gSaveContext.dungeonIndex)], G_IM_FMT_RGBA, + G_IM_SIZ_32b, 32, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else if ((msgCtx->itemId >= ITEM_SONG_SONATA) && (msgCtx->itemId <= ITEM_SONG_SUN)) { + index = msgCtx->itemId - ITEM_SONG_SONATA; + gDPSetPrimColor(gfx++, 0, 0, D_801CFE04[index], D_801CFE1C[index], D_801CFE34[index], msgCtx->textColorAlpha); + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + msgCtx->unk12016 = 0x18; + } else if (msgCtx->itemId == ITEM_CC) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 0, msgCtx->textColorAlpha); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } else if (msgCtx->itemId >= ITEM_B8) { + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } else if (msgCtx->itemId >= ITEM_SKULL_TOKEN) { + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } else { + msgCtx->unk12016 = msgCtx->unk12014; + gDPLoadTextureBlock(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } + + gSPTextureRectangle(gfx++, msgCtx->unk12010 << 2, msgCtx->unk12012 << 2, (msgCtx->unk12010 + msgCtx->unk12014) << 2, + (msgCtx->unk12012 + msgCtx->unk12016) << 2, G_TX_RENDERTILE, 0, 0, D_801F6B08, D_801F6B08); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); + + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 16; + } else { + msgCtx->textPosX += 50; + } + *gfxP = gfx; +} + +void Message_HandleOcarina(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_RECORDING) { + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_START; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->stateTimer = 3; + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) { + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_START; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->stateTimer = 3; + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_SPAWN + 1, 1); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_37) { + msgCtx->msgMode = MSGMODE_2F; + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_3A) { + msgCtx->msgMode = MSGMODE_32; + } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) { + msgCtx->msgMode = MSGMODE_35; + } else if (((msgCtx->ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_SONATA) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO)) || + (msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_STARTING; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_GORON) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_ZORA) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) || (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } else { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_STARTING; + } + } +} + +Color_RGB16 D_801CFE74[] = { + { 255, 120, 0 }, { 70, 255, 80 }, { 80, 110, 255 }, { 255, 255, 30 }, + { 90, 180, 255 }, { 210, 100, 255 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFEA4[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFED4[] = { + { 255, 60, 60 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 180, 180, 200 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFF04[] = { + { 195, 0, 0 }, { 70, 255, 80 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; +Color_RGB16 D_801CFF34[] = { + { 255, 60, 60 }, { 110, 170, 255 }, { 80, 90, 255 }, { 255, 255, 50 }, + { 80, 150, 255 }, { 255, 150, 180 }, { 170, 170, 170 }, { 255, 130, 30 }, +}; + +u8 D_801CFF64[] = { 2, 1, 3, 6, 6, 6, 3, 3, 3, 3, 1, 6 }; + +#define MESSAGE_ITEM_NONE 9999 + +void Message_DrawTextDefault(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + u16 j; + Font* font = &play->msgCtx.font; + u16 i; + u16 charTexIndex; + Gfx* gfx = *gfxP; + u16 character; + s16 sp130; + s16 sp12E; + s16 sp12C; + s16 sp12A; + u16 lookAheadCharacter; + + play->msgCtx.textPosX = play->msgCtx.unk11F1A[0] + play->msgCtx.unk11FF8; + play->msgCtx.textPosY = play->msgCtx.unk11FFA; + + sp130 = 0; + if (play->msgCtx.itemId != MESSAGE_ITEM_NONE) { + Message_DrawItemIcon(play, &gfx); + } + msgCtx->textColorR = msgCtx->unk120C8; + msgCtx->textColorG = msgCtx->unk120CA; + msgCtx->textColorB = msgCtx->unk120CC; + + charTexIndex = 0; + + for (i = 0; i < msgCtx->textDrawPos; i++) { + character = msgCtx->decodedBuffer.wchar[i]; + + switch (character) { + case 0x2000: + if (play->pauseCtx.bombersNotebookOpen || (msgCtx->textBoxType == TEXTBOX_TYPE_D)) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_5) { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + } else { + msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x2001: + case 0x2002: + case 0x2003: + case 0x2004: + case 0x2005: + case 0x2006: + case 0x2007: + case 0x2008: + if ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_NEW_CYCLE_2) && + (character == 0x2002)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + if (msgCtx->unk120D6) { + msgCtx->unk120D4 += 25; + if (msgCtx->unk120D4 >= 100) { + msgCtx->unk120D6 = false; + } + } else { + msgCtx->unk120D4 -= 25; + if (msgCtx->unk120D4 <= -100) { + msgCtx->unk120D6 = true; + } + } + + if (D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4 < 0) { + msgCtx->textColorR = 0; + } else { + msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r + msgCtx->unk120D4; + } + if (D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4 >= 255) { + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g; + } else { + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g + msgCtx->unk120D4; + } + if (D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4 < 0) { + msgCtx->textColorB = 0; + } else { + msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b + msgCtx->unk120D4; + } + } else if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->textColorR = D_801CFF34[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFF34[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFF34[(s16)(character - 0x2001)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textColorR = D_801CFE74[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFE74[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFE74[(s16)(character - 0x2001)].b; + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textColorR = D_801CFF04[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFF04[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFF04[(s16)(character - 0x2001)].b; + } else { + msgCtx->textColorR = D_801CFEA4[(s16)(character - 0x2001)].r; + msgCtx->textColorG = D_801CFEA4[(s16)(character - 0x2001)].g; + msgCtx->textColorB = D_801CFEA4[(s16)(character - 0x2001)].b; + } + + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x20: // ` ` + msgCtx->textPosX += 6; + break; + + case 0xA: + msgCtx->textPosY += msgCtx->unk11FFC; + // fallthrough + case 0xC: + sp130++; + msgCtx->textPosX = msgCtx->unk11F1A[sp130] + msgCtx->unk11FF8; + if (msgCtx->choiceNum == 1) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 32; + } else { + msgCtx->textPosX += 57; + } + } else if (msgCtx->choiceNum == 2) { + if (!play->pauseCtx.bombersNotebookOpen) { + msgCtx->textPosX += 22; + } else { + msgCtx->textPosX += 57; + } + } + continue; + + case 0x9: + case 0xB: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (!msgCtx->textboxSkipped) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_AWAIT_NEXT; + Font_LoadMessageBoxEndIcon(font, 0); + } else { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->textUnskippable = false; + msgCtx->msgBufPos++; + } + msgCtx->unk120CE = msgCtx->textColorR; + msgCtx->unk120D0 = msgCtx->textColorG; + msgCtx->unk120D2 = msgCtx->textColorB; + } + *gfxP = gfx; + return; + + case 0x101: // MESSAGE_QUICKTEXT_ENABLE + if (((i + 1) == msgCtx->textDrawPos) && + ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) || + ((msgCtx->msgMode >= MSGMODE_OCARINA_STARTING) && (msgCtx->msgMode <= MSGMODE_26)))) { + + j = i; + while (true) { + if ((msgCtx->decodedBuffer.wchar[j] != 0x102) && (msgCtx->decodedBuffer.wchar[j] != 0x104) && + (msgCtx->decodedBuffer.wchar[j] != 0x103) && (msgCtx->decodedBuffer.wchar[j] != 0x230) && + (msgCtx->decodedBuffer.wchar[j] != 9) && (msgCtx->decodedBuffer.wchar[j] != 0xB)) { + j++; + continue; + } + break; + } + + i = j - 1; + msgCtx->textDrawPos = i + 1; + } + break; + + case 0x102: // MESSAGE_QUICKTEXT_DISABLE + break; + + case 0x110: // MESSAGE_BOX_BREAK_DELAYED + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + msgCtx->msgMode = MSGMODE_TEXT_DELAYED_BREAK; + } + *gfxP = gfx; + return; + + case 0x111: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->unk11F0C == 3) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_55; + } else { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_50; + } + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x112: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_52; + msgCtx->stateTimer = msgCtx->decodedBuffer.wchar[++i]; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } + *gfxP = gfx; + return; + + case 0x120: // MESSAGE_SFX + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + Audio_PlaySfx(msgCtx->decodedBuffer.wchar[i + 1]); + } + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + i++; + break; + + case 0x128: + if (((i + 1) == msgCtx->textDrawPos) && (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING)) { + msgCtx->msgMode = MSGMODE_9; + msgCtx->textDelayTimer = msgCtx->decodedBuffer.wchar[i + 1]; + } + i++; + break; + + case 0x130: + case 0x131: + case 0x132: + case 0x133: + case 0x134: + case 0x135: + case 0x136: + msgCtx->textDelay = character - 0x130; + if ((i + 1) == msgCtx->textDrawPos) { + msgCtx->textDrawPos++; + } + break; + + case 0x201: // MESSAGE_BACKGROUND + msgCtx->textPosX = 45; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + } + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 96) << 2, (msgCtx->unk12012 + 1) << 2, + (msgCtx->textPosX + 193) << 2, (msgCtx->unk12012 + 49) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 60, 0, msgCtx->textColorAlpha); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1000, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, msgCtx->unk12012 << 2, (msgCtx->textPosX + 96) << 2, + (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment + 0x1900, G_IM_FMT_I, 96, 48, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, (msgCtx->textPosX + 96) << 2, msgCtx->unk12012 << 2, + (msgCtx->textPosX + 192) << 2, (msgCtx->unk12012 + 48) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + msgCtx->textPosX += 32; + break; + + case 0x202: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_10; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2); + } + break; + + case 0x203: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_11; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->choiceTextId = msgCtx->currentTextId; + msgCtx->stateTimer = 4; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 2); + } + break; + + case 0x20C: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_60; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x220: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_61; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x221: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_62; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x222: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_41; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + break; + + case 0x225: + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_63; + + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + } + break; + + case 0x240: + case 0x500: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + Message_HandleOcarina(play); + *gfxP = gfx; + return; + } + msgCtx->msgMode = MSGMODE_TEXT_DONE; + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_00) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + if (character == 0x500) { + Font_LoadMessageBoxEndIcon(font, 1); + } else { + Font_LoadMessageBoxEndIcon(font, 0); + } + if (play->csCtx.state == CS_STATE_IDLE) { + func_8011552C(play, DO_ACTION_RETURN); + } + } else { + Audio_PlaySfx(NA_SE_NONE); + } + } + *gfxP = gfx; + return; + + case 0x104: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Audio_PlaySfx(NA_SE_NONE); + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_30; + } + *gfxP = gfx; + return; + + case 0x103: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_40; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 0); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + case 0x230: + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + msgCtx->msgMode = MSGMODE_TEXT_DONE; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_42; + Font_LoadMessageBoxEndIcon(&play->msgCtx.font, 1); + Audio_PlaySfx(NA_SE_SY_MESSAGE_END); + } + *gfxP = gfx; + return; + + default: + switch (character) { + case 0x8169: + case 0x8175: + msgCtx->textPosX -= (s16)(6.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX -= (s16)(3.0f * msgCtx->textCharScale); + break; + + case 0x8148: + case 0x8149: + msgCtx->textPosX -= (s16)(2.0f * msgCtx->textCharScale); + break; + + default: + break; + } + + if ((msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) && ((i + 1) == msgCtx->textDrawPos)) { + Audio_PlaySfx(NA_SE_NONE); + } + + if ((character >= 0x839F) && (character < 0x83AB)) { + sp12E = msgCtx->textColorR; + sp12C = msgCtx->textColorG; + sp12A = msgCtx->textColorB; + msgCtx->textColorR = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].r; + msgCtx->textColorG = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].g; + msgCtx->textColorB = D_801CFED4[(s16)D_801CFF64[character - 0x839F]].b; + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + msgCtx->textColorR = sp12E; + msgCtx->textColorG = sp12C; + msgCtx->textColorB = sp12A; + } else { + Message_DrawTextChar(play, &font->charBuf[font->unk_11D88][charTexIndex], &gfx); + } + charTexIndex += FONT_CHAR_TEX_SIZE; + switch (character) { + case 0x8144: + msgCtx->textPosX += (s16)(8.0f * msgCtx->textCharScale); + break; + + case 0x816A: + case 0x8176: + msgCtx->textPosX += (s16)(10.0f * msgCtx->textCharScale); + break; + + case 0x8141: + case 0x8142: + case 0x8168: + msgCtx->textPosX += (s16)(12.0f * msgCtx->textCharScale); + break; + + case 0x8194: + msgCtx->textPosX += (s16)(14.0f * msgCtx->textCharScale); + break; + + case 0x8145: + msgCtx->textPosX += (s16)(15.0f * msgCtx->textCharScale); + break; + + default: + if ((msgCtx->msgMode >= MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND) && + (msgCtx->msgMode <= MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND)) { + msgCtx->textPosX += (s16)((16.0f * msgCtx->textCharScale) - 1.0f); + } else { + msgCtx->textPosX += (s16)(16.0f * msgCtx->textCharScale); + } + break; + } + break; + } + } + + if (msgCtx->textDelayTimer == 0) { + msgCtx->textDrawPos = i + 1; + msgCtx->textDelayTimer = 0; + if (msgCtx->msgMode == MSGMODE_9) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + } + } else { + msgCtx->textDelayTimer--; + } + *gfxP = gfx; +} + +s16 D_801CFF70[LANGUAGE_MAX] = { + 4, // LANGUAGE_JPN + 0x12, // LANGUAGE_ENG + 0x12, // LANGUAGE_GER + 0x12, // LANGUAGE_FRE + 0x12, // LANGUAGE_SPA +}; +s16 D_801CFF7C[LANGUAGE_MAX] = { + 0, // LANGUAGE_JPN + 0xE, // LANGUAGE_ENG + 0xE, // LANGUAGE_GER + 0xE, // LANGUAGE_FRE + 0xE, // LANGUAGE_SPA +}; +s16 D_801CFF88[LANGUAGE_MAX] = { + 0, // LANGUAGE_JPN + 0x16, // LANGUAGE_ENG + 0x16, // LANGUAGE_GER + 0x16, // LANGUAGE_FRE + 0x16, // LANGUAGE_SPA +}; + +s16 D_801CFF94[] = { + /* 0x00 */ MESSAGE_ITEM_NONE, + /* 0x01 */ ITEM_RUPEE_GREEN, + /* 0x02 */ ITEM_RUPEE_BLUE, + /* 0x03 */ ITEM_RUPEE_10, + /* 0x04 */ ITEM_RUPEE_RED, + /* 0x05 */ ITEM_RUPEE_PURPLE, + /* 0x06 */ ITEM_RUPEE_SILVER, + /* 0x07 */ ITEM_RUPEE_HUGE, + /* 0x08 */ ITEM_WALLET_ADULT, + /* 0x09 */ ITEM_WALLET_GIANT, + /* 0x0A */ ITEM_RECOVERY_HEART, + /* 0x0B */ ITEM_RECOVERY_HEART, + /* 0x0C */ ITEM_HEART_PIECE, + /* 0x0D */ ITEM_HEART_CONTAINER, + /* 0x0E */ ITEM_MAGIC_JAR_SMALL, + /* 0x0F */ ITEM_MAGIC_JAR_BIG, + /* 0x10 */ ITEM_RECOVERY_HEART, + /* 0x11 */ ITEM_STRAY_FAIRIES, + /* 0x12 */ ITEM_RECOVERY_HEART, + /* 0x13 */ ITEM_RECOVERY_HEART, + /* 0x14 */ ITEM_BOMB, + /* 0x15 */ ITEM_BOMB, + /* 0x16 */ ITEM_BOMB, + /* 0x17 */ ITEM_BOMB, + /* 0x18 */ ITEM_BOMB, + /* 0x19 */ ITEM_DEKU_STICK, + /* 0x1A */ ITEM_BOMBCHU, + /* 0x1B */ ITEM_BOMB_BAG_20, + /* 0x1C */ ITEM_BOMB_BAG_30, + /* 0x1D */ ITEM_BOMB_BAG_40, + /* 0x1E */ ITEM_BOW, + /* 0x1F */ ITEM_BOW, + /* 0x20 */ ITEM_BOW, + /* 0x21 */ ITEM_BOW, + /* 0x22 */ ITEM_QUIVER_30, + /* 0x23 */ ITEM_QUIVER_40, + /* 0x24 */ ITEM_QUIVER_50, + /* 0x25 */ ITEM_ARROW_FIRE, + /* 0x26 */ ITEM_ARROW_ICE, + /* 0x27 */ ITEM_ARROW_LIGHT, + /* 0x28 */ ITEM_DEKU_NUT, + /* 0x29 */ ITEM_DEKU_NUT, + /* 0x2A */ ITEM_DEKU_NUT, + /* 0x2B */ MESSAGE_ITEM_NONE, + /* 0x2C */ MESSAGE_ITEM_NONE, + /* 0x2D */ MESSAGE_ITEM_NONE, + /* 0x2E */ MESSAGE_ITEM_NONE, + /* 0x2F */ ITEM_DEKU_STICK_UPGRADE_20, + /* 0x30 */ MESSAGE_ITEM_NONE, + /* 0x31 */ MESSAGE_ITEM_NONE, + /* 0x32 */ ITEM_SHIELD_HERO, + /* 0x33 */ ITEM_SHIELD_MIRROR, + /* 0x34 */ ITEM_POWDER_KEG, + /* 0x35 */ ITEM_MAGIC_BEANS, + /* 0x36 */ ITEM_PICTOGRAPH_BOX, + /* 0x37 */ ITEM_SWORD_KOKIRI, + /* 0x38 */ ITEM_SWORD_RAZOR, + /* 0x39 */ ITEM_SWORD_GILDED, + /* 0x3A */ ITEM_SWORD_DEITY, + /* 0x3B */ ITEM_SWORD_GREAT_FAIRY, + /* 0x3C */ ITEM_KEY_SMALL, + /* 0x3D */ ITEM_KEY_BOSS, + /* 0x3E */ ITEM_DUNGEON_MAP, + /* 0x3F */ ITEM_COMPASS, + /* 0x40 */ ITEM_POWDER_KEG, + /* 0x41 */ ITEM_HOOKSHOT, + /* 0x42 */ ITEM_LENS_OF_TRUTH, + /* 0x43 */ ITEM_PICTOGRAPH_BOX, + /* 0x44 */ ITEM_FISHING_ROD, + /* 0x45 */ MESSAGE_ITEM_NONE, + /* 0x46 */ MESSAGE_ITEM_NONE, + /* 0x47 */ MESSAGE_ITEM_NONE, + /* 0x48 */ MESSAGE_ITEM_NONE, + /* 0x49 */ MESSAGE_ITEM_NONE, + /* 0x4A */ MESSAGE_ITEM_NONE, + /* 0x4B */ MESSAGE_ITEM_NONE, + /* 0x4C */ ITEM_OCARINA_OF_TIME, + /* 0x4D */ MESSAGE_ITEM_NONE, + /* 0x4E */ MESSAGE_ITEM_NONE, + /* 0x4F */ MESSAGE_ITEM_NONE, + /* 0x50 */ ITEM_BOMBERS_NOTEBOOK, + /* 0x51 */ MESSAGE_ITEM_NONE, + /* 0x52 */ ITEM_SKULL_TOKEN, + /* 0x53 */ MESSAGE_ITEM_NONE, + /* 0x54 */ MESSAGE_ITEM_NONE, + /* 0x55 */ ITEM_REMAINS_ODOLWA, + /* 0x56 */ ITEM_REMAINS_GOHT, + /* 0x57 */ ITEM_REMAINS_GYORG, + /* 0x58 */ ITEM_REMAINS_TWINMOLD, + /* 0x59 */ ITEM_POTION_RED, + /* 0x5A */ ITEM_BOTTLE, + /* 0x5B */ ITEM_POTION_RED, + /* 0x5C */ ITEM_POTION_GREEN, + /* 0x5D */ ITEM_POTION_BLUE, + /* 0x5E */ ITEM_FAIRY, + /* 0x5F */ ITEM_DEKU_PRINCESS, + /* 0x60 */ ITEM_MILK_BOTTLE, + /* 0x61 */ ITEM_MILK_HALF, + /* 0x62 */ ITEM_FISH, + /* 0x63 */ ITEM_BUG, + /* 0x64 */ ITEM_BLUE_FIRE, + /* 0x65 */ ITEM_POE, + /* 0x66 */ ITEM_BIG_POE, + /* 0x67 */ ITEM_SPRING_WATER, + /* 0x68 */ ITEM_HOT_SPRING_WATER, + /* 0x69 */ ITEM_ZORA_EGG, + /* 0x6A */ ITEM_GOLD_DUST, + /* 0x6B */ ITEM_MUSHROOM, + /* 0x6C */ MESSAGE_ITEM_NONE, + /* 0x6D */ MESSAGE_ITEM_NONE, + /* 0x6E */ ITEM_SEAHORSE, + /* 0x6F */ ITEM_CHATEAU, + /* 0x70 */ ITEM_HYLIAN_LOACH, + /* 0x71 */ MESSAGE_ITEM_NONE, + /* 0x72 */ MESSAGE_ITEM_NONE, + /* 0x73 */ MESSAGE_ITEM_NONE, + /* 0x74 */ MESSAGE_ITEM_NONE, + /* 0x75 */ MESSAGE_ITEM_NONE, + /* 0x76 */ MESSAGE_ITEM_NONE, + /* 0x77 */ MESSAGE_ITEM_NONE, + /* 0x78 */ ITEM_MASK_DEKU, + /* 0x79 */ ITEM_MASK_GORON, + /* 0x7A */ ITEM_MASK_ZORA, + /* 0x7B */ ITEM_MASK_FIERCE_DEITY, + /* 0x7C */ ITEM_MASK_TRUTH, + /* 0x7D */ ITEM_MASK_KAFEIS_MASK, + /* 0x7E */ ITEM_MASK_ALL_NIGHT, + /* 0x7F */ ITEM_MASK_BUNNY, + /* 0x80 */ ITEM_MASK_KEATON, + /* 0x81 */ ITEM_MASK_GARO, + /* 0x82 */ ITEM_MASK_ROMANI, + /* 0x83 */ ITEM_MASK_CIRCUS_LEADER, + /* 0x84 */ ITEM_MASK_POSTMAN, + /* 0x85 */ ITEM_MASK_COUPLE, + /* 0x86 */ ITEM_MASK_GREAT_FAIRY, + /* 0x87 */ ITEM_MASK_GIBDO, + /* 0x88 */ ITEM_MASK_DON_GERO, + /* 0x89 */ ITEM_MASK_KAMARO, + /* 0x8A */ ITEM_MASK_CAPTAIN, + /* 0x8B */ ITEM_MASK_STONE, + /* 0x8C */ ITEM_MASK_BREMEN, + /* 0x8D */ ITEM_MASK_BLAST, + /* 0x8E */ ITEM_MASK_SCENTS, + /* 0x8F */ ITEM_MASK_GIANT, + /* 0x90 */ MESSAGE_ITEM_NONE, + /* 0x91 */ ITEM_CHATEAU, + /* 0x92 */ ITEM_MILK_BOTTLE, + /* 0x93 */ ITEM_GOLD_DUST, + /* 0x94 */ ITEM_HYLIAN_LOACH, + /* 0x95 */ ITEM_SEAHORSE, + /* 0x96 */ ITEM_MOONS_TEAR, + /* 0x97 */ ITEM_DEED_LAND, + /* 0x98 */ ITEM_DEED_SWAMP, + /* 0x99 */ ITEM_DEED_MOUNTAIN, + /* 0x9A */ ITEM_DEED_OCEAN, + /* 0x9B */ MESSAGE_ITEM_NONE, + /* 0x9C */ MESSAGE_ITEM_NONE, + /* 0x9D */ MESSAGE_ITEM_NONE, + /* 0x9E */ MESSAGE_ITEM_NONE, + /* 0x9F */ MESSAGE_ITEM_NONE, + /* 0xA0 */ ITEM_ROOM_KEY, + /* 0xA1 */ ITEM_LETTER_MAMA, + /* 0xA2 */ MESSAGE_ITEM_NONE, + /* 0xA3 */ MESSAGE_ITEM_NONE, + /* 0xA4 */ MESSAGE_ITEM_NONE, + /* 0xA5 */ MESSAGE_ITEM_NONE, + /* 0xA6 */ MESSAGE_ITEM_NONE, + /* 0xA7 */ MESSAGE_ITEM_NONE, + /* 0xA8 */ MESSAGE_ITEM_NONE, + /* 0xA9 */ MESSAGE_ITEM_NONE, + /* 0xAA */ ITEM_LETTER_TO_KAFEI, + /* 0xAB */ ITEM_PENDANT_OF_MEMORIES, + /* 0xAC */ MESSAGE_ITEM_NONE, + /* 0xAD */ MESSAGE_ITEM_NONE, + /* 0xAE */ MESSAGE_ITEM_NONE, + /* 0xAF */ MESSAGE_ITEM_NONE, + /* 0xB0 */ MESSAGE_ITEM_NONE, + /* 0xB1 */ MESSAGE_ITEM_NONE, + /* 0xB2 */ MESSAGE_ITEM_NONE, + /* 0xB3 */ ITEM_TINGLE_MAP, + /* 0xB4 */ ITEM_TINGLE_MAP, + /* 0xB5 */ ITEM_TINGLE_MAP, + /* 0xB6 */ ITEM_TINGLE_MAP, + /* 0xB7 */ ITEM_TINGLE_MAP, + /* 0xB8 */ ITEM_TINGLE_MAP, + /* 0xB9 */ ITEM_TINGLE_MAP, + /* 0xBA */ MESSAGE_ITEM_NONE, + /* 0xBB */ MESSAGE_ITEM_NONE, + /* 0xBC */ MESSAGE_ITEM_NONE, + /* 0xBD */ MESSAGE_ITEM_NONE, + /* 0xBE */ MESSAGE_ITEM_NONE, + /* 0xBF */ MESSAGE_ITEM_NONE, + /* 0xC0 */ MESSAGE_ITEM_NONE, + /* 0xC1 */ MESSAGE_ITEM_NONE, + /* 0xC2 */ MESSAGE_ITEM_NONE, + /* 0xC3 */ MESSAGE_ITEM_NONE, + /* 0xC4 */ MESSAGE_ITEM_NONE, + /* 0xC5 */ MESSAGE_ITEM_NONE, + /* 0xC6 */ MESSAGE_ITEM_NONE, + /* 0xC7 */ MESSAGE_ITEM_NONE, + /* 0xC8 */ ITEM_SONG_SONATA, + /* 0xC9 */ ITEM_SONG_SONATA, + /* 0xCA */ ITEM_SONG_SONATA, + /* 0xCB */ ITEM_SONG_LULLABY, + /* 0xCC */ ITEM_SONG_NOVA, + /* 0xCD */ ITEM_SONG_ELEGY, + /* 0xCE */ ITEM_SONG_OATH, + /* 0xCF */ ITEM_SONG_SARIA, + /* 0xD0 */ ITEM_SONG_TIME, + /* 0xD1 */ ITEM_SONG_HEALING, + /* 0xD2 */ ITEM_SONG_EPONA, + /* 0xD3 */ ITEM_SONG_SOARING, + /* 0xD4 */ ITEM_SONG_STORMS, + /* 0xD5 */ ITEM_SONG_SUN, + /* 0xD6 */ ITEM_SONG_LULLABY, + /* 0xD7 */ ITEM_SONG_SONATA, + /* 0xD8 */ ITEM_SONG_SONATA, + /* 0xD9 */ ITEM_SONG_SONATA, + /* 0xDA */ ITEM_SONG_LULLABY, + /* 0xDB */ ITEM_SONG_NOVA, + /* 0xDC */ ITEM_B8, + /* 0xDD */ ITEM_B9, + /* 0xDE */ ITEM_BA, + /* 0xDF */ ITEM_BB, + /* 0xE0 */ ITEM_BC, + /* 0xE1 */ ITEM_BD, + /* 0xE2 */ ITEM_BE, + /* 0xE3 */ ITEM_BF, + /* 0xE4 */ ITEM_C0, + /* 0xE5 */ ITEM_C1, + /* 0xE6 */ ITEM_C2, + /* 0xE7 */ ITEM_C3, + /* 0xE8 */ ITEM_C4, + /* 0xE9 */ ITEM_C5, + /* 0xEA */ ITEM_C6, + /* 0xEB */ ITEM_C7, + /* 0xEC */ ITEM_C8, + /* 0xED */ ITEM_C9, + /* 0xEE */ ITEM_CA, + /* 0xEF */ ITEM_CB, + /* 0xF0 */ ITEM_CC, + /* 0xF1 */ MESSAGE_ITEM_NONE, + /* 0xF2 */ MESSAGE_ITEM_NONE, + /* 0xF3 */ MESSAGE_ITEM_NONE, + /* 0xF4 */ MESSAGE_ITEM_NONE, + /* 0xF5 */ MESSAGE_ITEM_NONE, + /* 0xF6 */ MESSAGE_ITEM_NONE, + /* 0xF7 */ MESSAGE_ITEM_NONE, + /* 0xF8 */ MESSAGE_ITEM_NONE, + /* 0xF9 */ MESSAGE_ITEM_NONE, +}; + +void Message_LoadItemIcon(PlayState* play, u16 itemId, s16 arg2) { + MessageContext* msgCtx = &play->msgCtx; + u16* new_var2 = &itemId; + + if (itemId == ITEM_RECOVERY_HEART) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + } else if ((itemId >= ITEM_RUPEE_GREEN) && (itemId <= ITEM_RUPEE_HUGE)) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + } else if (itemId == ITEM_STRAY_FAIRIES) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x20; + } else if ((itemId >= ITEM_SONG_SONATA) && (itemId <= ITEM_SONG_SUN)) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF88[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x10; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000, + 0x180); + } else if (itemId == ITEM_BOMBERS_NOTEBOOK) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 6); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), ITEM_SONG_SONATA, msgCtx->textboxSegment + 0x1000, + 0x1000); + } else if (itemId <= ITEM_REMAINS_TWINMOLD) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 6); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), itemId, msgCtx->textboxSegment + 0x1000, 0x1000); + } else if (itemId == ITEM_CC) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 8); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), ITEM_POTION_BLUE, msgCtx->textboxSegment + 0x1000, + 0x400); + } else if (itemId >= ITEM_B8) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF70[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 8); + msgCtx->unk12014 = 0x20; + CmpDma_LoadFile(SEGMENT_ROM_START(schedule_dma_static_yar), (itemId - ITEM_B8), msgCtx->textboxSegment + 0x1000, + 0x800); + } else if (itemId >= ITEM_SKULL_TOKEN) { + msgCtx->unk12010 = (msgCtx->unk11FF8 - D_801CFF7C[gSaveContext.options.language]); + msgCtx->unk12012 = (arg2 + 0xA); + msgCtx->unk12014 = 0x18; + CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_24_static_yar), (itemId - ITEM_SKULL_TOKEN), + msgCtx->textboxSegment + 0x1000, 0x900); + } + + if (play->pauseCtx.bombersNotebookOpen) { + msgCtx->unk12010 = ((msgCtx->unk12010 * 1.4f) + 2.0f); + msgCtx->unk12014 = (msgCtx->unk12014 * 1.4f); + } + + msgCtx->choiceNum = 1; +} void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; @@ -255,11 +1901,11 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) Font_LoadChar(play, 0x838B, k); // 0x838B = ル in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x838B; - t += 1; + t++; Font_LoadChar(play, 0x8373, k); // 0x8373 = ピ in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x8373; - t += 1; + t++; Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x815C; @@ -270,63 +1916,1411 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) *arg3 = f; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014CDF0.s") +/* + * offsetting to actual codepoints is done outside this function + * every digit will be added 0x824F to get an actual S-JIS + * printable character. + */ +void Message_GetTimerDigits(OSTime time, s16* digits) { + OSTime t = time; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s") + // 6 minutes + digits[0] = t / SECONDS_TO_TIMER(360); + t -= digits[0] * SECONDS_TO_TIMER(360); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s") + // minutes + digits[1] = t / SECONDS_TO_TIMER(60); + t -= digits[1] * SECONDS_TO_TIMER(60); -extern u16 D_801D0188[OWL_WARP_MAX][9]; -extern s16 D_801D0250[OWL_WARP_MAX]; + digits[2] = 0x135B; // 0x135B + 0x824F = 分 (minutes) in S-JIS -void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) { + // 10 seconds + digits[3] = t / SECONDS_TO_TIMER(10); + t -= digits[3] * SECONDS_TO_TIMER(10); + + // seconds + digits[4] = t / SECONDS_TO_TIMER(1); + t -= digits[4] * SECONDS_TO_TIMER(1); + + digits[5] = 0x1313; // 0x1313 + 0x824F = 秒 (seconds) in S-JIS + + // 100 milliseconds + digits[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= digits[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + + // 10 milliseconds + digits[7] = t; +} + +void Message_SetupLoadItemIcon(PlayState* play) { + Font* font; + MessageContext* msgCtx = &play->msgCtx; + + font = &msgCtx->font; + if (msgCtx->msgBufPos == 0) { + if (font->msgBuf.schar[msgCtx->msgBufPos + 2] != 0xFE) { + msgCtx->unk11F18 = 0; + if ((msgCtx->currentTextId == 0x176F) || (msgCtx->currentTextId == 0x1770) || + (msgCtx->currentTextId == 0x1771)) { + msgCtx->itemId = ITEM_OCARINA_OF_TIME; + msgCtx->msgBufPos += 2; + } else { + msgCtx->msgBufPos += 2; + if ((font->msgBuf.schar[msgCtx->msgBufPos] < 0xC8) || (font->msgBuf.schar[msgCtx->msgBufPos] >= 0xD8)) { + msgCtx->itemId = D_801CFF94[(u8)font->msgBuf.schar[msgCtx->msgBufPos]]; + } else { + msgCtx->itemId = 0xFE; + } + } + } else { + msgCtx->msgBufPos += 2; + msgCtx->itemId = font->msgBuf.schar[msgCtx->msgBufPos]; + } + msgCtx->nextTextId = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->nextTextId |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk1206C = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk1206C |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk12070 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk12070 |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->unk12074 = font->msgBuf.schar[++msgCtx->msgBufPos] << 8; + msgCtx->unk12074 |= font->msgBuf.schar[++msgCtx->msgBufPos]; + + msgCtx->msgBufPos++; + if (msgCtx->itemId != 0xFE) { + Message_LoadItemIcon(play, msgCtx->itemId, msgCtx->textboxY + 10); + } + } +} + +void Message_LoadTime(PlayState* play, u16 curChar, s32* offset, f32* arg3, s16* decodedBufPos) { + MessageContext* msgCtx = &play->msgCtx; + s16 i; + s16 p = *decodedBufPos; + s32 o = *offset; + f32 f = *arg3; + u32 dayTime; + s16 digits[4]; + f32 timeInMinutes; + + if (curChar == 0x20F) { + dayTime = TIME_UNTIL_MOON_CRASH; + } else { + dayTime = TIME_UNTIL_NEW_DAY; + } + timeInMinutes = TIME_TO_MINUTES_F(dayTime); + + digits[0] = 0; + digits[1] = (timeInMinutes / 60.0f); + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInMinutes % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, o); // 0x824F = '0' in S-JIS + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = digits[i] + 0x824F; + p++; + if (i == 1) { + // Hours (時間) + Font_LoadChar(play, 0x8E9E, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x8E9E; + p++; + Font_LoadChar(play, 0x8AD4, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x8E9E; + p++; + } else if (i == 3) { + // Minutes (分) + Font_LoadChar(play, 0x95AA, o); + o += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[p] = 0x95AA; + } + } + + f += 7.0f * (16.0f * msgCtx->textCharScale); + *decodedBufPos = p; + *offset = o; + *arg3 = f; +} + +#define GREAT_BAY_COAST_STR \ + { 0x834F, 0x838C, 0x815B, 0x8367, 0x8378, 0x8343, 0x82CC, 0x8A43, 0x8ADD } +#define ZORA_CAPE_STR \ + { 0x835D, 0x815B, 0x8389, 0x82CC, 0x82DD, 0x82B3, 0x82AB } +#define SNOWHEAD_STR \ + { 0x8358, 0x836D, 0x815B, 0x8377, 0x8362, 0x8368 } +#define MOUNTAIN_VILLAGE_STR \ + { 0x8E52, 0x97A2 } +#define CLOCK_TOWN_STR \ + { 0x834E, 0x838D, 0x8362, 0x834E, 0x835E, 0x8345, 0x8393 } +#define MILK_ROAD_STR \ + { 0x837E, 0x838B, 0x834E, 0x838D, 0x815B, 0x8368 } +#define WOODFALL_STR \ + { 0x8345, 0x8362, 0x8368, 0x8374, 0x8348, 0x815B, 0x838B } +#define SOUTHERN_SWAMP_STR \ + { 0x8FC0, 0x926E } +#define IKANA_CANYON_STR \ + { 0x8343, 0x834A, 0x815B, 0x8369, 0x8C6B, 0x924A } +#define STONE_TOWER_STR \ + { 0x838D, 0x8362, 0x834E, 0x8372, 0x838B } +#define ENTRANCE_STR \ + { 0x93FC, 0x82E8, 0x8CFB } + +// Shift JIS +u16 sOwlWarpTextJPN[OWL_WARP_MAX][9] = { + GREAT_BAY_COAST_STR, // OWL_WARP_GREAT_BAY_COAST + ZORA_CAPE_STR, // OWL_WARP_ZORA_CAPE + SNOWHEAD_STR, // OWL_WARP_SNOWHEAD + MOUNTAIN_VILLAGE_STR, // OWL_WARP_MOUNTAIN_VILLAGE + CLOCK_TOWN_STR, // OWL_WARP_CLOCK_TOWN + MILK_ROAD_STR, // OWL_WARP_MILK_ROAD + WOODFALL_STR, // OWL_WARP_WOODFALL + SOUTHERN_SWAMP_STR, // OWL_WARP_SOUTHERN_SWAMP + IKANA_CANYON_STR, // OWL_WARP_IKANA_CANYON + STONE_TOWER_STR, // OWL_WARP_STONE_TOWER + ENTRANCE_STR, // OWL_WARP_ENTRANCE +}; + +//! TODO: use sizeof when we have strings +s16 sOwlWarpTextLengthJPN[OWL_WARP_MAX] = { + 9, // OWL_WARP_GREAT_BAY_COAST + 7, // OWL_WARP_ZORA_CAPE + 6, // OWL_WARP_SNOWHEAD + 2, // OWL_WARP_MOUNTAIN_VILLAGE + 7, // OWL_WARP_CLOCK_TOWN + 6, // OWL_WARP_MILK_ROAD + 7, // OWL_WARP_WOODFALL + 2, // OWL_WARP_SOUTHERN_SWAMP + 6, // OWL_WARP_IKANA_CANYON + 5, // OWL_WARP_STONE_TOWER + 3, // OWL_WARP_ENTRANCE +}; + +void Message_LoadOwlWarpText(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) { MessageContext* msgCtx = &play->msgCtx; PauseContext* pauseCtx = &play->pauseCtx; s16 stringLimit; - s16 temp_s1 = *arg3; - s32 temp_s2 = *arg1; + s16 curDecodedBufPos = *decodedBufPos; + s32 temp_s2 = *offset; f32 sp3C = *arg2; s16 owlWarpId; - s16 phi_s0; + s16 i; if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { owlWarpId = OWL_WARP_ENTRANCE; } else { owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; } - stringLimit = D_801D0250[owlWarpId]; + stringLimit = sOwlWarpTextLengthJPN[owlWarpId]; - for (phi_s0 = 0; phi_s0 < stringLimit; phi_s0++, temp_s1++, temp_s2 += 0x80) { - msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[owlWarpId][phi_s0]; - Font_LoadChar(play, D_801D0188[owlWarpId][phi_s0], temp_s2); + for (i = 0; i < stringLimit; i++, curDecodedBufPos++, temp_s2 += FONT_CHAR_TEX_SIZE) { + msgCtx->decodedBuffer.wchar[curDecodedBufPos] = sOwlWarpTextJPN[owlWarpId][i]; + Font_LoadChar(play, sOwlWarpTextJPN[owlWarpId][i], temp_s2); } - temp_s1--; + curDecodedBufPos--; sp3C += (stringLimit - 1) * (16.0f * msgCtx->textCharScale); - *arg3 = temp_s1; - *arg1 = temp_s2; + *decodedBufPos = curDecodedBufPos; + *offset = temp_s2; *arg2 = sp3C; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D7B4.s") +// Counterpart to NES D_801D08D8 +u16 D_801D0268[][3] = { + { 0x82CD, 0x82E2, 0x82A2 }, + { 0x82D3, 0x82C2, 0x82A4 }, + { 0x82A8, 0x82BB, 0x82A2 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150A84.s") +// Counterpart to NES D_801D08E4 +u16 D_801D027C[] = { 0x2001, 0x2003, 0x2004, 0x2002 }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80150D08.s") +// Counterpart to NES sMaskCodeTextENG +u16 D_801D0284[] = { 0x90D4, 0x90C2, 0x89A9, 0x97CE }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801514B0.s") +#ifdef NON_MATCHING +// https://decomp.me/scratch/ZTbP4 +void Message_Decode(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; // spF0 + Player* player; // spEC + s16 decodedBufPos; // spEA + u32 timeToMoonCrash; + s16 temp2; + s16 spE0; + s32 pad4; + s16 digits[4]; // spD4/D6/D8/DA + s16 spD2; + f32 timeInSeconds; + s32 charTexIdx; // spC8 + s16 var_v0; + s16 loadChar; + f32 spC0; + f32 var_fs0; + s16 index; + s16 value; + s16 playerNameLen; + s16 i; // s1 + s16 spAC[4]; + u8 var_s3_8; + u16 curChar; + u32 temp; + u8* ptr2; + + player = GET_PLAYER(play); + msgCtx->textDelayTimer = 0; + msgCtx->textDelay = msgCtx->textDelayTimer; + msgCtx->textFade = 0; + spC0 = 0.0f; + font->unk_11D88 = (font->unk_11D88 ^ 1) & 1; + + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + spD2 = 0; + spE0 = 0; + decodedBufPos = 0; + charTexIdx = 0; + Message_SetupLoadItemIcon(play); + + while (true) { + curChar = msgCtx->decodedBuffer.wchar[decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos]; + + if ((curChar == 9) || (curChar == 0xB) || (curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112) || + (curChar == 0x103) || (curChar == 0x230) || (curChar == 0x500) || (curChar == 0x240) || + (curChar == 0x104)) { + + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos = 1; + msgCtx->unk11FFA = msgCtx->textboxY + 6; + msgCtx->unk11F1A[spD2] = 0; + if (msgCtx->unk11F18 == 0) { + msgCtx->unk11F1A[spD2] = (s16)((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) / 2; + } + spC0 = 0.0f; + if (curChar == 0xB) { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spE0 < 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 0x16; + } else if (spE0 == 2) { + msgCtx->unk11FFA = msgCtx->textboxY + 0xE; + } + } + } else { + if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) { + if (spE0 == 0) { + msgCtx->unk11FFA = msgCtx->textboxY + 0x16; + } else if (spE0 == 1) { + msgCtx->unk11FFA = msgCtx->textboxY + 0xE; + } + } + } + + { + s32 pad; + + if ((curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112)) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos + 1]; + msgCtx->msgBufPos += 2; + } + } + + msgCtx->decodedTextLen = decodedBufPos; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } + msgCtx->unk120C8 = msgCtx->unk120CE; + msgCtx->unk120CA = msgCtx->unk120D0; + msgCtx->unk120CC = msgCtx->unk120D2; + break; + } + + if (curChar == 0x100) { + for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0; + playerNameLen--) { + if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.playerData.playerName[i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x100; + + for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = + ptr2[var_v0 + 0] & 0xFF; //! FAKE: Fixes later regalloc + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spC0 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x201) { + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900); + DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900, + (uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900); + spE0 = 2; + spD2 = 2; + msgCtx->unk12012 = msgCtx->textboxY + 8; + msgCtx->unk11F18 = 1; + msgCtx->unk12010 = XREG(47); + } else if (curChar == 0x202) { + msgCtx->unk11F18 = 1; + msgCtx->choiceNum = 2; + } else if (curChar == 0x203) { + msgCtx->unk11F18 = 1; + msgCtx->choiceNum = 3; + msgCtx->unk11FF8 = msgCtx->unk11FF8 + 0x16; + } else if (curChar == 0x204) { + Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC); + + loadChar = false; + for (i = 0; i < 5; i++) { + if ((i == 1) || (spAC[i + 3] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, spAC[i + 3] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if ((curChar == 0x205) || (curChar == 0x206) || (curChar == 0x207) || (curChar == 0x208) || + (curChar == 0x209)) { + Message_GetTimerDigits(((void)0, gSaveContext.timerCurTimes[curChar - 0x204]), spAC); + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, spAC[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x20A) { + digits[0] = 0; + timeInSeconds = TIME_TO_MINUTES_F(gSaveContext.save.time); + digits[1] = timeInSeconds / 60.0f; + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + digits[2] = 0; + digits[3] = (s32)timeInSeconds % 60; + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + if (i == 1) { + Font_LoadChar(play, 0x8E9E, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + decodedBufPos++; + } else if (i == 3) { + Font_LoadChar(play, 0x95AA, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; + } + } + spC0 += 6 * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x20B) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = Flags_GetAllTreasure(play); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x20C) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 2; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + + for (i = 0; i < 3; i++) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20D) { + digits[0] = digits[1] = 0; + digits[2] = msgCtx->bankRupeesSelected; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20E) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = msgCtx->bankRupees; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x20F) { + Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos); + } else if (curChar == 0x21C) { + digits[0] = digits[1] = 0; + digits[2] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + Message_LoadChar(play, 0x96DA, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x21D) { + digits[0] = digits[1] = 0; + digits[2] = Inventory_GetSkullTokenCount(play->sceneId); + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x21E) { + digits[0] = 0; + digits[1] = gSaveContext.minigameScore; + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x21F) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + decodedBufPos--; + } else if (curChar == 0x220) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + digits[0] = digits[1] = digits[2] = 0; + for (i = 0; i < 2; i++) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x221) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 5; i++) { + msgCtx->unk12054[i] = 1; + Message_LoadChar(play, 0x8250, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0x223) { + if (gSaveContext.save.timeSpeedOffset == 0x12) { + var_s3_8 = 0; + } else if (gSaveContext.save.timeSpeedOffset == 0) { + var_s3_8 = 1; + } else { + var_s3_8 = 2; + } + + for (i = 0; i < 3; i++) { + msgCtx->decodedBuffer.wchar[decodedBufPos] = D_801D0268[var_s3_8][i]; + Font_LoadChar(play, D_801D0268[var_s3_8][i], charTexIdx); + decodedBufPos++; + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos--; + spC0 += 3.0f * (16.0f * msgCtx->textCharScale); + msgCtx->choiceIndex = var_s3_8; + } else if (curChar == 0x224) { + Message_LoadOwlWarpText(play, &charTexIdx, &spC0, &decodedBufPos); + } else if (curChar == 0x225) { + decodedBufPos++; + msgCtx->unk120BE = spD2; + msgCtx->unk120C0 = decodedBufPos; + msgCtx->unk120C2 = 0; + msgCtx->bankRupeesSelected = 0; + msgCtx->unk120C4 = charTexIdx; + + for (i = 0; i < 3; i++) { + msgCtx->unk12054[i] = 1; + Font_LoadChar(play, 0x8250, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8250; + spC0 += 16.0f * msgCtx->textCharScale; + decodedBufPos++; + } + decodedBufPos--; + } else if (curChar == 0x226) { + for (i = 0; i < 6; i++) { + msgCtx->decodedBuffer.wchar[decodedBufPos] = + D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[i])]; + decodedBufPos++; + Message_LoadChar(play, i + 0x8250, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; + } else if ((curChar >= 0x227) && (curChar < 0x22B)) { + digits[0] = digits[1] = 0; + digits[2] = 15 - gSaveContext.save.saveInfo.inventory.strayFairies[curChar - 0x227]; + + while (digits[2] >= 100) { + digits[0]++; + digits[2] -= 100; + } + while (digits[2] >= 10) { + digits[1]++; + digits[2] -= 10; + } + + loadChar = false; + for (i = 0; i < 3; i++) { + if ((i == 2) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x906C, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x22B) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gSaveContext.minigameScore; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos); + } else if ((curChar == 0x22C) || (curChar == 0x22D)) { + if (curChar == 0x22C) { + digits[0] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]; + digits[1] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]; + digits[2] = gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]; + } else { + digits[0] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF00) >> 8; + digits[1] = (HS_GET_LOTTERY_CODE_GUESS() & 0xF0) >> 4; + digits[2] = HS_GET_LOTTERY_CODE_GUESS() & 0xF; + } + for (i = 0; i < 3; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if (curChar == 0x22E) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)]; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + func_8014CCB4(play, &decodedBufPos, &charTexIdx, &spC0); + } else if (curChar == 0x22F) { + for (i = 0; i < 5; i++) { + digits[i] = gSaveContext.save.saveInfo.bomberCode[i]; + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + decodedBufPos--; + } else if ((curChar >= 0x231) && (curChar < 0x237)) { + // index = curChar - 0x231; + msgCtx->decodedBuffer.wchar[decodedBufPos] = + D_801D027C[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])]; + decodedBufPos++; + Message_LoadChar( + play, + D_801D0284[((void)0, gSaveContext.save.saveInfo.spiderHouseMaskOrder[(s16)(curChar - 0x231)])], + &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x2000; + } else if (curChar == 0x237) { + timeToMoonCrash = TIME_UNTIL_MOON_CRASH; + digits[0] = 0; + digits[1] = TIME_TO_HOURS_F_ALT(timeToMoonCrash); + + while (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + + loadChar = false; + for (i = 0; i < 2; i++) { + if ((i == 1) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Message_LoadChar(play, digits[i] + 0x824F, &charTexIdx, &spC0, decodedBufPos); + decodedBufPos++; + } + } + Font_LoadChar(play, 0x8E9E, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + decodedBufPos++; + Font_LoadChar(play, 0x8AD4, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x8E9E; + spC0 += 2.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x238) { + Message_LoadTime(play, curChar, &charTexIdx, &spC0, &decodedBufPos); + } else if ((curChar == 0x300) || (curChar == 0x301) || (curChar == 0x302) || (curChar == 0x308)) { + if (curChar == 0x308) { + value = (s32)HS_GET_HIGH_SCORE_3_LOWER(); + } else { + value = HIGH_SCORE(curChar - 0x300); + } + if (curChar == 0x302) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + value &= 0x7F; + } else { + value = (s16)((HIGH_SCORE(font->msgBuf.wchar[msgCtx->msgBufPos]) & 0xFF000000) >> 0x18) & 0x7F; + } + } + digits[3] = value; + digits[0] = digits[1] = digits[2] = 0; + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + decodedBufPos--; + } else if ((curChar == 0x307) || (curChar == 0x309) || (curChar == 0x30A) || (curChar == 0x30B) || + (curChar == 0x30C)) { + var_fs0 = 8.0f; + if (curChar == 0x307) { + Message_GetTimerDigits(GET_HIGH_SCORE(HS_UNK_1), spAC); + } else if (curChar == 0x309) { + Message_GetTimerDigits(GET_HIGH_SCORE(HS_HORSE_BACK_BALLOON), spAC); + } else { + Message_GetTimerDigits( + ((void)0, gSaveContext.save.saveInfo.dekuPlaygroundHighScores[curChar - 0x30A]), spAC); + } + + loadChar = false; + for (i = 0; i < 8; i++) { + if ((i == 4) || ((i != 2) && (i != 5) && (spAC[i] != '\0'))) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, spAC[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = spAC[i] + 0x824F; + decodedBufPos++; + } else { + var_fs0 -= 1.0f; + } + } + spC0 += var_fs0 * (16.0f * msgCtx->textCharScale); + decodedBufPos--; + } else if ((curChar == 0x303) || (curChar == 0x304) || (curChar == 0x305)) { + temp2 = HIGH_SCORE(curChar - 0x303 + HS_BOAT_ARCHERY); + digits[0] = digits[1] = digits[2] = 0; + digits[3] = temp2; + + while (digits[3] >= 60) { + digits[1]++; + if (digits[1] >= 10) { + digits[0]++; + digits[1] -= 10; + } + digits[3] -= 60; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + for (i = 0; i < 4; i++) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + if (i == 1) { + Font_LoadChar(play, 0x95AA, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x95AA; + decodedBufPos++; + } else if (i == 3) { + Font_LoadChar(play, 0x9562, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = 0x9562; + } + } + spC0 += 4.0f * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x306) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos); + } else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) { + //! Removing index and casting one version causes gSaveContext to be reloaded + // index = curChar - 0x30D; + + for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) { + if (gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[(s16)(curChar - 0x30D)][playerNameLen - 1] != 0x3E) { + break; + } + } + + for (i = 0; i < playerNameLen; i++) { + ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory + .dekuPlaygroundPlayerName[curChar - 0x30D][i]) * + FONT_CHAR_TEX_SIZE]; + msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x30D; + + for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) { + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = ptr2[var_v0 + 0]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2]; + font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3]; + } + charTexIdx += FONT_CHAR_TEX_SIZE; + } + decodedBufPos += playerNameLen - 1; + spC0 += playerNameLen * (16.0f * msgCtx->textCharScale); + } else if (curChar == 0x310) { + digits[0] = digits[1] = digits[2] = 0; + digits[3] = HS_GET_BOAT_ARCHERY_HIGH_SCORE(); + + while (digits[3] >= 1000) { + digits[0]++; + digits[3] -= 1000; + } + while (digits[3] >= 100) { + digits[1]++; + digits[3] -= 100; + } + while (digits[3] >= 10) { + digits[2]++; + digits[3] -= 10; + } + + loadChar = false; + for (i = 0; i < 4; i++) { + if ((i == 3) || (digits[i] != 0)) { + loadChar = true; + } + if (loadChar) { + Font_LoadChar(play, digits[i] + 0x824F, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + msgCtx->decodedBuffer.wchar[decodedBufPos] = digits[i] + 0x824F; + decodedBufPos++; + spC0 += 16.0f * msgCtx->textCharScale; + } + } + Message_LoadChar(play, 0x94AD, &charTexIdx, &spC0, decodedBufPos); + } else if (curChar == 0x1F) { + decodedBufPos--; + for (i = 0; i < font->msgBuf.wchar[msgCtx->msgBufPos + 1]; i++) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = ' '; + spC0 += 6.0f; + } + msgCtx->msgBufPos++; + } else if ((curChar == 0xC) || (curChar == 0xA)) { + msgCtx->unk11F1A[spD2] = 0; + if (msgCtx->unk11F18 == 0) { + msgCtx->unk11F1A[spD2] = ((msgCtx->textCharScale * 16.0f * 16.0f) - spC0) * 0.5f; + } + spD2++; + spC0 = 0.0f; + if (curChar == 0xA) { + spE0++; + } + } else if ((curChar == 0x101) || (curChar == 0x102) || (curChar == 0x104) || + ((curChar >= 0x130) && (curChar < 0x137))) { + // pass + } else if (curChar == 0x111) { + msgCtx->textFade = true; + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos] & 0xFF; + } else if (curChar == 0x120) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos]; + if (msgCtx->textboxSkipped || (msgCtx->textBoxType == TEXTBOX_TYPE_1) || + (msgCtx->textBoxType == TEXTBOX_TYPE_3) || (msgCtx->textBoxType == TEXTBOX_TYPE_6) || + (msgCtx->textBoxType == TEXTBOX_TYPE_8) || (msgCtx->textBoxType == TEXTBOX_TYPE_9) || + (msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) { + Audio_PlaySfx(msgCtx->decodedBuffer.wchar[decodedBufPos]); + } + } else if (curChar == 0x128) { + msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[++msgCtx->msgBufPos]; + } else if ((curChar != 0x20) && ((curChar < 0x2000) || (curChar >= 0x2009))) { + Font_LoadChar(play, curChar, charTexIdx); + charTexIdx += FONT_CHAR_TEX_SIZE; + if ((curChar == 0x8169) || (curChar == 0x8175)) { + spC0 += 10.0f * msgCtx->textCharScale; + } else if (curChar == 0x8145) { + spC0 += (12.0f * msgCtx->textCharScale); + } else if ((curChar == 0x8148) || (curChar == 0x8149)) { + spC0 += 14.0f * msgCtx->textCharScale; + } else if (curChar == 0x8144) { + spC0 += 8.0f * msgCtx->textCharScale; + } else if ((curChar == 0x816A) || (curChar == 0x8176)) { + spC0 += 10.0f * msgCtx->textCharScale; + } else if ((curChar == 0x8141) || (curChar == 0x8142) || (curChar == 0x8168)) { + spC0 += 12.0f * msgCtx->textCharScale; + } else if (curChar == 0x8194) { + spC0 += 14.0f * msgCtx->textCharScale; + } else { + spC0 += 16.0f * msgCtx->textCharScale; + } + + } else if (curChar == 0x20) { + spC0 += 6.0f; + } + + decodedBufPos++; + msgCtx->msgBufPos++; + } + } else if (msgCtx->textIsCredits) { + Message_DecodeCredits(play); + } else { + Message_DecodeNES(play); + } +} +#else +void Message_Decode(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Decode.s") +#endif + +void func_80150A84(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; + s32 textBoxType = msgCtx->textBoxType; + + if (D_801CFC78[textBoxType] != 14) { + DmaMgr_SendRequest0(msgCtx->textboxSegment, + &SEGMENT_ROM_START(message_static)[D_801CFC78[textBoxType] * 0x1000], 0x1000); + + if (!play->pauseCtx.bombersNotebookOpen) { + if ((textBoxType == TEXTBOX_TYPE_0) || (textBoxType == TEXTBOX_TYPE_6) || (textBoxType == TEXTBOX_TYPE_A) || + (textBoxType == TEXTBOX_TYPE_B)) { + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + } else if (textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textboxColorRed = 70; + msgCtx->textboxColorGreen = 50; + msgCtx->textboxColorBlue = 30; + } else if ((textBoxType == TEXTBOX_TYPE_2) || (textBoxType == TEXTBOX_TYPE_8)) { + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 10; + msgCtx->textboxColorBlue = 50; + } else if (textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 255; + msgCtx->textboxColorBlue = 195; + } else { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + } + + if (textBoxType == TEXTBOX_TYPE_1) { + msgCtx->textboxColorAlphaTarget = 230; + } else if (textBoxType == TEXTBOX_TYPE_3) { + msgCtx->textboxColorAlphaTarget = 180; + } else if (textBoxType == TEXTBOX_TYPE_D) { + msgCtx->textboxColorAlphaTarget = 220; + } else { + msgCtx->textboxColorAlphaTarget = 170; + } + } else { + msgCtx->textboxColorRed = 255; + msgCtx->textboxColorGreen = 255; + msgCtx->textboxColorBlue = 255; + msgCtx->textboxColorAlphaTarget = 255; + } + msgCtx->textboxColorAlphaCurrent = 0; + } +} + +void Message_OpenText(PlayState* play, u16 textId) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; + Player* player = GET_PLAYER(play); + f32 var_fv0; + + if (play->msgCtx.msgMode == MSGMODE_NONE) { + gSaveContext.prevHudVisibility = gSaveContext.hudVisibility; + } + + if (textId == 0xFF) { + func_80115844(play, DO_ACTION_STOP); + play->msgCtx.hudVisibility = gSaveContext.hudVisibility; + Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C); + gSaveContext.save.unk_06 = 20; + } else if ((textId == 0x579) || (textId == 0x8D8)) { + Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE); + } else if (((textId == 0x28) || (textId == 0x29) || (textId == 0x2A)) && + (player->transformation == PLAYER_FORM_DEKU)) { + //! FAKE: + if (msgCtx) {} + textId = 0xC9; + } else if (textId == 0x11) { + if (gSaveContext.save.saveInfo.inventory.strayFairies[((void)0, gSaveContext.dungeonIndex)] == 0xF) { + textId = 0xF3; + } + } else if ((textId == 0x92) && (play->sceneId == SCENE_KOEPONARACE)) { + textId = 0xCD; + } + + if ((textId == 0xC) && (GET_QUEST_HEART_PIECE_COUNT != 0)) { + textId = GET_QUEST_HEART_PIECE_COUNT; + textId += 0xC4; + } + + msgCtx->currentTextId = textId; + + if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) || + (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7)) { + Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE); + } + + msgCtx->messageHasSetSfx = false; + D_801C6A70 = 0; + msgCtx->textboxSkipped = false; + msgCtx->textIsCredits = false; + var_fv0 = 1.0f; + + if (play->pauseCtx.bombersNotebookOpen) { + if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 1.4f; + msgCtx->unk11FFC = 0x1E; + msgCtx->unk11FF8 = 0x32; + var_fv0 = 1.4; + } else { + msgCtx->textCharScale = 1.4f; + msgCtx->unk11FFC = 0x16; + msgCtx->unk11FF8 = 0x32; + var_fv0 = 1.4; + } + } else if (textId >= 0x4E20) { + msgCtx->textIsCredits = true; + msgCtx->textCharScale = 0.85f; + msgCtx->unk11FFC = 6; + msgCtx->unk11FF8 = 0x14; + } else if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 0.88f; + msgCtx->unk11FFC = 0x12; + msgCtx->unk11FF8 = 0x32; + } else { + msgCtx->textCharScale = 0.75f; + msgCtx->unk11FFC = 0xC; + msgCtx->unk11FF8 = 0x41; + } + + sCharTexSize = msgCtx->textCharScale * 16.0f; + sCharTexScale = 1024.0f / msgCtx->textCharScale; + D_801F6B08 = 1024.0f / var_fv0; + + if (msgCtx->textIsCredits) { + Message_FindCreditsMessage(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(staff_message_data_static)[font->messageStart], + font->messageEnd); + } else if (gSaveContext.options.language == LANGUAGE_JPN) { + Message_FindMessage(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } else { + Message_FindMessageNES(play, textId); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } + + msgCtx->choiceNum = 0; + msgCtx->textUnskippable = false; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + msgCtx->textDrawPos = 0; + msgCtx->msgBufPos = 0; + msgCtx->decodedTextLen = 0; + + msgCtx->unk11F08 = font->msgBuf.schar[msgCtx->msgBufPos] << 8; + msgCtx->unk11F08 |= font->msgBuf.schar[msgCtx->msgBufPos + 1]; + + msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC; + msgCtx->textBoxType = (msgCtx->unk11F08 & 0xF00) >> 8; + msgCtx->textBoxPos = (msgCtx->unk11F08 & 0xF0) >> 4; + msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF; + + if ((msgCtx->unk11F0C == 1) || (msgCtx->unk11F0C == 3)) { + msgCtx->textUnskippable = true; + } + msgCtx->itemId = 0xFE; + + if ((msgCtx->textBoxType == TEXTBOX_TYPE_5) || (msgCtx->textBoxType == TEXTBOX_TYPE_D) || + (play->pauseCtx.bombersNotebookOpen)) { + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0; + } else { + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2 = 0xFF; + } + + msgCtx->choiceIndex = 0; + + if (msgCtx->unk11F0C != 3) { + msgCtx->textColorAlpha = 0xFF; + } else { + msgCtx->textColorAlpha = 0; + } + + if (textId == 0x1467) { + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); + } + + if (textId == 0x2955) { + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ANJU); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK); + } +} + +void func_801514B0(PlayState* play, u16 arg1, u8 arg2) { + MessageContext* msgCtx = &play->msgCtx; + Font* font = &msgCtx->font; + Player* player = GET_PLAYER(play); + f32 temp = 1024.0f; + + msgCtx->ocarinaAction = 0xFFFF; + + if (msgCtx->msgMode == MSGMODE_NONE) { + gSaveContext.prevHudVisibility = gSaveContext.hudVisibility; + } + msgCtx->messageHasSetSfx = false; + D_801C6A70 = 0; + msgCtx->textboxSkipped = false; + msgCtx->textIsCredits = false; + + if (gSaveContext.options.language == LANGUAGE_JPN) { + msgCtx->textCharScale = 0.88f; + msgCtx->unk11FFC = 0x12; + msgCtx->unk11FF8 = 0x32; + } else { + msgCtx->textCharScale = 0.75f; + msgCtx->unk11FFC = 0xC; + msgCtx->unk11FF8 = 0x41; + } + + sCharTexSize = msgCtx->textCharScale * 16.0f; + sCharTexScale = temp / msgCtx->textCharScale; + D_801F6B08 = temp / 1; + + if ((arg1 == 0x1709) && (player->transformation == 3)) { + arg1 = 0x1705; + } + + msgCtx->currentTextId = arg1; + + if (gSaveContext.options.language == LANGUAGE_JPN) { + Message_FindMessage(play, arg1); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } else { + Message_FindMessageNES(play, arg1); + msgCtx->msgLength = font->messageEnd; + DmaMgr_SendRequest0(&font->msgBuf, &SEGMENT_ROM_START(message_data_static)[font->messageStart], + font->messageEnd); + } + msgCtx->choiceNum = 0; + msgCtx->textUnskippable = false; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + msgCtx->textDrawPos = 0; + msgCtx->msgBufPos = 0; + msgCtx->decodedTextLen = 0; + msgCtx->unk11F08 = font->msgBuf.wchar[msgCtx->msgBufPos]; + msgCtx->unk11F18 = (msgCtx->unk11F08 & 0xF000) >> 0xC; + msgCtx->textBoxType = TEXTBOX_TYPE_9; + msgCtx->textBoxPos = arg2; + msgCtx->unk11F0C = msgCtx->unk11F08 & 0xF; + msgCtx->textUnskippable = true; + DmaMgr_SendRequest0(msgCtx->textboxSegment, &SEGMENT_ROM_START(message_static)[D_801CFC78[0] << 12], 0x1000); + msgCtx->textboxColorRed = 0; + msgCtx->textboxColorGreen = 0; + msgCtx->textboxColorBlue = 0; + msgCtx->textboxColorAlphaTarget = 0xE6; + msgCtx->textboxColorAlphaCurrent = 0; + msgCtx->textColorAlpha = 0xFF; + msgCtx->talkActor = NULL; + msgCtx->msgMode = MSGMODE_TEXT_START; + msgCtx->stateTimer = 0; + msgCtx->textDelayTimer = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + msgCtx->unk120D2 = 0xFF; + msgCtx->unk120CE = msgCtx->unk120D0 = msgCtx->unk120D2; +} void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) { MessageContext* msgCtx = &play->msgCtx; msgCtx->ocarinaAction = 0xFFFF; - func_80150D08(play, textId); + Message_OpenText(play, textId); msgCtx->talkActor = actor; - msgCtx->msgMode = 1; + msgCtx->msgMode = MSGMODE_TEXT_START; msgCtx->stateTimer = 0; msgCtx->textDelayTimer = 0; - play->msgCtx.ocarinaMode = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; } void Message_ContinueTextbox(PlayState* play, u16 textId) { @@ -334,9 +3328,9 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { InterfaceContext* interfaceCtx = &play->interfaceCtx; msgCtx->msgLength = 0; - func_80150D08(play, textId); + Message_OpenText(play, textId); func_80150A84(play); - msgCtx->msgMode = 5; + msgCtx->msgMode = MSGMODE_TEXT_CONTINUING; msgCtx->stateTimer = 8; msgCtx->textDelayTimer = 0; @@ -350,21 +3344,21 @@ void Message_ContinueTextbox(PlayState* play, u16 textId) { msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; if (play->pauseCtx.bombersNotebookOpen) { - msgCtx->textboxXTarget = 0x22; - msgCtx->textboxYTarget = 0x15E; - func_80149C18(play); + msgCtx->textboxXTarget = 34; + msgCtx->textboxYTarget = 350; + Message_GrowTextbox(play); msgCtx->stateTimer = 1; } } -void func_80151A68(PlayState* play, u16 textId) { +void Message_DisplaySceneTitleCard(PlayState* play, u16 textId) { MessageContext* msgCtx = &play->msgCtx; msgCtx->msgLength = 0; - func_80150D08(play, textId); + Message_OpenText(play, textId); func_80150A84(play); Message_DecodeNES(play); - msgCtx->msgMode = 0x45; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND; msgCtx->textDelayTimer = 0; msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget = msgCtx->textColorAlpha = 0; msgCtx->stateTimer = 30; @@ -402,7 +3396,10 @@ void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) { } } -u32 func_80151C9C(PlayState* play) { +/** + * @return s32 true if an entry to be shown was found and triggered + */ +s32 Message_BombersNotebookProcessEventQueue(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; while (true) { @@ -429,16 +3426,188 @@ u32 func_80151C9C(PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80151DA4.s") +u16 D_801D028C[] = { + 0x1B5A, // OCARINA_ACTION_0 + 0x1B5B, // + 0x1B5C, // OCARINA_ACTION_DEMONSTRATE_SONATA + 0x1B5D, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY + 0x1B5E, // OCARINA_ACTION_DEMONSTRATE_NEW_WAVE + 0x1B5F, // OCARINA_ACTION_DEMONSTRATE_ELEGY + 0x1B60, // OCARINA_ACTION_DEMONSTRATE_OATH + 0x1B61, // OCARINA_ACTION_DEMONSTRATE_SARIAS + 0x1B62, // OCARINA_ACTION_DEMONSTRATE_TIME + 0x1B63, // OCARINA_ACTION_DEMONSTRATE_HEALING + 0x1B64, // OCARINA_ACTION_DEMONSTRATE_EPONAS + 0x1B65, // OCARINA_ACTION_DEMONSTRATE_SOARING + 0x1B66, // OCARINA_ACTION_DEMONSTRATE_STORMS + 0x1B67, // OCARINA_ACTION_DEMONSTRATE_SUNS + 0x1B68, // OCARINA_ACTION_DEMONSTRATE_INVERTED_TIME + 0x1B69, // OCARINA_ACTION_DEMONSTRATE_DOUBLE_TIME + 0x1B6A, // OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO + 0, // OCARINA_ACTION_11 + 0xDC7, // OCARINA_ACTION_3B + 0xDC9, // OCARINA_ACTION_3C + 0x120A, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF + 0x120B, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF + 0x122C, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF + 0x122F, // OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF + 0x120A, // OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF + 0x120B, // OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF +}; -void func_80152434(PlayState* play, u16 arg2) { - play->msgCtx.blockSunsSong = false; - func_80151DA4(play, arg2); +u16 sOcarinaSongFlagsMap[] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800 }; + +void Message_DisplayOcarinaStaffImpl(PlayState* play, u16 ocarinaAction) { + MessageContext* msgCtx = &play->msgCtx; + s16 j; + s16 noStop; + s32 k; + u32 i; + + msgCtx->ocarinaAvailableSongs = 0; + + for (i = msgCtx->ocarinaAvailableSongs; i <= (QUEST_SONG_SUN - QUEST_SONG_SONATA); i++) { + if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA + i)) { + msgCtx->ocarinaAvailableSongs = msgCtx->ocarinaAvailableSongs | sOcarinaSongFlagsMap[i]; + } + } + + if (CHECK_QUEST_ITEM(QUEST_SONG_TIME)) { + msgCtx->ocarinaAvailableSongs |= 0x3000; + } + if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) { + msgCtx->ocarinaAvailableSongs |= 0x4000; + } + if (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) { + msgCtx->ocarinaAvailableSongs &= (u16)~0x4000; + } + if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { + msgCtx->ocarinaAvailableSongs |= 0x400000; + } + if (CHECK_EVENTINF(EVENTINF_31)) { + msgCtx->ocarinaAvailableSongs |= 0x800000; + } + + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + + if ((ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + sOcarinaButtonAlphaValues[0] = sOcarinaButtonAlphaValues[1] = sOcarinaButtonAlphaValues[2] = + sOcarinaButtonAlphaValues[3] = 255; + } else { + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + } + + sLastPlayedSong = 0xFF; + msgCtx->lastPlayedSong = 0xFF; + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + noStop = false; + msgCtx->ocarinaAction = ocarinaAction; + + if ((ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) && + (ocarinaAction <= OCARINA_ACTION_TIMED_PROMPT_STORMS)) { + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else if ((ocarinaAction == OCARINA_ACTION_3B) || (ocarinaAction == OCARINA_ACTION_3C)) { + noStop = true; + Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]); + func_80150A84(play); + } else if ((ocarinaAction >= OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) && + (ocarinaAction <= OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + noStop = true; + Message_OpenText(play, D_801D028C[ocarinaAction - 0x29]); + func_80150A84(play); + } else if ((ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + noStop = true; + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + if ((ocarinaAction >= OCARINA_ACTION_CHECK_TIME) && (ocarinaAction <= OCARINA_ACTION_CHECK_STORMS)) { + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } + if (ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_DEMONSTRATION) { + Message_OpenText(play, 0x1B5B); + func_80150A84(play); + } else { + Message_OpenText(play, 0x1B5A); + func_80150A84(play); + } + } else { + noStop = true; + if (ocarinaAction >= OCARINA_ACTION_PROMPT_SONATA) { + Message_OpenText(play, 0x1B59); + func_80150A84(play); + } else { + Message_OpenText(play, D_801D028C[ocarinaAction]); + func_80150A84(play); + } + } + + msgCtx->talkActor = NULL; + msgCtx->textDelayTimer = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + msgCtx->textboxXTarget = 34; + msgCtx->textboxYTarget = 142; + msgCtx->stateTimer = 8; + Message_GrowTextbox(play); + msgCtx->textboxX = 34; + msgCtx->textboxY = 142; + msgCtx->unk1200C = 0x200; + msgCtx->unk1200E = 0x200; + msgCtx->unk12008 = 0x100; + msgCtx->unk1200A = 0x40; + msgCtx->msgMode = MSGMODE_TEXT_CONTINUING; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + msgCtx->textboxColorAlphaCurrent = msgCtx->textboxColorAlphaTarget; + + if (!noStop) { + func_80115844(play, DO_ACTION_STOP); + noStop = gSaveContext.hudVisibility; + Interface_SetHudVisibility(HUD_VISIBILITY_B_ALT); + gSaveContext.hudVisibility = noStop; + } + + if ((ocarinaAction == OCARINA_ACTION_FREE_PLAY) || (ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + msgCtx->textBoxType = TEXTBOX_TYPE_E; + } else if (ocarinaAction == OCARINA_ACTION_3A) { + msgCtx->msgMode = MSGMODE_32; + } else if (ocarinaAction == OCARINA_ACTION_37) { + msgCtx->msgMode = MSGMODE_2F; + msgCtx->textBoxType = TEXTBOX_TYPE_2; + } else if (ocarinaAction == OCARINA_ACTION_SCARECROW_LONG_DEMONSTRATION) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufLen = 0; + sOcarinaButtonIndexBufPos = sOcarinaButtonIndexBufLen; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_DEMONSTRATION; + AudioOcarina_SetPlaybackSong(OCARINA_SONG_SCARECROW_LONG + 1, 1); + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + + for (j = 0, k = 0; j < 48; j++, k += FONT_CHAR_TEX_SIZE) { + Font_LoadChar(play, 0x8140, k); + }; + + msgCtx->stateTimer = 3; } -void func_80152464(PlayState* play, u16 arg1) { +void Message_DisplayOcarinaStaff(PlayState* play, u16 ocarinaAction) { + play->msgCtx.blockSunsSong = false; + Message_DisplayOcarinaStaffImpl(play, ocarinaAction); +} + +void Message_DisplayOcarinaStaffBlockSunsSong(PlayState* play, u16 ocarinaAction) { play->msgCtx.blockSunsSong = true; - func_80151DA4(play, arg1); + Message_DisplayOcarinaStaffImpl(play, ocarinaAction); } /** @@ -449,7 +3618,7 @@ u8 Message_GetState(MessageContext* msgCtx) { return TEXT_STATE_NONE; } - if (msgCtx->msgMode == 0x42) { + if (msgCtx->msgMode == MSGMODE_TEXT_DONE) { if (msgCtx->nextTextId != 0xFFFF) { return TEXT_STATE_1; } @@ -482,69 +3651,419 @@ u8 Message_GetState(MessageContext* msgCtx) { return TEXT_STATE_DONE; } - if (msgCtx->msgMode == 0x41) { + if (msgCtx->msgMode == MSGMODE_TEXT_AWAIT_NEXT) { return TEXT_STATE_10; } - if (msgCtx->msgMode == 0x1B) { + if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_DONE) { return TEXT_STATE_7; } - if ((msgCtx->ocarinaMode == 3) || (msgCtx->msgMode == 0x37)) { + if ((msgCtx->ocarinaMode == OCARINA_MODE_EVENT) || (msgCtx->msgMode == MSGMODE_37)) { return TEXT_STATE_8; } - if (msgCtx->msgMode == 0x20) { + if (msgCtx->msgMode == MSGMODE_OCARINA_AWAIT_INPUT) { return TEXT_STATE_9; } - if ((msgCtx->msgMode == 0x21) || (msgCtx->msgMode == 0x3A)) { + if ((msgCtx->msgMode == MSGMODE_21) || (msgCtx->msgMode == MSGMODE_3A)) { return TEXT_STATE_11; } - if (msgCtx->msgMode == 0x3D) { + if (msgCtx->msgMode == MSGMODE_3D) { return TEXT_STATE_12; } - if (msgCtx->msgMode == 0x40) { + if (msgCtx->msgMode == MSGMODE_40) { return TEXT_STATE_13; } - if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) { + if ((msgCtx->msgMode == MSGMODE_TEXT_CLOSING) && (msgCtx->stateTimer == 1) && + (msgCtx->bombersNotebookEventQueueCount == 0)) { return TEXT_STATE_CLOSING; } return TEXT_STATE_3; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8015268C.s") +void Message_DrawTextBox(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; -void func_80152C64(View* view) { + gDPPipeSync(gfx++); + + if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) || + (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) { + gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPSetAlphaCompare(gfx++, G_AC_THRESHOLD); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + } + + gDPSetPrimColor(gfx++, 0, 0, msgCtx->textboxColorRed, msgCtx->textboxColorGreen, msgCtx->textboxColorBlue, + msgCtx->textboxColorAlphaCurrent); + + if (((u32)msgCtx->textBoxType == TEXTBOX_TYPE_0) || (msgCtx->textBoxType == TEXTBOX_TYPE_2) || + (msgCtx->textBoxType == TEXTBOX_TYPE_6) || (msgCtx->textBoxType == TEXTBOX_TYPE_8) || + (msgCtx->textBoxType == TEXTBOX_TYPE_9) || (msgCtx->textBoxType == TEXTBOX_TYPE_A)) { + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_I, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPPipeSync(gfx++); + + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } else if (msgCtx->textBoxType == TEXTBOX_TYPE_D) { + gDPSetEnvColor(gfx++, 20, 0, 10, 255); + } else { + gDPSetEnvColor(gfx++, 50, 20, 0, 255); + } + gDPLoadTextureBlock_4b(gfx++, msgCtx->textboxSegment, G_IM_FMT_IA, 128, 64, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 7, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + } + + if (msgCtx->textBoxType == TEXTBOX_TYPE_A) { + gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY + 22) << 2, + (msgCtx->textboxX + msgCtx->unk12008) << 2, (msgCtx->textboxY + 54) << 2, G_TX_RENDERTILE, + 0, 6, msgCtx->unk1200C << 1, 2 << 10); + } else { + gSPTextureRectangle(gfx++, msgCtx->textboxX << 2, (msgCtx->textboxY) << 2, + (msgCtx->textboxX + sTextboxWidth) << 2, (msgCtx->textboxY + sTextboxHeight) << 2, + G_TX_RENDERTILE, 0, 0, sTextboxTexWidth, sTextboxTexHeight); + } + + // Draw treble clef + if (msgCtx->textBoxType == TEXTBOX_TYPE_3) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, + 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 100, 0, 255); + gDPLoadTextureBlock_4b(gfx++, gOcarinaTrebleClefTex, G_IM_FMT_I, 16, 32, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, 78 << 2, 166 << 2, 94 << 2, 198 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + + *gfxP = gfx++; +} + +void Message_SetView(View* view) { SET_FULLSCREEN_VIEWPORT(view); View_ApplyOrthoToOverlay(view); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152CAC.s") +void func_80152CAC(PlayState* play) { + MessageContext* msgCtx = &play->msgCtx; -// Spawn song effect? -void func_80152EC0(PlayState* play) { + if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SONATA) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_MONKEY); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_HEALING) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_PIANO); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_SARIAS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EPONAS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FEMALE_VOICE); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_STORMS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BABY_SINGING); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_GORON_LULLABY_INTRO) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_OATH) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_TATL); + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_ELEGY) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_IKANA_KING); + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + } + + if ((msgCtx->ocarinaAction == OCARINA_ACTION_3B) || (msgCtx->ocarinaAction == OCARINA_ACTION_3C)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ELDER_GORON_DRUMS); + AudioOcarina_SetPlaybackSong(OCARINA_SONG_GORON_LULLABY_INTRO + 1, 0x83); + return; + } + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_BASS_GUITAR); + AudioOcarina_SetPlaybackSong( + ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF) + OCARINA_SONG_EVAN_PART1 + 1), + 0x84); + return; + } + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_ZORA_GUITAR); + AudioOcarina_SetPlaybackSong( + ((msgCtx->ocarinaAction - OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) + OCARINA_SONG_EVAN_PART1 + 1), + 0x44); + return; + } + AudioOcarina_SetPlaybackSong((msgCtx->ocarinaAction - OCARINA_ACTION_FREE_PLAY), 2); +} + +s16 sOcarinaEffectActorIds[] = { + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE7, // Song of Healing Effect + ACTOR_OCEFF_WIPE2, // Epona's Song Effect + ACTOR_OCEFF_WIPE6, // Song of Soaring Effect + ACTOR_OCEFF_STORM, // Song of Storms Effect II [?] + ACTOR_OCEFF_SPOT, // Sun's Song Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE, // Song of Time Effect + ACTOR_OCEFF_WIPE4 // Scarecrow's Song Effect +}; +s32 sOcarinaEffectActorParams[] = { 0, 1, 2, 3, 4, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0 }; + +void Message_SpawnSongEffect(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Player* player = GET_PLAYER(play); + //! FAKE: if (1) {} - if ((msgCtx->songPlayed < 0x17) && (msgCtx->songPlayed != 0xE) && - ((msgCtx->ocarinaAction < 0x43) || (msgCtx->ocarinaAction >= 0x47))) { + if ((msgCtx->songPlayed <= OCARINA_SONG_SCARECROW_SPAWN) && + (msgCtx->songPlayed != OCARINA_SONG_GORON_LULLABY_INTRO) && + !((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU))) { msgCtx->ocarinaSongEffectActive = true; - if (msgCtx->songPlayed != 0x16) { - Actor_Spawn(&play->actorCtx, play, D_801D02D8[msgCtx->songPlayed], player->actor.world.pos.x, - player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, D_801D02F8[msgCtx->songPlayed]); - return; + if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) { + Actor_Spawn(&play->actorCtx, play, sOcarinaEffectActorIds[msgCtx->songPlayed], player->actor.world.pos.x, + player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, + sOcarinaEffectActorParams[msgCtx->songPlayed]); + } else { + Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z, 0, 0, 0, 0); } - Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, player->actor.world.pos.x, player->actor.world.pos.y, - player->actor.world.pos.z, 0, 0, 0, 0); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80152FB8.s") +Color_RGB16 sOcarinaButtonAPrimColors[] = { + { 80, 150, 255 }, + { 100, 200, 255 }, +}; +Color_RGB16 sOcarinaButtonAEnvColors[] = { + { 10, 10, 10 }, + { 50, 50, 255 }, +}; +Color_RGB16 sOcarinaButtonCPrimColors[] = { + { 255, 255, 50 }, + { 255, 255, 180 }, +}; +Color_RGB16 sOcarinaButtonCEnvColors[] = { + { 10, 10, 10 }, + { 110, 110, 50 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153750.s") +void Message_FlashOcarinaButtons(void) { + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAPrimR - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAPrimG - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAPrimB - sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; -void func_80153E7C(PlayState* play, Gfx** gfxP) { - if ((gSaveContext.options.language == 0) && !play->msgCtx.textIsCredits) { - func_8014ADBC(play, gfxP); + if (sOcarinaButtonAPrimR >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonAPrimR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonAPrimR += sOcarinaButtonStepR; + } + if (sOcarinaButtonAPrimG >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonAPrimG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonAPrimG += sOcarinaButtonStepG; + } + if (sOcarinaButtonAPrimB >= sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonAPrimB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonAPrimB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonAEnvR - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonAEnvG - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonAEnvB - sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCEnvR >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonAEnvR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonAEnvR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCEnvG >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonAEnvG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonAEnvG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCEnvB >= sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonAEnvB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonAEnvB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCPrimR - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCPrimG - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCPrimB - sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCPrimR >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonCPrimR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonCPrimR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCPrimG >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonCPrimG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonCPrimG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCPrimB >= sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonCPrimB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonCPrimB += sOcarinaButtonStepB; + } + + sOcarinaButtonStepR = ABS_ALT(sOcarinaButtonCEnvR - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepG = ABS_ALT(sOcarinaButtonCEnvG - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) / + sOcarinaButtonFlashTimer; + sOcarinaButtonStepB = ABS_ALT(sOcarinaButtonCEnvB - sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) / + sOcarinaButtonFlashTimer; + + if (sOcarinaButtonCEnvR >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r) { + sOcarinaButtonCEnvR -= sOcarinaButtonStepR; + } else { + sOcarinaButtonCEnvR += sOcarinaButtonStepR; + } + if (sOcarinaButtonCEnvG >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g) { + sOcarinaButtonCEnvG -= sOcarinaButtonStepG; + } else { + sOcarinaButtonCEnvG += sOcarinaButtonStepG; + } + if (sOcarinaButtonCEnvB >= sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b) { + sOcarinaButtonCEnvB -= sOcarinaButtonStepB; + } else { + sOcarinaButtonCEnvB += sOcarinaButtonStepB; + } + + sOcarinaButtonFlashTimer--; + if (sOcarinaButtonFlashTimer == 0) { + sOcarinaButtonAPrimR = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonAPrimG = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonAPrimB = sOcarinaButtonAPrimColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonAEnvR = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonAEnvG = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonAEnvB = sOcarinaButtonAEnvColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonCPrimR = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonCPrimG = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonCPrimB = sOcarinaButtonCPrimColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonCEnvR = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].r; + sOcarinaButtonCEnvG = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].g; + sOcarinaButtonCEnvB = sOcarinaButtonCEnvColors[sOcarinaButtonFlashColorIndex].b; + sOcarinaButtonFlashTimer = 3; + sOcarinaButtonFlashColorIndex ^= 1; + } +} + +TexturePtr sOcarinaButtonTextures[] = { + gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex, +}; + +void Message_DrawOcarinaButtons(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx = *gfxP; + u16 i; + u16 notePosX; + + if ((play->msgCtx.msgMode >= MSGMODE_OCARINA_PLAYING) && (msgCtx->msgMode <= MSGMODE_40)) { + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Gfx_SetupDL39_Ptr(&gfx); + + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + if ((msgCtx->msgMode == MSGMODE_SONG_PROMPT) || (msgCtx->msgMode == MSGMODE_36)) { + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + if (msgCtx->ocarinaAction >= OCARINA_ACTION_TIMED_PROMPT_SONATA) { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA; + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + // Can never pass as the conditional is opposite to one scope higher + sOcarinaButtonStepG = (msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) + + OCARINA_SONG_EVAN_PART1; + } else if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN + + OCARINA_SONG_WIND_FISH_HUMAN; + } else { + sOcarinaButtonStepG = msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA; + } + sOcarinaButtonStepR = gOcarinaSongButtons[sOcarinaButtonStepG].numButtons; + + for (notePosX = 98, i = 0; i < sOcarinaButtonStepR; notePosX += 18, i++) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 150); + gDPSetEnvColor(gfx++, 10, 10, 10, 0); + + gDPLoadTextureBlock( + gfx++, sOcarinaButtonTextures[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]], + G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle( + gfx++, notePosX << 2, + msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] << 2, + (notePosX + 16) << 2, + (msgCtx->ocarinaButtonsPosY[gOcarinaSongButtons[sOcarinaButtonStepG].buttonIndex[i]] + 16) + << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + } + + if (msgCtx->msgMode != MSGMODE_SCARECROW_LONG_RECORDING_START) { + for (notePosX = 98, i = 0; i < 8; notePosX += 18, i++) { + if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_INVALID) { + break; + } + + if (sOcarinaButtonAlphaValues[i] != 255) { + sOcarinaButtonAlphaValues[i] += 50; + if (sOcarinaButtonAlphaValues[i] >= 255) { + sOcarinaButtonAlphaValues[i] = 255; + } + } + + gDPPipeSync(gfx++); + if (sOcarinaButtonIndexBuf[i] == OCARINA_BTN_A) { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonAPrimR, sOcarinaButtonAPrimG, sOcarinaButtonAPrimB, + sOcarinaButtonAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaButtonAEnvR, sOcarinaButtonAEnvG, sOcarinaButtonAEnvB, 0); + } else { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaButtonCPrimR, sOcarinaButtonCPrimG, sOcarinaButtonCPrimB, + sOcarinaButtonAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaButtonCEnvR, sOcarinaButtonCEnvG, sOcarinaButtonCEnvB, 0); + } + + gDPLoadTextureBlock(gfx++, sOcarinaButtonTextures[sOcarinaButtonIndexBuf[i]], G_IM_FMT_IA, + G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle( + gfx++, notePosX << 2, msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] << 2, + (notePosX + 16) << 2, (msgCtx->ocarinaButtonsPosY[sOcarinaButtonIndexBuf[i]] + 16) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + } + } + *gfxP = gfx; +} + +void Message_DrawText(PlayState* play, Gfx** gfxP) { + if ((gSaveContext.options.language == LANGUAGE_JPN) && !play->msgCtx.textIsCredits) { + Message_DrawTextDefault(play, gfxP); } else if (play->msgCtx.textIsCredits) { Message_DrawTextCredits(play, gfxP); } else { @@ -552,9 +4071,1035 @@ void func_80153E7C(PlayState* play, Gfx** gfxP) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_80153EF0.s") +void Message_DrawSceneTitleCard(PlayState* play, Gfx** gfxP) { + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801541D4.s") + gfx = *gfxP; + Gfx_SetupDL39_Ptr(&gfx); + + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetTextureFilter(gfx++, G_TF_BILERP); + gDPSetAlphaDither(gfx++, G_AD_NOTPATTERN); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, msgCtx->textboxColorAlphaCurrent); + gDPSetEnvColor(gfx++, 140, 40, 160, 255); + gDPLoadTextureBlock(gfx++, gSceneTitleCardGradientTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gfx++, 0, XREG(77) << 2, 320 << 2, (XREG(77) + XREG(76)) << 2, G_TX_RENDERTILE, 0, 0, 204, + 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + + if ((msgCtx->currentTextId < 0x1BB2) || (msgCtx->currentTextId >= 0x1BB7)) { + msgCtx->unk11FF8 = XREG(75); + } + msgCtx->unk11FFA = XREG(74); + Message_DrawTextNES(play, &gfx, 0); + *gfxP = gfx++; +} + +s16 sOcarinaSongFanfares[] = { + NA_BGM_OCARINA_SONATA, // OCARINA_SONG_SONATA + NA_BGM_OCARINA_LULLABY, // OCARINA_SONG_GORON_LULLABY + NA_BGM_OCARINA_NEW_WAVE, // OCARINA_SONG_NEW_WAVE + NA_BGM_OCARINA_ELEGY, // OCARINA_SONG_ELEGY + NA_BGM_OCARINA_OATH, // OCARINA_SONG_OATH + NA_BGM_MAJORAS_LAIR, // OCARINA_SONG_SARIAS + NA_BGM_OCARINA_TIME, // OCARINA_SONG_TIME + NA_BGM_OCARINA_HEALING, // OCARINA_SONG_HEALING + NA_BGM_OCARINA_EPONA, // OCARINA_SONG_EPONAS + NA_BGM_OCARINA_SOARING, // OCARINA_SONG_SOARING + NA_BGM_OCARINA_STORM, // OCARINA_SONG_STORMS + NA_BGM_OCARINA_SUNS, // OCARINA_SONG_SUNS + NA_BGM_INVERTED_SONG_OF_TIME, // OCARINA_SONG_INVERTED_TIME + NA_BGM_SONG_OF_DOUBLE_TIME, // OCARINA_SONG_DOUBLE_TIME + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_GORON_LULLABY_INTRO + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_HUMAN + NA_BGM_OCARINA_LULLABY_INTRO_PTR, // OCARINA_SONG_WIND_FISH_GORON +}; + +s8 sOcarinaSongFanfareIoData[PLAYER_FORM_MAX] = { + 0x35, // PLAYER_FORM_FIERCE_DEITY + 0x5C, // PLAYER_FORM_GORON + 0x5D, // PLAYER_FORM_ZORA + 0x5E, // PLAYER_FORM_DEKU + 0x35, // PLAYER_FORM_HUMAN +}; + +u8 sPlayerFormOcarinaInstruments[] = { + OCARINA_INSTRUMENT_DEFAULT, + OCARINA_INSTRUMENT_GORON_DRUMS, + OCARINA_INSTRUMENT_ZORA_GUITAR, + OCARINA_INSTRUMENT_DEKU_PIPES, +}; + +s16 D_801D03A8[TEXTBOX_TYPE_MAX] = { + 0x3B, // TEXTBOX_TYPE_0 + 0x3B, // TEXTBOX_TYPE_1 + 0x3B, // TEXTBOX_TYPE_2 + 0x3B, // TEXTBOX_TYPE_3 + 0x22, // TEXTBOX_TYPE_4 + 0x3B, // TEXTBOX_TYPE_5 + 0x3B, // TEXTBOX_TYPE_6 + 0x3B, // TEXTBOX_TYPE_7 + 0x3B, // TEXTBOX_TYPE_8 + 0x3B, // TEXTBOX_TYPE_9 + 0x3B, // TEXTBOX_TYPE_A + 0x3B, // TEXTBOX_TYPE_B + 0x3B, // TEXTBOX_TYPE_C + 0x3B, // TEXTBOX_TYPE_D + 0x3B, // TEXTBOX_TYPE_E + 0x3B, // TEXTBOX_TYPE_F +}; + +void Message_DrawMain(PlayState* play, Gfx** gfxP) { + s32 pad; + MessageContext* msgCtx = &play->msgCtx; + Gfx* gfx; + u16 i; + u16 buttonIndexPos; + u8 ocarinaError; + s32 j; + s16 temp_v0_33; + s16 temp; + + gfx = *gfxP; + + gSPSegment(gfx++, 0x02, play->interfaceCtx.parameterSegment); + gSPSegment(gfx++, 0x07, msgCtx->textboxSegment); + + if (msgCtx->msgLength != 0) { + if (!msgCtx->textIsCredits) { + Message_SetView(&msgCtx->view); + Gfx_SetupDL39_Ptr(&gfx); + if (msgCtx->ocarinaAction != OCARINA_ACTION_37) { + if ((msgCtx->msgMode != MSGMODE_18) && (msgCtx->msgMode != MSGMODE_39) && + (msgCtx->msgMode != MSGMODE_3C) && (msgCtx->msgMode != MSGMODE_3F) && + (msgCtx->msgMode != MSGMODE_3A) && (msgCtx->msgMode != MSGMODE_3D) && + (msgCtx->msgMode != MSGMODE_40) && + (((msgCtx->msgMode >= MSGMODE_TEXT_BOX_GROWING) && (msgCtx->msgMode <= MSGMODE_TEXT_DONE)) || + ((msgCtx->msgMode >= MSGMODE_NEW_CYCLE_0) && (msgCtx->msgMode <= MSGMODE_OWL_SAVE_2))) && + (D_801CFC78[msgCtx->textBoxType] != 0xE)) { + Message_DrawTextBox(play, &gfx); + } + } + } + Gfx_SetupDL39_Ptr(&gfx); + gDPSetAlphaCompare(gfx++, G_AC_NONE); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, + 0); + + if (YREG(0) != msgCtx->msgMode) { + YREG(0) = msgCtx->msgMode; + YREG(1) = msgCtx->ocarinaAction; + } + + switch (msgCtx->msgMode) { + case MSGMODE_TEXT_START: + case MSGMODE_TEXT_BOX_GROWING: + case MSGMODE_TEXT_STARTING: + case MSGMODE_TEXT_NEXT_MSG: + break; + + case MSGMODE_TEXT_CONTINUING: + if (msgCtx->stateTimer == 1) { + for (i = 0, j = 0; i < 48; i++, j += FONT_CHAR_TEX_SIZE) { + Font_LoadChar(play, 0x8140, j); + } + Message_DrawText(play, &gfx); + } else { + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } + break; + + case MSGMODE_TEXT_DISPLAYING: + case MSGMODE_TEXT_DELAYED_BREAK: + case MSGMODE_9: + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + if (msgCtx->textDelay != 0) { + msgCtx->textDrawPos += msgCtx->textDelay; + } + Message_DrawTextNES(play, &gfx, 0); + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos); + } + } else if (msgCtx->textIsCredits) { + Message_DrawTextCredits(play, &gfx); + } else { + if (msgCtx->textDelay != 0) { + msgCtx->textDrawPos += msgCtx->textDelay; + } + Message_DrawTextNES(play, &gfx, 0); + if (msgCtx->msgMode == MSGMODE_TEXT_DISPLAYING) { + Message_DrawTextNES(play, &gfx, (s32)msgCtx->textDrawPos); + } + } + break; + + case MSGMODE_NEW_CYCLE_0: + case MSGMODE_NEW_CYCLE_1: + case MSGMODE_NEW_CYCLE_2: + case MSGMODE_OWL_SAVE_0: + case MSGMODE_OWL_SAVE_1: + case MSGMODE_OWL_SAVE_2: + Message_DrawTextNES(play, &gfx, 0); + break; + + case MSGMODE_TEXT_AWAIT_INPUT: + case MSGMODE_TEXT_AWAIT_NEXT: + Message_DrawText(play, &gfx); + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + + case MSGMODE_OCARINA_STARTING: + case MSGMODE_SONG_DEMONSTRATION_STARTING: + case MSGMODE_SONG_PROMPT_STARTING: + case MSGMODE_32: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + } + sOcarinaButtonFlashColorIndex = 1; + sOcarinaButtonFlashTimer = 3; + if (msgCtx->msgMode == MSGMODE_OCARINA_STARTING) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_0) || + (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction == OCARINA_ACTION_SCARECROW_SPAWN_RECORDING) || + (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) || + (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_TIME)) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) || + (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) { + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000); + } else if (CHECK_EVENTINF(EVENTINF_31)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartDefault(0x80800000); + } else { + AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) | + 0xC0000000); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + } + } else { + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs); + } + } else { + AudioOcarina_StartDefault((1 << msgCtx->ocarinaAction) | 0x80000000); + } + msgCtx->msgMode = MSGMODE_OCARINA_PLAYING; + if (CHECK_EVENTINF(EVENTINF_24)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET); + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_20)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + //! FAKE: + (void)CUR_FORM; + if (gSaveContext.save.playerForm == 4) {} + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_AMPLIFIED_GUITAR); + } + } else if (msgCtx->msgMode == MSGMODE_SONG_DEMONSTRATION_STARTING) { + msgCtx->stateTimer = 20; + msgCtx->msgMode = MSGMODE_19; + } else if (msgCtx->msgMode == MSGMODE_32) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartDefault(0x80800000); + msgCtx->msgMode = MSGMODE_33; + } else { // MSGMODE_SONG_PROMPT_STARTING + if (CHECK_EVENTINF(EVENTINF_24)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEKU_TRUMPET); + } else { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + } + + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_StartForSongCheck( + (1 << (OCARINA_ACTION_PROMPT_SONATA + msgCtx->ocarinaAction)) | 0x80000000, 4); + msgCtx->msgMode = MSGMODE_SONG_PROMPT; + } else { + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_StartDefault( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) + + OCARINA_SONG_WIND_FISH_HUMAN)) | + 0x80000000); + } else { + AudioOcarina_StartDefault( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_PROMPT_SONATA) + OCARINA_SONG_SONATA)) | + 0x80000000); + } + msgCtx->msgMode = MSGMODE_SONG_PROMPT; + } + } + + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Message_DrawText(play, &gfx); + } + break; + + case MSGMODE_OCARINA_PLAYING: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if ((msgCtx->ocarinaStaff->pos == 1) && (sOcarinaButtonIndexBufPos == 8)) { + sOcarinaButtonIndexBufPos = 0; + } + + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART1) { + AudioOcarina_ResetAndReadInput(); + AudioOcarina_StartDefault(0x80100000); + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_EVAN_PART2) { + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + AudioOcarina_SetOcarinaDisableTimer(0, 20); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_FULL_EVAN_SONG; + } else if ((msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_INVERTED_TIME) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_DOUBLE_TIME) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) || + CHECK_QUEST_ITEM(QUEST_SONG_SONATA + msgCtx->ocarinaStaff->state)) { + sLastPlayedSong = msgCtx->ocarinaStaff->state; + msgCtx->lastPlayedSong = msgCtx->ocarinaStaff->state; + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_E; + msgCtx->stateTimer = 20; + + if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) { + if ((msgCtx->ocarinaStaff->state <= OCARINA_SONG_SARIAS) || + (msgCtx->ocarinaStaff->state == OCARINA_SONG_SCARECROW_SPAWN)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } else { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_SCARECROW_SPAWN) { + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_STORMS) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + msgCtx->msgMode = MSGMODE_OCARINA_FAIL; + } else { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + } else if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 10; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else { + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + SET_EVENTINF(EVENTINF_32); + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + AudioOcarina_SetOcarinaDisableTimer(0, 20); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_10)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + msgCtx->msgMode = MSGMODE_OCARINA_FAIL; + } else { + AudioOcarina_SetSongStartingPos(); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_StartAtSongStartingPos((msgCtx->ocarinaAvailableSongs + 0x80000) | 0xC0000000); + } + } + if ((msgCtx->ocarinaAction != OCARINA_ACTION_FREE_PLAY) && + (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME)) { + Message_DrawText(play, &gfx); + } + break; + + case MSGMODE_E: + case MSGMODE_SONG_PROMPT_SUCCESS: + case MSGMODE_22: + case MSGMODE_SCARECROW_SPAWN_RECORDING_DONE: + case MSGMODE_34: + Message_FlashOcarinaButtons(); + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + + if (msgCtx->msgMode == MSGMODE_E) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 1; + } else if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_SUCCESS) { + Message_ContinueTextbox(play, 0x1B5B); + msgCtx->msgMode = MSGMODE_SONG_PLAYED; + msgCtx->textBoxType = TEXTBOX_TYPE_3; + msgCtx->stateTimer = 1; + } else if (msgCtx->msgMode == MSGMODE_22) { + msgCtx->msgMode = MSGMODE_23; + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + msgCtx->textBoxType = TEXTBOX_TYPE_0; + } else if (msgCtx->msgMode == MSGMODE_34) { + if (msgCtx->songPlayed == OCARINA_SONG_TERMINA_WALL) { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); + } else { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_OCARINA_FAIL: + case MSGMODE_SONG_PROMPT_FAIL: + Message_DrawText(play, &gfx); + // fallthrough + case MSGMODE_OCARINA_FAIL_NO_TEXT: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + D_801C6A94 = 1; + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_FAIL) { + Message_ContinueTextbox(play, 0x1B89); + Message_Decode(play); + msgCtx->msgMode = MSGMODE_SONG_PROMPT_NOTES_DROP; + } else { + msgCtx->msgMode = MSGMODE_OCARINA_NOTES_DROP; + } + } + break; + + case MSGMODE_OCARINA_NOTES_DROP: + case MSGMODE_SONG_PROMPT_NOTES_DROP: + for (i = 0; i < 5; i++) { + msgCtx->ocarinaButtonsPosY[i] += D_801C6A94; + } + D_801C6A94 += D_801C6A94; + if (D_801C6A94 >= 0x226) { + Message_ResetOcarinaButtonAlphas(); + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_NOTES_DROP) { + msgCtx->msgMode = MSGMODE_OCARINA_AWAIT_INPUT; + msgCtx->stateTimer = 10; + } else { + msgCtx->msgMode = MSGMODE_OCARINA_STARTING; + } + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + } + break; + + case MSGMODE_SONG_PLAYED: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_Decode(play); + msgCtx->msgMode = MSGMODE_SETUP_DISPLAY_SONG_PLAYED; + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + Message_SpawnSongEffect(play); + } + break; + + case MSGMODE_SETUP_DISPLAY_SONG_PLAYED: + Message_DrawText(play, &gfx); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_SetPlaybackSong(msgCtx->ocarinaAction - OCARINA_ACTION_SCARECROW_LONG_RECORDING, 1); + } else { + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + AudioOcarina_SetPlaybackSong((u8)msgCtx->songPlayed + 1, 1); + if (msgCtx->songPlayed != OCARINA_SONG_SCARECROW_SPAWN) { + func_801A3000((u16)sOcarinaSongFanfares[msgCtx->songPlayed], + (u8)sOcarinaSongFanfareIoData[CUR_FORM]); + AudioSfx_MuteBanks(0x20); + } + } + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY) { + msgCtx->ocarinaAction = OCARINA_ACTION_FREE_PLAY_DONE; + } + if (msgCtx->ocarinaAction == OCARINA_ACTION_CHECK_NOTIME) { + msgCtx->ocarinaAction = OCARINA_ACTION_CHECK_NOTIME_DONE; + } + sOcarinaButtonIndexBufPos = 0; + msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED; + break; + + case MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN: + if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) { + Message_ContinueTextbox(play, 0x1B6B); + } else { + Message_ContinueTextbox(play, 0x1B72 + msgCtx->songPlayed); + } + Message_Decode(play); + msgCtx->msgMode = MSGMODE_16; + msgCtx->stateTimer = 20; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_16: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_17; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_17: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_18; + msgCtx->stateTimer = 2; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_18: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + Message_CloseTextbox(play); + if (msgCtx->songPlayed == OCARINA_SONG_EPONAS) { + gHorsePlayedEponasSong = true; + } + + if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) { + if (sLastPlayedSong == OCARINA_SONG_ELEGY) { + if ((play->sceneId == SCENE_F40) || (play->sceneId == SCENE_F41) || + (play->sceneId == SCENE_IKANAMAE) || (play->sceneId == SCENE_CASTLE) || + (play->sceneId == SCENE_IKNINSIDE) || (play->sceneId == SCENE_IKANA) || + (play->sceneId == SCENE_INISIE_N) || (play->sceneId == SCENE_INISIE_R) || + (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_RANDOM) || + (play->sceneId == SCENE_REDEAD) || (play->sceneId == SCENE_TOUGITES)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + if (msgCtx->songPlayed == OCARINA_SONG_SCARECROW_SPAWN) { + play->msgCtx.ocarinaMode = OCARINA_MODE_PLAYED_SCARECROW_SPAWN; + } + } + } else if (msgCtx->ocarinaAction >= OCARINA_ACTION_CHECK_SONATA) { + if ((OCARINA_ACTION_CHECK_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + play->msgCtx.ocarinaMode = msgCtx->songPlayed - 1; + } + } else if ((OCARINA_ACTION_PROMPT_SONATA + msgCtx->songPlayed) == msgCtx->ocarinaAction) { + play->msgCtx.ocarinaMode = OCARINA_MODE_EVENT; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } + break; + + case MSGMODE_19: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + func_80152CAC(play); + sOcarinaButtonIndexBufPos = 0; + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_DISPLAY_SONG_PLAYED: + case MSGMODE_SONG_DEMONSTRATION: + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + if (msgCtx->ocarinaStaff->state == 0) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + } + if ((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } else if (msgCtx->msgMode == MSGMODE_DISPLAY_SONG_PLAYED) { + msgCtx->msgMode = MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN; + } else { + msgCtx->msgMode = MSGMODE_SONG_DEMONSTRATION_DONE; + } + } else { + if ((sOcarinaButtonIndexBufPos != 0) && (msgCtx->ocarinaStaff->pos == 1)) { + sOcarinaButtonIndexBufPos = 0; + } + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + // fallthrough + case MSGMODE_SONG_DEMONSTRATION_DONE: + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SONG_PROMPT: + case MSGMODE_33: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_22; + } else { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_SONG_PROMPT_SUCCESS; + if (msgCtx->ocarinaStaff->state == OCARINA_SONG_GORON_LULLABY_INTRO) { + Item_Give(play, ITEM_SONG_LULLABY_INTRO); + } else if (!((msgCtx->ocarinaAction >= OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN) && + (msgCtx->ocarinaAction <= OCARINA_ACTION_PROMPT_WIND_FISH_DEKU)) && + (msgCtx->ocarinaStaff->state != OCARINA_SONG_NEW_WAVE)) { + Item_Give(play, + (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + } + } + msgCtx->stateTimer = 20; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == OCARINA_SONG_TERMINA_WALL) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_34; + Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + msgCtx->stateTimer = 20; + AudioOcarina_SetOcarinaDisableTimer(0, 20); + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + msgCtx->stateTimer = 10; + if (msgCtx->msgMode == MSGMODE_SONG_PROMPT) { + msgCtx->msgMode = MSGMODE_SONG_PROMPT_FAIL; + } else { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_OCARINA_AWAIT_INPUT: + Message_DrawText(play, &gfx); + if ((msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) || + (msgCtx->ocarinaAction == OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_21; + msgCtx->textBoxType = TEXTBOX_TYPE_0; + } + } + break; + + case MSGMODE_SCARECROW_LONG_RECORDING_START: + AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_LONG); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + sOcarinaButtonIndexBufLen = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_SCARECROW_LONG_RECORDING_ONGOING; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_LONG_RECORDING_ONGOING: + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + + if (sOcarinaButtonIndexBufLen >= 8) { + for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) { + sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1]; + } + sOcarinaButtonIndexBufLen--; + } + + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufLen++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + if (msgCtx->ocarinaStaff) {} + if (msgCtx->ocarinaStaff->pos == 8) { + sOcarinaButtonIndexBufPos = 0; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_LONG_DEMONSTRATION: + case MSGMODE_SCARECROW_SPAWN_DEMONSTRATION: + msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); + + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + if (sOcarinaButtonIndexBufLen >= 8) { + for (buttonIndexPos = sOcarinaButtonIndexBufLen - 8, i = 0; i < 8; i++, buttonIndexPos++) { + sOcarinaButtonIndexBuf[buttonIndexPos] = sOcarinaButtonIndexBuf[buttonIndexPos + 1]; + } + sOcarinaButtonIndexBufLen--; + } + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufLen++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufLen] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + if (msgCtx->ocarinaStaff->pos == 8) { + sOcarinaButtonIndexBufLen = sOcarinaButtonIndexBufPos = 0; + } + } + + if (msgCtx->stateTimer == 0) { + if (msgCtx->ocarinaStaff->state == 0) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_11; + Message_CloseTextbox(play); + } + } else { + msgCtx->stateTimer--; + } + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_START: + AudioOcarina_SetRecordingState(OCARINA_RECORD_SCARECROW_SPAWN); + AudioOcarina_SetInstrument(sPlayerFormOcarinaInstruments[CUR_FORM]); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING: + msgCtx->ocarinaStaff = AudioOcarina_GetRecordingStaff(); + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + msgCtx->ocarinaButtonIndex = sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = + msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBufPos++; + sOcarinaButtonIndexBuf[sOcarinaButtonIndexBufPos] = OCARINA_BTN_INVALID; + } + } + + if (msgCtx->ocarinaStaff->state == 0) { + msgCtx->stateTimer = 20; + gSaveContext.save.saveInfo.scarecrowSpawnSongSet = true; + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + Lib_MemCpy(gSaveContext.save.saveInfo.scarecrowSpawnSong, gScarecrowSpawnSongPtr, + sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong)); + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.scarecrowSpawnSong); i++) { + // osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]); + } + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + Message_CloseTextbox(play); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED; + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + Message_StartTextbox(play, 0x1647, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + break; + + case MSGMODE_2F: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + Message_ResetOcarinaButtonState(play); + AudioOcarina_StartDefault(msgCtx->ocarinaAvailableSongs | 0xC0000000); + msgCtx->msgMode = MSGMODE_30; + break; + + case MSGMODE_30: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + if (((u32)msgCtx->ocarinaStaff->pos != 0) && + (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1))) { + msgCtx->ocarinaButtonIndex = msgCtx->ocarinaStaff->buttonIndex; + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + Message_ResetOcarinaButtonState(play); + msgCtx->msgMode = MSGMODE_31; + } + break; + + case MSGMODE_35: + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + msgCtx->ocarinaStaff->pos = 0; + sOcarinaButtonIndexBufPos = 0; + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + Message_ResetOcarinaButtonState(play); + sOcarinaButtonFlashColorIndex = 1; + sOcarinaButtonFlashTimer = 3; + AudioOcarina_StartWithSongNoteLengths( + (1 << ((msgCtx->ocarinaAction - OCARINA_ACTION_TIMED_PROMPT_SONATA) & 0xFFFF)) | 0x80000000); + msgCtx->msgMode = MSGMODE_36; + Message_DrawText(play, &gfx); + break; + + case MSGMODE_36: + msgCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff(); + + if ((u32)msgCtx->ocarinaStaff->pos != 0) { + if (sOcarinaButtonIndexBufPos == (msgCtx->ocarinaStaff->pos - 1)) { + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos - 1] = msgCtx->ocarinaStaff->buttonIndex; + sOcarinaButtonIndexBuf[msgCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID; + sOcarinaButtonIndexBufPos++; + } + } + + if (msgCtx->ocarinaStaff->state <= OCARINA_SONG_SCARECROW_SPAWN) { + msgCtx->songPlayed = msgCtx->ocarinaStaff->state; + msgCtx->msgMode = MSGMODE_37; + Item_Give(play, (gOcarinaSongItemMap[msgCtx->ocarinaStaff->state] + ITEM_SONG_SONATA) & 0xFF); + msgCtx->stateTimer = 20; + Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); + } else if (msgCtx->ocarinaStaff->state == 0xFF) { + ocarinaError = func_8019B5AC(); + if (ocarinaError == OCARINA_ERROR_2) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_3B; + } else if (ocarinaError == OCARINA_ERROR_3) { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_3E; + } else { + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + D_801C6A94 = 1; + msgCtx->msgMode = MSGMODE_38; + } + } + Message_DrawText(play, &gfx); + break; + + case MSGMODE_37: + Message_FlashOcarinaButtons(); + Message_DrawText(play, &gfx); + break; + + case MSGMODE_38: + case MSGMODE_3B: + case MSGMODE_3E: + // notes drop + for (i = 0; i < 5; i++) { + msgCtx->ocarinaButtonsPosY[i] += D_801C6A94; + } + + D_801C6A94 += D_801C6A94; + if (D_801C6A94 >= 0x226) { + Message_ResetOcarinaButtonAlphas(); + msgCtx->textBoxType = TEXTBOX_TYPE_0; + msgCtx->textboxColorRed = msgCtx->textboxColorGreen = msgCtx->textboxColorBlue = 0; + msgCtx->stateTimer = 3; + msgCtx->msgMode++; + } + break; + + case MSGMODE_39: + case MSGMODE_3C: + case MSGMODE_3F: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode++; + } + break; + + case MSGMODE_TEXT_DONE: + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_60: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_80148D64(play); + break; + + case TEXTBOX_ENDTYPE_61: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80148558(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + (s32)(16.0f * msgCtx->textCharScale * 5.0f) - 1, + temp); + func_80149048(play); + break; + + case TEXTBOX_ENDTYPE_62: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_801491DC(play); + break; + + case TEXTBOX_ENDTYPE_63: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 5)) - 1, + temp); + func_80149454(play); + break; + + case TEXTBOX_ENDTYPE_64: + temp_v0_33 = msgCtx->unk120BE; + temp = msgCtx->unk11FFA + (msgCtx->unk11FFC * temp_v0_33); + func_80147F18(play, &gfx, + msgCtx->unk11F1A[temp_v0_33] + + (s32)(16.0f * msgCtx->textCharScale * (msgCtx->unk120C2 + 4)) - 6, + temp); + func_801496C8(play); + break; + + default: + break; + } + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + Message_DrawText(play, &gfx); + + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_10: + func_80148CBC(play, &gfx, 1); + break; + + case TEXTBOX_ENDTYPE_11: + func_80148CBC(play, &gfx, 2); + break; + + case TEXTBOX_ENDTYPE_12: + func_80148CBC(play, &gfx, 1); + break; + + case TEXTBOX_ENDTYPE_30: + case TEXTBOX_ENDTYPE_41: + case TEXTBOX_ENDTYPE_50: + case TEXTBOX_ENDTYPE_52: + case TEXTBOX_ENDTYPE_55: + case TEXTBOX_ENDTYPE_56: + case TEXTBOX_ENDTYPE_57: + case TEXTBOX_ENDTYPE_62: + break; + + case TEXTBOX_ENDTYPE_40: + case TEXTBOX_ENDTYPE_60: + case TEXTBOX_ENDTYPE_61: + default: + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + + case TEXTBOX_ENDTYPE_42: + Message_DrawTextboxIcon(play, &gfx, 158, + (s16)(D_801D03A8[msgCtx->textBoxType] + msgCtx->textboxYTarget)); + break; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND: + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT: + case MSGMODE_SCENE_TITLE_CARD_DISPLAYING: + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT: + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND: + Message_DrawSceneTitleCard(play, &gfx); + break; + + case MSGMODE_21: + case MSGMODE_23: + case MSGMODE_31: + case MSGMODE_3A: + case MSGMODE_3D: + case MSGMODE_40: + case MSGMODE_TEXT_CLOSING: + case MSGMODE_PAUSED: + break; + + case MSGMODE_24: + case MSGMODE_25: + case MSGMODE_26: + default: + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + break; + } + } + Message_DrawOcarinaButtons(play, &gfx); + *gfxP = gfx; +} void Message_Draw(PlayState* play) { Gfx* nextDisplayList; @@ -567,7 +5112,7 @@ void Message_Draw(PlayState* play) { gSPDisplayList(OVERLAY_DISP++, nextDisplayList); if ((play->msgCtx.currentTextId != 0x5E6) || !Play_InCsMode(play)) { - func_801541D4(play, &nextDisplayList); + Message_DrawMain(play, &nextDisplayList); } gSPEndDisplayList(nextDisplayList++); @@ -576,9 +5121,890 @@ void Message_Draw(PlayState* play) { CLOSE_DISPS(gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s") +s16 sTextboxXPositions[TEXTBOX_TYPE_MAX] = { + 34, // TEXTBOX_TYPE_0 + 34, // TEXTBOX_TYPE_1 + 34, // TEXTBOX_TYPE_2 + 34, // TEXTBOX_TYPE_3 + 34, // TEXTBOX_TYPE_4 + 34, // TEXTBOX_TYPE_5 + 34, // TEXTBOX_TYPE_6 + 34, // TEXTBOX_TYPE_7 + 34, // TEXTBOX_TYPE_8 + 34, // TEXTBOX_TYPE_9 + 34, // TEXTBOX_TYPE_A + 34, // TEXTBOX_TYPE_B + 34, // TEXTBOX_TYPE_C + 34, // TEXTBOX_TYPE_D + 34, // TEXTBOX_TYPE_E + 34, // TEXTBOX_TYPE_F +}; -void func_801586A4(PlayState* play) { +s16 sTextboxLowerYPositions[] = { + 142, // TEXTBOX_TYPE_0 + 142, // TEXTBOX_TYPE_1 + 142, // TEXTBOX_TYPE_2 + 142, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 142, // TEXTBOX_TYPE_5 + 142, // TEXTBOX_TYPE_6 + 142, // TEXTBOX_TYPE_7 + 142, // TEXTBOX_TYPE_8 + 130, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 142, // TEXTBOX_TYPE_C + 142, // TEXTBOX_TYPE_D + 142, // TEXTBOX_TYPE_E + 142, // TEXTBOX_TYPE_F +}; + +s16 sTextboxUpperYPositions[] = { + 38, // TEXTBOX_TYPE_0 + 38, // TEXTBOX_TYPE_1 + 38, // TEXTBOX_TYPE_2 + 38, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 38, // TEXTBOX_TYPE_5 + 38, // TEXTBOX_TYPE_6 + 38, // TEXTBOX_TYPE_7 + 38, // TEXTBOX_TYPE_8 + 60, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 38, // TEXTBOX_TYPE_C + 38, // TEXTBOX_TYPE_D + 38, // TEXTBOX_TYPE_E + 38, // TEXTBOX_TYPE_F +}; + +s16 sTextboxMidYPositions[] = { + 90, // TEXTBOX_TYPE_0 + 90, // TEXTBOX_TYPE_1 + 90, // TEXTBOX_TYPE_2 + 90, // TEXTBOX_TYPE_3 + 174, // TEXTBOX_TYPE_4 + 90, // TEXTBOX_TYPE_5 + 90, // TEXTBOX_TYPE_6 + 90, // TEXTBOX_TYPE_7 + 90, // TEXTBOX_TYPE_8 + 90, // TEXTBOX_TYPE_9 + 174, // TEXTBOX_TYPE_A + 0, // TEXTBOX_TYPE_B + 90, // TEXTBOX_TYPE_C + 90, // TEXTBOX_TYPE_D + 90, // TEXTBOX_TYPE_E + 90, // TEXTBOX_TYPE_F +}; + +s16 D_801D0448[] = { 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25 }; + +s16 D_801D045C[] = { + 0x1B91, + 0x1B90, + 0x1B8F, +}; +s16 D_801D0464[] = { + 0x1B92, + 0x1B8E, +}; + +#ifdef NON_MATCHING +// Down to a single compiler-managed stack variable +// Also contains in-function data +// https://decomp.me/scratch/QcQ0a +void Message_Update(PlayState* play) { + static u8 D_801D0468 = 0; + MessageContext* msgCtx = &play->msgCtx; + SramContext* sramCtx = &play->sramCtx; // Optional + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + Input* input = CONTROLLER1(&play->state); + s16 averageY; + s16 sp50; + u16 temp_v1_2; + s16 sp4C; + s16 sp4A; + s16 sp48; + s32 sp44; + s32 sp40; + u16 sp3E; + s16 var_v1; + u16 temp; + + msgCtx->stickAdjX = input->rel.stick_x; + msgCtx->stickAdjY = input->rel.stick_y; + + averageY = 0; + + // If stickAdj is held, set a delay to allow the cursor to read the next input. + // The first delay is given a longer time than all subsequent delays. + if (msgCtx->stickAdjX < -30) { + if (msgCtx->stickXRepeatState == -1) { + msgCtx->stickXRepeatTimer--; + if (msgCtx->stickXRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickXRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjX = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickXRepeatTimer = 10; + msgCtx->stickXRepeatState = -1; + } + } else if (msgCtx->stickAdjX > 30) { + if (msgCtx->stickXRepeatState == 1) { + msgCtx->stickXRepeatTimer--; + if (msgCtx->stickXRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickXRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjX = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickXRepeatTimer = 10; + msgCtx->stickXRepeatState = 1; + } + } else { + msgCtx->stickXRepeatState = 0; + } + + if (msgCtx->stickAdjY < -30) { + if (msgCtx->stickYRepeatState == -1) { + msgCtx->stickYRepeatTimer--; + if (msgCtx->stickYRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickYRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjY = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickYRepeatTimer = 10; + msgCtx->stickYRepeatState = -1; + } + } else if (msgCtx->stickAdjY > 30) { + if (msgCtx->stickYRepeatState == 1) { + msgCtx->stickYRepeatTimer--; + if (msgCtx->stickYRepeatTimer < 0) { + // Allow the input to register and apply the delay for all subsequent repeated inputs + msgCtx->stickYRepeatTimer = 2; + } else { + // Cancel the current input + msgCtx->stickAdjY = 0; + } + } else { + // Allow the input to register and apply the delay for the first repeated input + msgCtx->stickYRepeatTimer = 10; + msgCtx->stickYRepeatState = 1; + } + } else { + msgCtx->stickYRepeatState = 0; + } + + if (msgCtx->msgLength == 0) { + return; + } + + switch (msgCtx->msgMode) { + case MSGMODE_TEXT_START: + D_801C6A70++; + + temp = false; + if ((D_801C6A70 >= 4) || ((msgCtx->talkActor == NULL) && (D_801C6A70 >= 2))) { + temp = true; + } + if (temp) { + if (msgCtx->talkActor != NULL) { + Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &sp50, &sp4C); + Actor_GetScreenPos(play, msgCtx->talkActor, &sp50, &sp4A); + if (sp4C >= sp4A) { + averageY = ((sp4C - sp4A) / 2) + sp4A; + } else { + averageY = ((sp4A - sp4C) / 2) + sp4C; + } + } else { + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + } + + var_v1 = msgCtx->textBoxType; + + if ((u32)msgCtx->textBoxPos == 0) { + if ((play->sceneId == SCENE_UNSET_04) || (play->sceneId == SCENE_UNSET_05) || + (play->sceneId == SCENE_UNSET_06)) { + if (averageY < 0x64) { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } else { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } + } else { + if (averageY < 0xA0) { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } else { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } + } + } else if (msgCtx->textBoxPos == 1) { + msgCtx->textboxYTarget = sTextboxUpperYPositions[var_v1]; + } else if (msgCtx->textBoxPos == 2) { + msgCtx->textboxYTarget = sTextboxMidYPositions[var_v1]; + } else if (msgCtx->textBoxPos == 7) { + msgCtx->textboxYTarget = 0x9E; + } else { + msgCtx->textboxYTarget = sTextboxLowerYPositions[var_v1]; + } + + msgCtx->textboxXTarget = sTextboxXPositions[var_v1]; + + if ((gSaveContext.options.language == LANGUAGE_JPN) && !msgCtx->textIsCredits) { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 7); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x19); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2B); + } else { + msgCtx->unk11FFE[0] = (s16)(msgCtx->textboxYTarget + 0x14); + msgCtx->unk11FFE[1] = (s16)(msgCtx->textboxYTarget + 0x20); + msgCtx->unk11FFE[2] = (s16)(msgCtx->textboxYTarget + 0x2C); + } + + if ((msgCtx->textBoxType == TEXTBOX_TYPE_4) || (msgCtx->textBoxType == TEXTBOX_TYPE_5)) { + msgCtx->msgMode = MSGMODE_TEXT_STARTING; + msgCtx->textboxX = msgCtx->textboxXTarget; + msgCtx->textboxY = msgCtx->textboxYTarget; + msgCtx->unk12008 = 0x100; + msgCtx->unk1200A = 0x40; + msgCtx->unk1200C = 0x200; + msgCtx->unk1200E = 0x200; + break; + } + + Message_GrowTextbox(play); + Audio_PlaySfx_IfNotInCutscene(NA_SE_NONE); + msgCtx->stateTimer = 0; + msgCtx->msgMode = MSGMODE_TEXT_BOX_GROWING; + + if (!pauseCtx->itemDescriptionOn) { + func_80150A84(play); + } + } + break; + + case MSGMODE_TEXT_BOX_GROWING: + Message_GrowTextbox(play); + break; + + case MSGMODE_TEXT_STARTING: + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + if (!pauseCtx->itemDescriptionOn) { + if (msgCtx->currentTextId == 0xFF) { + func_8011552C(play, DO_ACTION_STOP); + } else if (msgCtx->currentTextId != 0xF8) { + func_8011552C(play, DO_ACTION_NEXT); + } + } + break; + + case MSGMODE_TEXT_NEXT_MSG: + Message_Decode(play); + if (msgCtx->textFade) { + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + } + if (D_801D0468 != 0) { + msgCtx->textDrawPos = msgCtx->decodedTextLen; + D_801D0468 = 0; + } + break; + + case MSGMODE_TEXT_CONTINUING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + Message_Decode(play); + } + break; + + case MSGMODE_TEXT_DISPLAYING: + if (msgCtx->textBoxType != TEXTBOX_TYPE_4) { + if (CHECK_BTN_ALL(input->press.button, BTN_B) && !msgCtx->textUnskippable) { + msgCtx->textboxSkipped = true; + msgCtx->textDrawPos = msgCtx->decodedTextLen; + } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && !msgCtx->textUnskippable) { + + while (true) { + temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos]; + if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) || + (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) || + (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) { + break; + } + msgCtx->textDrawPos++; + } + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && (msgCtx->textUnskippable == 0)) { + while (true) { + temp_v1_2 = msgCtx->decodedBuffer.wchar[msgCtx->textDrawPos]; + if ((temp_v1_2 == 0x10) || (temp_v1_2 == 0x12) || (temp_v1_2 == 0x1B) || (temp_v1_2 == 0x1C) || + (temp_v1_2 == 0x1D) || (temp_v1_2 == 0x19) || (temp_v1_2 == 0xE0) || (temp_v1_2 == 0xBF) || + (temp_v1_2 == 0x15) || (temp_v1_2 == 0x1A)) { + break; + } + msgCtx->textDrawPos++; + } + } + break; + + case MSGMODE_TEXT_AWAIT_INPUT: + if (Message_ShouldAdvance(play)) { + msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING; + msgCtx->textDrawPos++; + } + break; + + case MSGMODE_TEXT_DELAYED_BREAK: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + } + break; + + case MSGMODE_TEXT_AWAIT_NEXT: + if (Message_ShouldAdvance(play)) { + msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG; + msgCtx->msgBufPos++; + } + break; + + case MSGMODE_TEXT_DONE: + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52)) { + msgCtx->stateTimer--; + if ((msgCtx->stateTimer == 0) || + ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) && Message_ShouldAdvance(play))) { + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + } else if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + Message_CloseTextbox(play); + } + } else { + Message_CloseTextbox(play); + } + } + } else { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_40) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_42) || (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_41)) { + return; + } + + switch (msgCtx->textboxEndType) { + case TEXTBOX_ENDTYPE_55: + msgCtx->textColorAlpha += 20; + if (msgCtx->textColorAlpha >= 255) { + msgCtx->textColorAlpha = 255; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_56; + } + break; + + case TEXTBOX_ENDTYPE_56: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_57; + } + break; + + case TEXTBOX_ENDTYPE_57: + msgCtx->textColorAlpha -= 20; + if (msgCtx->textColorAlpha <= 0) { + msgCtx->textColorAlpha = 0; + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + return; + } + if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + Message_CloseTextbox(play); + return; + } + } else { + Message_CloseTextbox(play); + return; + } + } + break; + + case TEXTBOX_ENDTYPE_10: + Message_HandleChoiceSelection(play, 1); + break; + + case TEXTBOX_ENDTYPE_11: + Message_HandleChoiceSelection(play, 2); + break; + + case TEXTBOX_ENDTYPE_12: + Message_HandleChoiceSelection(play, 1); + break; + + default: + break; + } + + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_SOT)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + msgCtx->msgMode = MSGMODE_NEW_CYCLE_0; + msgCtx->decodedTextLen -= 3; + msgCtx->unk120D6 = 0; + msgCtx->unk120D4 = 0; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_INVERTED_TIME)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + if (gSaveContext.save.timeSpeedOffset == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_SLOW; + gSaveContext.save.timeSpeedOffset = -2; + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_INV_SOT_FAST; + gSaveContext.save.timeSpeedOffset = 0; + } + Message_CloseTextbox(play); + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_DOUBLE_TIME)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + if (gSaveContext.save.isNight != 0) { + gSaveContext.save.time = CLOCK_TIME(6, 0); + } else { + gSaveContext.save.time = CLOCK_TIME(18, 0); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_DOUBLE_SOT; + gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType != TEXTBOX_ENDTYPE_10) || + (pauseCtx->state != PAUSE_STATE_OWLWARP_CONFIRM)) { + if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_1B)) { + if (Message_ShouldAdvance(play)) { + if (msgCtx->choiceIndex == 0) { + Audio_PlaySfx_MessageDecide(); + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP_TO_ENTRANCE; + } else { + Audio_PlaySfx_MessageCancel(); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + Message_CloseTextbox(play); + } + } else if ((msgCtx->textboxEndType == TEXTBOX_ENDTYPE_60) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_61) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_10) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_11) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_52) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_55) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_56) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_57) || + (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_62)) { + //! FAKE: debug? + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_50) {} + } else if (pauseCtx->itemDescriptionOn) { + if ((input->rel.stick_x != 0) || (input->rel.stick_y != 0) || + CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B) || + CHECK_BTN_ALL(input->press.button, BTN_START)) { + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + } + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_PROCESS_RESTRICTED_SONG) { + if (Message_ShouldAdvanceSilent(play)) { + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else if ((msgCtx->currentTextId != 0x2790) && Message_ShouldAdvanceSilent(play)) { + if (msgCtx->nextTextId != 0xFFFF) { + Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); + Message_ContinueTextbox(play, msgCtx->nextTextId); + } else if ((msgCtx->bombersNotebookEventQueueCount == 0) || + (Message_BombersNotebookProcessEventQueue(play) != 1)) { + if (msgCtx->currentTextId == 0x579) { + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + } + Audio_PlaySfx(NA_SE_SY_DECIDE); + Message_CloseTextbox(play); + } + } + } + } + break; + + case MSGMODE_TEXT_CLOSING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer != 0) { + break; + } + + if (sLastPlayedSong == OCARINA_SONG_SOARING) { + if (interfaceCtx->restrictions.songOfSoaring == 0) { + if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) { + Message_StartTextbox(play, 0x1B93, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_1B; + sLastPlayedSong = 0xFF; + } else if (!msgCtx->ocarinaSongEffectActive) { + if (gSaveContext.save.saveInfo.playerData.owlActivationFlags != 0) { + pauseCtx->unk_2C8 = pauseCtx->pageIndex; + pauseCtx->unk_2CA = pauseCtx->cursorPoint[4]; + pauseCtx->pageIndex = PAUSE_ITEM; + pauseCtx->state = PAUSE_STATE_OWLWARP_0; + func_800F4A10(play); + pauseCtx->pageIndex = PAUSE_MAP; + sLastPlayedSong = 0xFF; + Message_CloseTextbox(play); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + gSaveContext.prevHudVisibility = HUD_VISIBILITY_A_B; + func_80115844(play, DO_ACTION_STOP); + GameState_SetFramerateDivisor(&play->state, 2); + if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) { + ShrinkWindow_Letterbox_SetSizeTarget(0); + } + Audio_PlaySfx_PauseMenuOpenOrClose(1); + break; + } + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0xFB, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } else { + msgCtx->stateTimer = 1; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + break; + } + + if ((msgCtx->currentTextId == 0xC) || (msgCtx->currentTextId == 0xD) || (msgCtx->currentTextId == 0xC5) || + (msgCtx->currentTextId == 0xC6) || (msgCtx->currentTextId == 0xC7) || + (msgCtx->currentTextId == 0x2165) || (msgCtx->currentTextId == 0x2166) || + (msgCtx->currentTextId == 0x2167) || (msgCtx->currentTextId == 0x2168)) { + gSaveContext.healthAccumulator = 20 * 0x10; // Refill 20 hearts + } + + if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.save.cutsceneIndex < 0xFFF0) && + ((play->activeCamId == CAM_ID_MAIN) || + ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF))) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) { + if ((gSaveContext.prevHudVisibility == HUD_VISIBILITY_IDLE) || + (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE) || + (gSaveContext.prevHudVisibility == HUD_VISIBILITY_NONE_ALT)) { + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; + } + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + } + + if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) && + (play->actorCtx.flags & ACTORCTX_FLAG_1)) { + Message_StartTextbox(play, 0x5E6, NULL); + break; + } + + if (msgCtx->bombersNotebookEventQueueCount != 0) { + if (Message_BombersNotebookProcessEventQueue(play) == 0) { + msgCtx->stateTimer = 1; + } + break; + } + + msgCtx->msgLength = 0; + msgCtx->msgMode = MSGMODE_NONE; + msgCtx->currentTextId = 0; + msgCtx->stateTimer = 0; + XREG(31) = 0; + + if (pauseCtx->itemDescriptionOn) { + func_8011552C(play, DO_ACTION_INFO); + pauseCtx->itemDescriptionOn = false; + } + + if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_30) { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + play->msgCtx.ocarinaMode = OCARINA_MODE_WARP; + } else { + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; + } + + if (EQ_MAX_QUEST_HEART_PIECE_COUNT) { + RESET_HEART_PIECE_COUNT; + gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10; + gSaveContext.save.saveInfo.playerData.health += 0x10; + } + + if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) { + s16 pad; + + if (sLastPlayedSong == OCARINA_SONG_TIME) { + if (interfaceCtx->restrictions.songOfTime == 0) { + Message_StartTextbox(play, 0x1B8A, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_SOT; + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if (sLastPlayedSong == OCARINA_SONG_INVERTED_TIME) { + if (interfaceCtx->restrictions.invSongOfTime == 0) { + if (R_TIME_SPEED != 0) { + if (gSaveContext.save.timeSpeedOffset == 0) { + Message_StartTextbox(play, 0x1B8C, NULL); + } else { + Message_StartTextbox(play, 0x1B8D, NULL); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_INVERTED_TIME; + } else { + Message_StartTextbox(play, 0x1B8B, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if (sLastPlayedSong == OCARINA_SONG_DOUBLE_TIME) { + if (interfaceCtx->restrictions.songOfDoubleTime == 0) { + if ((CURRENT_DAY != 3) || (gSaveContext.save.isNight == 0)) { + if (gSaveContext.save.isNight) { + Message_StartTextbox(play, D_801D0464[CURRENT_DAY - 1], NULL); + } else { + Message_StartTextbox(play, D_801D045C[CURRENT_DAY - 1], NULL); + } + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_DOUBLE_TIME; + } else { + Message_StartTextbox(play, 0x1B94, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + } + } else { + sLastPlayedSong = 0xFF; + Message_StartTextbox(play, 0x1B95, NULL); + play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_RESTRICTED_SONG; + } + } else if ((msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE) && + ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG))) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + if (msgCtx->lastPlayedSong == OCARINA_SONG_SOARING) { + play->msgCtx.ocarinaMode = OCARINA_MODE_ACTIVE; + } + } + sLastPlayedSong = 0xFF; + } + break; + + case MSGMODE_OCARINA_PLAYING: + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + play->msgCtx.ocarinaMode = OCARINA_MODE_END; + Message_CloseTextbox(play); + } else { + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + } + break; + + case MSGMODE_OCARINA_AWAIT_INPUT: + if ((msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF) && + (msgCtx->ocarinaAction != OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF)) { + if (Message_ShouldAdvance(play)) { + Message_DisplayOcarinaStaff(play, msgCtx->ocarinaAction); + } + } + break; + + case MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING: + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + AudioOcarina_SetRecordingState(OCARINA_RECORD_OFF); + Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR); + Message_CloseTextbox(play); + msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED; + } else { + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND: + msgCtx->textboxColorAlphaCurrent += XREG(73); + if (msgCtx->textboxColorAlphaCurrent >= 255) { + msgCtx->textboxColorAlphaCurrent = 255; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT: + msgCtx->textColorAlpha += XREG(73); + if (msgCtx->textColorAlpha >= 255) { + msgCtx->textColorAlpha = 255; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_DISPLAYING; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_DISPLAYING: + msgCtx->stateTimer--; + if (msgCtx->stateTimer == 0) { + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT: + msgCtx->textColorAlpha -= XREG(70); + if (msgCtx->textColorAlpha <= 0) { + msgCtx->textColorAlpha = 0; + msgCtx->msgMode = MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND; + } + break; + + case MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND: + msgCtx->textboxColorAlphaCurrent -= XREG(70); + if (msgCtx->textboxColorAlphaCurrent <= 0) { + if ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6) && + (play->actorCtx.flags & ACTORCTX_FLAG_1)) { + Message_StartTextbox(play, 0x5E6, NULL); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE_ALT); + } else { + //! FAKE: debug? + if (msgCtx->currentTextId >= 0x100) { + if (msgCtx && msgCtx && msgCtx) {} + } + msgCtx->textboxColorAlphaCurrent = 0; + msgCtx->msgLength = 0; + msgCtx->msgMode = MSGMODE_NONE; + msgCtx->currentTextId = 0; + msgCtx->stateTimer = 0; + } + } + break; + + case MSGMODE_NEW_CYCLE_0: + play->state.unk_A3 = 1; + sp44 = gSaveContext.save.cutsceneIndex; + sp3E = gSaveContext.save.time; + sp40 = gSaveContext.save.day; + + Sram_SaveEndOfCycle(play); + gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; + func_8014546C(&play->sramCtx); + + gSaveContext.save.day = sp40; + gSaveContext.save.time = sp3E; + gSaveContext.save.cutsceneIndex = sp44; + + if (gSaveContext.fileNum != 0xFF) { + Sram_SetFlashPagesDefault(&play->sramCtx, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]); + Sram_StartWriteToFlashDefault(&play->sramCtx); + } + msgCtx->msgMode = MSGMODE_NEW_CYCLE_1; + break; + + case MSGMODE_NEW_CYCLE_1: + if (gSaveContext.fileNum != 0xFF) { + play->state.unk_A3 = 1; + if (play->sramCtx.status == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_NEW_CYCLE_2; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_NEW_CYCLE_2; + } + break; + + case MSGMODE_OWL_SAVE_0: + play->state.unk_A3 = 1; + gSaveContext.save.isOwlSave = true; + Play_SaveCycleSceneFlags(&play->state); + func_8014546C(&play->sramCtx); + + if (gSaveContext.fileNum != 0xFF) { + Sram_SetFlashPagesOwlSave(&play->sramCtx, gFlashOwlSaveStartPages[gSaveContext.fileNum * 2], + gFlashOwlSaveNumPages[gSaveContext.fileNum * 2]); + Sram_StartWriteToFlashOwlSave(&play->sramCtx); + } + msgCtx->msgMode = MSGMODE_OWL_SAVE_1; + break; + + case MSGMODE_OWL_SAVE_1: + if (gSaveContext.fileNum != 0xFF) { + play->state.unk_A3 = 1; + if (play->sramCtx.status == 0) { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_OWL_SAVE_2; + } + } else { + play->msgCtx.ocarinaMode = OCARINA_MODE_APPLY_SOT; + msgCtx->msgMode = MSGMODE_OWL_SAVE_2; + } + + if (msgCtx->msgMode == MSGMODE_OWL_SAVE_2) { + gSaveContext.gameMode = GAMEMODE_OWL_SAVE; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_BLACK; + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + gSaveContext.save.cutsceneIndex = 0; + gSaveContext.sceneLayer = 0; + } + break; + + case MSGMODE_9: + case MSGMODE_PAUSED: + case MSGMODE_NEW_CYCLE_2: + case MSGMODE_OWL_SAVE_2: + break; + + default: + msgCtx->ocarinaButtonIndex = OCARINA_BTN_INVALID; + break; + } +} +#else +u8 D_801D0468 = 0; +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s") +#endif + +void Message_SetTables(PlayState* play) { play->msgCtx.messageEntryTableNes = D_801C6B98; play->msgCtx.messageTableStaff = D_801CFB08; } @@ -587,26 +6013,32 @@ void Message_Init(PlayState* play) { Font* font; MessageContext* msgCtx = &play->msgCtx; - func_801586A4(play); - play->msgCtx.ocarinaMode = 0; - msgCtx->msgMode = 0; + Message_SetTables(play); + + play->msgCtx.ocarinaMode = OCARINA_MODE_NONE; + + msgCtx->msgMode = MSGMODE_NONE; msgCtx->msgLength = 0; msgCtx->currentTextId = 0; - msgCtx->textboxEndType = 0; + msgCtx->textboxEndType = TEXTBOX_ENDTYPE_00; msgCtx->choiceIndex = 0; msgCtx->ocarinaAction = msgCtx->textUnskippable = 0; msgCtx->textColorAlpha = 0xFF; + View_Init(&msgCtx->view, play->state.gfxCtx); + msgCtx->textboxSegment = THA_AllocTailAlign16(&play->state.tha, 0x13C00); + font = &play->msgCtx.font; Font_LoadOrderedFont(&play->msgCtx.font); font->unk_11D88 = 0; + msgCtx->textIsCredits = msgCtx->messageHasSetSfx = false; - msgCtx->textboxSkipped = 0; - msgCtx->textFade = 0; + msgCtx->textboxSkipped = false; + msgCtx->textFade = false; msgCtx->ocarinaAvailableSongs = 0; - msgCtx->textboxX = 0x34; - msgCtx->textboxY = 0x24; + msgCtx->textboxX = 52; + msgCtx->textboxY = 36; msgCtx->ocarinaSongEffectActive = false; msgCtx->unk120BE = 0; msgCtx->unk120C0 = 0; diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index 6ace9acc1..3775b5b26 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -2,7 +2,6 @@ #include "message_data_static.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -// fontWidth f32 sNESFontWidths[160] = { 8.0f, 8.0f, 6.0f, 9.0f, 9.0f, 14.0f, 12.0f, 3.0f, 7.0f, 7.0f, 7.0f, 9.0f, 4.0f, 6.0f, 4.0f, 9.0f, 10.0f, 5.0f, 9.0f, 9.0f, 10.0f, 9.0f, 9.0f, 9.0f, 9.0f, 9.0f, 6.0f, 6.0f, 9.0f, 11.0f, 9.0f, 11.0f, diff --git a/src/code/z_message_tables.inc.c b/src/code/z_message_tables.inc.c new file mode 100644 index 000000000..fb60e7a14 --- /dev/null +++ b/src/code/z_message_tables.inc.c @@ -0,0 +1,1172 @@ +#include "include/message_data_static.h" +#include "PR/mbi.h" + +MessageTableEntry D_801C6B98[4590] = { + { 0, 0, 0x08000000 }, { 2, 0, 0x0800000C }, { 4, 0, 0x08000064 }, { 5, 0, 0x080000B8 }, + { 6, 0, 0x08000110 }, { 7, 0, 0x08000168 }, { 8, 0, 0x080001C4 }, { 9, 0, 0x08000248 }, + { 0xA, 0, 0x080002A8 }, { 0xB, 0, 0x08000310 }, { 0xC, 0, 0x0800031C }, { 0xD, 0, 0x080003E8 }, + { 0xE, 0, 0x08000474 }, { 0xF, 0, 0x080004BC }, { 0x10, 0, 0x08000504 }, { 0x11, 0, 0x08000510 }, + { 0x12, 0, 0x08000554 }, { 0x13, 0, 0x08000560 }, { 0x14, 0, 0x0800056C }, { 0x15, 0, 0x08000604 }, + { 0x16, 0, 0x080006A0 }, { 0x17, 0, 0x0800073C }, { 0x18, 0, 0x080007D8 }, { 0x19, 0, 0x08000874 }, + { 0x1A, 0, 0x08000940 }, { 0x1B, 0, 0x080009E8 }, { 0x1C, 0, 0x08000A84 }, { 0x1D, 0, 0x08000AD4 }, + { 0x1E, 0, 0x08000B28 }, { 0x1F, 0, 0x08000B58 }, { 0x20, 0, 0x08000B88 }, { 0x21, 0, 0x08000BB8 }, + { 0x22, 0, 0x08000BE8 }, { 0x23, 0, 0x08000C78 }, { 0x24, 0, 0x08000CD0 }, { 0x25, 0, 0x08000D30 }, + { 0x26, 0, 0x08000DA4 }, { 0x27, 0, 0x08000E38 }, { 0x28, 0, 0x08000EB4 }, { 0x29, 0, 0x08000F88 }, + { 0x2A, 0, 0x08001060 }, { 0x2B, 0, 0x0800113C }, { 0x2C, 0, 0x08001148 }, { 0x2D, 0, 0x08001154 }, + { 0x2E, 0, 0x08001160 }, { 0x2F, 0, 0x08001210 }, { 0x30, 0, 0x0800121C }, { 0x31, 0, 0x08001228 }, + { 0x32, 0, 0x08001234 }, { 0x33, 0, 0x080012D4 }, { 0x34, 0, 0x0800139C }, { 0x35, 0, 0x08001428 }, + { 0x36, 0, 0x080014B0 }, { 0x37, 0, 0x08001554 }, { 0x38, 0, 0x08001560 }, { 0x39, 0, 0x08001624 }, + { 0x3A, 0, 0x080016B8 }, { 0x3B, 0, 0x08001768 }, { 0x3C, 0, 0x08001814 }, { 0x3D, 0, 0x08001884 }, + { 0x3E, 0, 0x080018E0 }, { 0x3F, 0, 0x080019DC }, { 0x40, 0, 0x08001A48 }, { 0x41, 0, 0x08001A54 }, + { 0x42, 0, 0x08001B0C }, { 0x43, 0, 0x08001BF4 }, { 0x4C, 0, 0x08001CBC }, { 0x4D, 0, 0x08001DBC }, + { 0x4E, 0, 0x08001DC8 }, { 0x50, 0, 0x08001DD4 }, { 0x51, 0, 0x08001EA4 }, { 0x52, 0, 0x08001EB0 }, + { 0x53, 0, 0x08001EFC }, { 0x54, 0, 0x08001F08 }, { 0x55, 0, 0x08001F14 }, { 0x56, 0, 0x08001FB8 }, + { 0x57, 0, 0x08002058 }, { 0x58, 0, 0x080020F8 }, { 0x59, 0, 0x080021A0 }, { 0x5A, 0, 0x08002290 }, + { 0x5B, 0, 0x080022E4 }, { 0x5C, 0, 0x08002388 }, { 0x5D, 0, 0x08002434 }, { 0x5E, 0, 0x080024E8 }, + { 0x5F, 0, 0x08002590 }, { 0x60, 0, 0x0800261C }, { 0x61, 0, 0x080026F0 }, { 0x62, 0, 0x080026FC }, + { 0x63, 0, 0x08002760 }, { 0x64, 0, 0x080027CC }, { 0x65, 0, 0x080027D8 }, { 0x66, 0, 0x0800282C }, + { 0x67, 0, 0x08002884 }, { 0x68, 0, 0x080028EC }, { 0x69, 0, 0x08002950 }, { 0x6A, 0, 0x080029CC }, + { 0x6B, 0, 0x08002A24 }, { 0x6E, 0, 0x08002A7C }, { 0x6F, 0, 0x08002A88 }, { 0x70, 0, 0x08002B54 }, + { 0x71, 0, 0x08002B60 }, { 0x72, 0, 0x08002B6C }, { 0x73, 0, 0x08002B78 }, { 0x74, 0, 0x08002B84 }, + { 0x75, 0, 0x08002B90 }, { 0x76, 0, 0x08002B9C }, { 0x77, 0, 0x08002BA8 }, { 0x78, 0, 0x08002BB4 }, + { 0x79, 0, 0x08002C98 }, { 0x7A, 0, 0x08002D54 }, { 0x7B, 0, 0x08002E14 }, { 0x7C, 0, 0x08002E90 }, + { 0x7D, 0, 0x08002F20 }, { 0x7E, 0, 0x08002F9C }, { 0x7F, 0, 0x0800302C }, { 0x80, 0, 0x0800309C }, + { 0x81, 0, 0x08003144 }, { 0x82, 0, 0x080031B0 }, { 0x83, 0, 0x08003224 }, { 0x84, 0, 0x08003298 }, + { 0x85, 0, 0x08003324 }, { 0x86, 0, 0x08003370 }, { 0x87, 0, 0x08003444 }, { 0x88, 0, 0x080034F8 }, + { 0x89, 0, 0x08003560 }, { 0x8A, 0, 0x080035F4 }, { 0x8B, 0, 0x080036B8 }, { 0x8C, 0, 0x08003710 }, + { 0x8D, 0, 0x080037A0 }, { 0x8E, 0, 0x08003828 }, { 0x8F, 0, 0x080038E0 }, { 0x91, 0, 0x0800396C }, + { 0x92, 0, 0x08003A44 }, { 0x93, 0, 0x08003B08 }, { 0x94, 0, 0x08003B60 }, { 0x95, 0, 0x08003B6C }, + { 0x96, 0, 0x08003BC0 }, { 0x97, 0, 0x08003C1C }, { 0x98, 0, 0x08003C60 }, { 0x99, 0, 0x08003CA8 }, + { 0x9A, 0, 0x08003CF4 }, { 0x9B, 0, 0x08003D40 }, { 0x9C, 0, 0x08003DE0 }, { 0x9D, 0, 0x08003E78 }, + { 0x9E, 0, 0x08003F10 }, { 0x9F, 0, 0x08003FA8 }, { 0xA0, 0, 0x08003FB4 }, { 0xA1, 0, 0x0800401C }, + { 0xA2, 0, 0x08004088 }, { 0xA3, 0, 0x08004094 }, { 0xA4, 0, 0x080040A0 }, { 0xA9, 0, 0x080040AC }, + { 0xAA, 0, 0x08004130 }, { 0xAB, 0, 0x08004198 }, { 0xAC, 0, 0x08004240 }, { 0xAD, 0, 0x0800424C }, + { 0xAE, 0, 0x08004258 }, { 0xAF, 0, 0x08004264 }, { 0xB0, 0, 0x08004270 }, { 0xB1, 0, 0x0800427C }, + { 0xB2, 0, 0x08004288 }, { 0xB4, 0, 0x08004294 }, { 0xB5, 0, 0x08004354 }, { 0xB6, 0, 0x08004418 }, + { 0xB7, 0, 0x080044E0 }, { 0xB8, 0, 0x080045A8 }, { 0xB9, 0, 0x08004670 }, { 0xBA, 0, 0x08004738 }, + { 0xBB, 0, 0x08004744 }, { 0xBC, 0, 0x08004750 }, { 0xBD, 0, 0x0800475C }, { 0xBE, 0, 0x08004768 }, + { 0xBF, 0, 0x08004774 }, { 0xC0, 0, 0x08004780 }, { 0xC4, 0, 0x0800478C }, { 0xC5, 0, 0x080047D0 }, + { 0xC6, 0, 0x08004850 }, { 0xC7, 0, 0x080048D0 }, { 0xC8, 0, 0x08004954 }, { 0xC9, 0, 0x08004A5C }, + { 0xCA, 0, 0x08004AFC }, { 0xCB, 0, 0x08004C14 }, { 0xCC, 0, 0x08004C78 }, { 0xCD, 0, 0x08004CDC }, + { 0xF2, 0, 0x08004D8C }, { 0xF3, 0, 0x08004DC8 }, { 0xF4, 0, 0x08004E3C }, { 0xF5, 0, 0x08004E8C }, + { 0xF6, 0, 0x08004EDC }, { 0xF7, 0, 0x08004F30 }, { 0xF8, 0, 0x08004F70 }, { 0xF9, 0, 0x08004F9C }, + { 0xFA, 0, 0x08005034 }, { 0xFB, 0, 0x08005088 }, { 0xFC, 0, 0x080050FC }, { 0xFD, 0, 0x0800515C }, + { 0xFE, 0, 0x08005184 }, { 0xFF, 0, 0x080051B8 }, { 0x100, 0, 0x08005214 }, { 0x101, 0, 0x08005230 }, + { 0x102, 0, 0x0800524C }, { 0x103, 0, 0x08005268 }, { 0x104, 0, 0x08005284 }, { 0x105, 0, 0x080052A0 }, + { 0x106, 0, 0x080052B8 }, { 0x107, 0, 0x080052D4 }, { 0x108, 0, 0x080052F8 }, { 0x109, 0, 0x0800531C }, + { 0x10A, 0, 0x0800533C }, { 0x10B, 0, 0x08005358 }, { 0x10C, 0, 0x0800537C }, { 0x10D, 0, 0x08005390 }, + { 0x10E, 0, 0x080053A8 }, { 0x10F, 0, 0x080053C4 }, { 0x110, 0, 0x080053DC }, { 0x111, 0, 0x080053FC }, + { 0x112, 0, 0x08005414 }, { 0x113, 0, 0x0800542C }, { 0x114, 0, 0x08005450 }, { 0x115, 0, 0x08005470 }, + { 0x116, 0, 0x0800548C }, { 0x117, 0, 0x080054A8 }, { 0x118, 0, 0x080054BC }, { 0x119, 0, 0x080054D4 }, + { 0x11A, 0, 0x080054F4 }, { 0x11B, 0, 0x08005518 }, { 0x11C, 0, 0x0800553C }, { 0x11D, 0, 0x0800555C }, + { 0x11E, 0, 0x08005578 }, { 0x11F, 0, 0x08005598 }, { 0x120, 0, 0x080055B4 }, { 0x121, 0, 0x080055CC }, + { 0x122, 0, 0x080055E8 }, { 0x123, 0, 0x08005604 }, { 0x124, 0, 0x08005620 }, { 0x125, 0, 0x08005638 }, + { 0x126, 0, 0x0800564C }, { 0x127, 0, 0x08005668 }, { 0x129, 0, 0x08005684 }, { 0x12A, 0, 0x0800569C }, + { 0x12B, 0, 0x080056B8 }, { 0x12C, 0, 0x080056D4 }, { 0x12D, 0, 0x080056F0 }, { 0x12E, 0, 0x0800570C }, + { 0x12F, 0, 0x08005724 }, { 0x130, 0, 0x0800573C }, { 0x131, 0, 0x08005758 }, { 0x132, 0, 0x08005770 }, + { 0x134, 0, 0x08005788 }, { 0x135, 0, 0x080057A4 }, { 0x136, 0, 0x080057C0 }, { 0x137, 0, 0x080057D8 }, + { 0x138, 0, 0x080057F4 }, { 0x139, 0, 0x08005814 }, { 0x13A, 0, 0x0800582C }, { 0x13B, 0, 0x0800584C }, + { 0x13D, 0, 0x08005868 }, { 0x13E, 0, 0x08005884 }, { 0x13F, 0, 0x080058A0 }, { 0x140, 0, 0x080058C4 }, + { 0x141, 0, 0x080058DC }, { 0x142, 0, 0x080058F4 }, { 0x143, 0, 0x08005918 }, { 0x144, 0, 0x08005934 }, + { 0x145, 0, 0x08005954 }, { 0x146, 0, 0x08005970 }, { 0x147, 0, 0x08005988 }, { 0x148, 0, 0x080059A4 }, + { 0x149, 0, 0x080059C0 }, { 0x200, 0, 0x080059D8 }, { 0x201, 0, 0x08005A54 }, { 0x202, 0, 0x08005B48 }, + { 0x203, 0, 0x08005B74 }, { 0x204, 0, 0x08005BE4 }, { 0x205, 0, 0x08005C38 }, { 0x206, 0, 0x08005C94 }, + { 0x207, 0, 0x08005D04 }, { 0x208, 0, 0x08005D2C }, { 0x209, 0, 0x08005D64 }, { 0x20A, 0, 0x08005DB4 }, + { 0x20B, 0, 0x08005E08 }, { 0x20C, 0, 0x08005E14 }, { 0x20D, 0, 0x08005E60 }, { 0x20E, 0, 0x08005ECC }, + { 0x20F, 0, 0x08005ED8 }, { 0x210, 0, 0x08005F74 }, { 0x211, 0, 0x08005FAC }, { 0x212, 0, 0x08005FD4 }, + { 0x213, 0, 0x0800602C }, { 0x214, 0, 0x08006050 }, { 0x215, 0, 0x08006124 }, { 0x216, 0, 0x08006358 }, + { 0x217, 0, 0x080065B8 }, { 0x218, 0, 0x08006620 }, { 0x219, 0, 0x0800668C }, { 0x21A, 0, 0x08006720 }, + { 0x21B, 0, 0x0800674C }, { 0x21D, 0, 0x08006774 }, { 0x21E, 0, 0x080067CC }, { 0x21F, 0, 0x08006874 }, + { 0x220, 0, 0x080068E0 }, { 0x221, 0, 0x08006978 }, { 0x222, 0, 0x08006A04 }, { 0x223, 0, 0x08006A48 }, + { 0x224, 0, 0x08006AE8 }, { 0x225, 0, 0x08006B54 }, { 0x226, 0, 0x08006BB0 }, { 0x227, 0, 0x08006BE8 }, + { 0x228, 0, 0x08006D58 }, { 0x229, 0, 0x08006E18 }, { 0x22A, 0, 0x08006EA0 }, { 0x22B, 0, 0x08006F00 }, + { 0x22C, 0, 0x08006F44 }, { 0x22D, 0, 0x08006F60 }, { 0x22E, 0, 0x08006FB0 }, { 0x22F, 0, 0x08006FC8 }, + { 0x230, 0, 0x08007010 }, { 0x231, 0, 0x080070C0 }, { 0x232, 0, 0x08007110 }, { 0x233, 0, 0x08007158 }, + { 0x234, 0, 0x080071A4 }, { 0x235, 0, 0x08007208 }, { 0x236, 0, 0x0800725C }, { 0x237, 0, 0x080072AC }, + { 0x238, 0, 0x0800730C }, { 0x239, 0, 0x0800734C }, { 0x23A, 0, 0x08007400 }, { 0x23B, 0, 0x08007468 }, + { 0x23C, 0, 0x08007500 }, { 0x23D, 0, 0x08007538 }, { 0x23E, 0, 0x080075E4 }, { 0x23F, 0, 0x080075F0 }, + { 0x240, 0, 0x0800765C }, { 0x241, 0, 0x080076D0 }, { 0x242, 0, 0x08007744 }, { 0x243, 0, 0x080077B0 }, + { 0x244, 0, 0x08007830 }, { 0x245, 0, 0x08007888 }, { 0x246, 0, 0x080078B4 }, { 0x247, 0, 0x08007904 }, + { 0x248, 0, 0x08007950 }, { 0x249, 0, 0x080079A0 }, { 0x24A, 0, 0x080079F0 }, { 0x24B, 0, 0x08007A30 }, + { 0x24C, 0, 0x08007A78 }, { 0x24D, 0, 0x08007AD8 }, { 0x24E, 0, 0x08007B54 }, { 0x24F, 0, 0x08007BE8 }, + { 0x250, 0, 0x08007C88 }, { 0x251, 0, 0x08007CEC }, { 0x252, 0, 0x08007D18 }, { 0x253, 0, 0x08007D68 }, + { 0x254, 0, 0x08007DAC }, { 0x255, 0, 0x08007E04 }, { 0x256, 0, 0x08007E4C }, { 0x257, 0, 0x08007EA4 }, + { 0x258, 0, 0x08007F00 }, { 0x25A, 0, 0x08007F58 }, { 0x25B, 0, 0x08007FA0 }, { 0x25C, 0, 0x08007FDC }, + { 0x25D, 0, 0x08007FF8 }, { 0x25E, 0, 0x08008024 }, { 0x25F, 0, 0x080080E4 }, { 0x260, 0, 0x0800818C }, + { 0x261, 0, 0x080081F8 }, { 0x262, 0, 0x08008288 }, { 0x263, 0, 0x08008304 }, { 0x264, 0, 0x08008344 }, + { 0x265, 0, 0x08008420 }, { 0x302, 0, 0x08008498 }, { 0x303, 0, 0x080085DC }, { 0x304, 0, 0x08008660 }, + { 0x305, 0, 0x080086B4 }, { 0x306, 0, 0x08008720 }, { 0x307, 0, 0x0800872C }, { 0x308, 0, 0x0800875C }, + { 0x309, 0, 0x08008788 }, { 0x30A, 0, 0x080087BC }, { 0x30B, 0, 0x080087E8 }, { 0x30C, 0, 0x08008824 }, + { 0x30D, 0, 0x08008894 }, { 0x30E, 0, 0x080088E4 }, { 0x30F, 0, 0x08008914 }, { 0x310, 0, 0x08008970 }, + { 0x311, 0, 0x080089BC }, { 0x312, 0, 0x080089F0 }, { 0x313, 0, 0x08008A64 }, { 0x314, 0, 0x08008AA4 }, + { 0x315, 0, 0x08008B0C }, { 0x316, 0, 0x08008B64 }, { 0x317, 0, 0x08008BA4 }, { 0x318, 0, 0x08008BF0 }, + { 0x319, 0, 0x08008C48 }, { 0x31A, 0, 0x08008C84 }, { 0x31B, 0, 0x08008CD0 }, { 0x31C, 0, 0x08008D10 }, + { 0x31D, 0, 0x08008D5C }, { 0x31E, 0, 0x08008DCC }, { 0x31F, 0, 0x08008E2C }, { 0x320, 0, 0x08008EBC }, + { 0x321, 0, 0x08008F30 }, { 0x322, 0, 0x08008F60 }, { 0x323, 0, 0x08008F9C }, { 0x324, 0, 0x08008FFC }, + { 0x325, 0, 0x08009044 }, { 0x326, 0, 0x080090A8 }, { 0x327, 0, 0x080090F8 }, { 0x328, 0, 0x08009140 }, + { 0x329, 0, 0x08009188 }, { 0x32A, 0, 0x080091F0 }, { 0x32B, 0, 0x08009240 }, { 0x32C, 0, 0x0800928C }, + { 0x32D, 0, 0x080092F0 }, { 0x32E, 0, 0x08009318 }, { 0x32F, 0, 0x08009358 }, { 0x330, 0, 0x0800939C }, + { 0x331, 0, 0x080093E4 }, { 0x332, 0, 0x08009440 }, { 0x333, 0, 0x0800949C }, { 0x334, 0, 0x08009518 }, + { 0x335, 0, 0x0800955C }, { 0x336, 0, 0x08009598 }, { 0x337, 0, 0x08009658 }, { 0x338, 0, 0x08009680 }, + { 0x339, 0, 0x080096A8 }, { 0x33A, 0, 0x080096C8 }, { 0x33B, 0, 0x080096EC }, { 0x33C, 0, 0x0800973C }, + { 0x33D, 0, 0x08009778 }, { 0x33E, 0, 0x080097BC }, { 0x33F, 0, 0x08009930 }, { 0x340, 0, 0x08009C50 }, + { 0x341, 0, 0x08009CC4 }, { 0x342, 0, 0x08009D30 }, { 0x343, 0, 0x08009D58 }, { 0x3E8, 0, 0x08009D7C }, + { 0x3E9, 0, 0x08009DCC }, { 0x3EA, 0, 0x08009DE8 }, { 0x3EB, 0, 0x08009E2C }, { 0x3EC, 0, 0x08009E54 }, + { 0x3ED, 0, 0x08009EB8 }, { 0x3EE, 0, 0x08009EFC }, { 0x3EF, 0, 0x08009F6C }, { 0x3F0, 0, 0x08009FA0 }, + { 0x3F1, 0, 0x08009FF0 }, { 0x3F2, 0, 0x0800A030 }, { 0x3F3, 0, 0x0800A090 }, { 0x3F4, 0, 0x0800A0D0 }, + { 0x3F5, 0, 0x0800A0F8 }, { 0x3F6, 0, 0x0800A158 }, { 0x3F7, 0, 0x0800A190 }, { 0x3F8, 0, 0x0800A1BC }, + { 0x3F9, 0, 0x0800A214 }, { 0x3FA, 0, 0x0800A25C }, { 0x3FB, 0, 0x0800A29C }, { 0x3FC, 0, 0x0800A2D8 }, + { 0x3FD, 0, 0x0800A31C }, { 0x3FE, 0, 0x0800A40C }, { 0x3FF, 0, 0x0800A478 }, { 0x400, 0, 0x0800A4EC }, + { 0x401, 0, 0x0800A528 }, { 0x402, 0, 0x0800A560 }, { 0x403, 0, 0x0800A5D4 }, { 0x404, 0, 0x0800A608 }, + { 0x405, 0, 0x0800A63C }, { 0x406, 0, 0x0800A680 }, { 0x407, 0, 0x0800A6B8 }, { 0x408, 0, 0x0800A70C }, + { 0x44C, 0, 0x0800A75C }, { 0x44D, 0, 0x0800A850 }, { 0x44E, 0, 0x0800A8B8 }, { 0x44F, 0, 0x0800A904 }, + { 0x450, 0, 0x0800A924 }, { 0x451, 0, 0x0800A974 }, { 0x452, 0, 0x0800A9E8 }, { 0x453, 0, 0x0800AA24 }, + { 0x454, 0, 0x0800AA7C }, { 0x455, 0, 0x0800AAB4 }, { 0x456, 0, 0x0800AB10 }, { 0x457, 0, 0x0800AB44 }, + { 0x458, 0, 0x0800AB78 }, { 0x459, 0, 0x0800AC0C }, { 0x45A, 0, 0x0800AC84 }, { 0x45B, 0, 0x0800ACD0 }, + { 0x45C, 0, 0x0800AD4C }, { 0x45D, 0, 0x0800ADC8 }, { 0x45E, 0, 0x0800AE68 }, { 0x45F, 0, 0x0800AEBC }, + { 0x460, 0, 0x0800AF54 }, { 0x461, 0, 0x0800AF98 }, { 0x462, 0, 0x0800AFC8 }, { 0x463, 0, 0x0800AFE8 }, + { 0x464, 0, 0x0800B044 }, { 0x465, 0, 0x0800B094 }, { 0x466, 0, 0x0800B0CC }, { 0x467, 0, 0x0800B0FC }, + { 0x468, 0, 0x0800B178 }, { 0x469, 0, 0x0800B1B8 }, { 0x46A, 0, 0x0800B1F0 }, { 0x46B, 0, 0x0800B244 }, + { 0x46C, 0, 0x0800B258 }, { 0x46D, 0, 0x0800B2B4 }, { 0x46E, 0, 0x0800B324 }, { 0x46F, 0, 0x0800B374 }, + { 0x470, 0, 0x0800B3A8 }, { 0x471, 0, 0x0800B3F4 }, { 0x472, 0, 0x0800B428 }, { 0x473, 0, 0x0800B484 }, + { 0x474, 0, 0x0800B4A4 }, { 0x475, 0, 0x0800B514 }, { 0x476, 0, 0x0800B570 }, { 0x477, 0, 0x0800B5FC }, + { 0x478, 0, 0x0800B65C }, { 0x479, 0, 0x0800B6CC }, { 0x47A, 0, 0x0800B6FC }, { 0x47B, 0, 0x0800B760 }, + { 0x47C, 0, 0x0800B78C }, { 0x47D, 0, 0x0800B7DC }, { 0x47E, 0, 0x0800B82C }, { 0x4B0, 0, 0x0800B854 }, + { 0x4B1, 0, 0x0800B8B0 }, { 0x4B2, 0, 0x0800B8F8 }, { 0x4B3, 0, 0x0800B93C }, { 0x4B4, 0, 0x0800B994 }, + { 0x4B5, 0, 0x0800B9D0 }, { 0x4B6, 0, 0x0800BA04 }, { 0x4B7, 0, 0x0800BA94 }, { 0x4B8, 0, 0x0800BAC4 }, + { 0x4B9, 0, 0x0800BB4C }, { 0x4BA, 0, 0x0800BB7C }, { 0x4BB, 0, 0x0800BBFC }, { 0x4BC, 0, 0x0800BC28 }, + { 0x4BD, 0, 0x0800BCA4 }, { 0x4BE, 0, 0x0800BCD0 }, { 0x4BF, 0, 0x0800BD58 }, { 0x4C0, 0, 0x0800BD84 }, + { 0x4C1, 0, 0x0800BE18 }, { 0x4C2, 0, 0x0800BE54 }, { 0x4C3, 0, 0x0800BED0 }, { 0x4C4, 0, 0x0800BEEC }, + { 0x4C5, 0, 0x0800BF5C }, { 0x4C6, 0, 0x0800BF78 }, { 0x4C7, 0, 0x0800BFF4 }, { 0x4C8, 0, 0x0800C018 }, + { 0x4C9, 0, 0x0800C0A4 }, { 0x4CA, 0, 0x0800C0D8 }, { 0x4CB, 0, 0x0800C140 }, { 0x4CC, 0, 0x0800C158 }, + { 0x4CD, 0, 0x0800C1E0 }, { 0x4CE, 0, 0x0800C220 }, { 0x4CF, 0, 0x0800C29C }, { 0x4D0, 0, 0x0800C2D0 }, + { 0x4D1, 0, 0x0800C34C }, { 0x4D2, 0, 0x0800C378 }, { 0x4D3, 0, 0x0800C400 }, { 0x4D4, 0, 0x0800C448 }, + { 0x4D5, 0, 0x0800C4BC }, { 0x4D6, 0, 0x0800C4E0 }, { 0x4D7, 0, 0x0800C560 }, { 0x4D8, 0, 0x0800C598 }, + { 0x4D9, 0, 0x0800C604 }, { 0x4DA, 0, 0x0800C63C }, { 0x4DB, 0, 0x0800C6B4 }, { 0x4DC, 0, 0x0800C714 }, + { 0x4DD, 0, 0x0800C784 }, { 0x4DE, 0, 0x0800C7B4 }, { 0x4DF, 0, 0x0800C81C }, { 0x4E0, 0, 0x0800C840 }, + { 0x4E1, 0, 0x0800C8AC }, { 0x4E2, 0, 0x0800C8CC }, { 0x4E3, 0, 0x0800C95C }, { 0x4E4, 0, 0x0800C990 }, + { 0x4E5, 0, 0x0800CA04 }, { 0x4E6, 0, 0x0800CA20 }, { 0x4E7, 0, 0x0800CA9C }, { 0x4E8, 0, 0x0800CAC0 }, + { 0x4E9, 0, 0x0800CB48 }, { 0x4EA, 0, 0x0800CB64 }, { 0x4EB, 0, 0x0800CBE8 }, { 0x4EC, 0, 0x0800CC04 }, + { 0x4ED, 0, 0x0800CC64 }, { 0x4EE, 0, 0x0800CC88 }, { 0x4EF, 0, 0x0800CCE8 }, { 0x4F0, 0, 0x0800CD0C }, + { 0x4F1, 0, 0x0800CD7C }, { 0x514, 0, 0x0800CDA4 }, { 0x515, 0, 0x0800CED0 }, { 0x516, 0, 0x0800CFE8 }, + { 0x517, 0, 0x0800D094 }, { 0x518, 0, 0x0800D128 }, { 0x519, 0, 0x0800D1C8 }, { 0x51A, 0, 0x0800D254 }, + { 0x51B, 0, 0x0800D2A8 }, { 0x51C, 0, 0x0800D318 }, { 0x51D, 0, 0x0800D360 }, { 0x51E, 0, 0x0800D3D0 }, + { 0x51F, 0, 0x0800D418 }, { 0x520, 0, 0x0800D488 }, { 0x521, 0, 0x0800D534 }, { 0x522, 0, 0x0800D5BC }, + { 0x523, 0, 0x0800D65C }, { 0x524, 0, 0x0800D6E4 }, { 0x525, 0, 0x0800D728 }, { 0x526, 0, 0x0800D794 }, + { 0x527, 0, 0x0800D7D0 }, { 0x528, 0, 0x0800D834 }, { 0x529, 0, 0x0800D878 }, { 0x52A, 0, 0x0800D8E4 }, + { 0x52B, 0, 0x0800D98C }, { 0x52C, 0, 0x0800DA2C }, { 0x52D, 0, 0x0800DAC8 }, { 0x52E, 0, 0x0800DB6C }, + { 0x52F, 0, 0x0800DBD4 }, { 0x530, 0, 0x0800DC5C }, { 0x531, 0, 0x0800DCC4 }, { 0x532, 0, 0x0800DD54 }, + { 0x533, 0, 0x0800DDA4 }, { 0x534, 0, 0x0800DE1C }, { 0x535, 0, 0x0800DEC8 }, { 0x536, 0, 0x0800DF50 }, + { 0x537, 0, 0x0800DFF0 }, { 0x538, 0, 0x0800E078 }, { 0x539, 0, 0x0800E0BC }, { 0x53A, 0, 0x0800E128 }, + { 0x53B, 0, 0x0800E16C }, { 0x53C, 0, 0x0800E1D8 }, { 0x53D, 0, 0x0800E21C }, { 0x53E, 0, 0x0800E288 }, + { 0x53F, 0, 0x0800E334 }, { 0x540, 0, 0x0800E414 }, { 0x541, 0, 0x0800E474 }, { 0x542, 0, 0x0800E50C }, + { 0x543, 0, 0x0800E57C }, { 0x544, 0, 0x0800E614 }, { 0x545, 0, 0x0800E678 }, { 0x546, 0, 0x0800E728 }, + { 0x547, 0, 0x0800E794 }, { 0x548, 0, 0x0800E7F4 }, { 0x549, 0, 0x0800E86C }, { 0x54A, 0, 0x0800E8D8 }, + { 0x54B, 0, 0x0800E934 }, { 0x54C, 0, 0x0800E9B4 }, { 0x54D, 0, 0x0800EA28 }, { 0x54E, 0, 0x0800EB08 }, + { 0x54F, 0, 0x0800EB60 }, { 0x550, 0, 0x0800EBC8 }, { 0x551, 0, 0x0800EC2C }, { 0x552, 0, 0x0800ECAC }, + { 0x553, 0, 0x0800ED1C }, { 0x554, 0, 0x0800ED9C }, { 0x555, 0, 0x0800EE00 }, { 0x556, 0, 0x0800EEEC }, + { 0x557, 0, 0x0800EF4C }, { 0x558, 0, 0x0800EFBC }, { 0x559, 0, 0x0800F03C }, { 0x55A, 0, 0x0800F0B4 }, + { 0x55B, 0, 0x0800F110 }, { 0x55C, 0, 0x0800F188 }, { 0x55D, 0, 0x0800F258 }, { 0x55E, 0, 0x0800F300 }, + { 0x55F, 0, 0x0800F398 }, { 0x560, 0, 0x0800F44C }, { 0x561, 0, 0x0800F570 }, { 0x562, 0, 0x0800F688 }, + { 0x563, 0, 0x0800F7A8 }, { 0x564, 0, 0x0800F8B8 }, { 0x565, 0, 0x0800F9D8 }, { 0x566, 0, 0x0800FAEC }, + { 0x567, 0, 0x0800FB84 }, { 0x568, 0, 0x0800FC34 }, { 0x569, 0, 0x0800FCC8 }, { 0x56A, 0, 0x0800FD78 }, + { 0x56B, 0, 0x0800FE0C }, { 0x56C, 0, 0x0800FEBC }, { 0x56D, 0, 0x08010008 }, { 0x56E, 0, 0x08010168 }, + { 0x56F, 0, 0x080102C4 }, { 0x570, 0, 0x0801042C }, { 0x571, 0, 0x08010584 }, { 0x572, 0, 0x080106EC }, + { 0x573, 0, 0x08010844 }, { 0x578, 0, 0x080109A4 }, { 0x579, 0, 0x08010A70 }, { 0x57A, 0, 0x08010B28 }, + { 0x57B, 0, 0x08010C7C }, { 0x57C, 0, 0x08010D98 }, { 0x57D, 0, 0x08010EC4 }, { 0x57E, 0, 0x08010FF4 }, + { 0x57F, 0, 0x080110E4 }, { 0x580, 0, 0x080111D0 }, { 0x582, 0, 0x08011260 }, { 0x583, 0, 0x08011304 }, + { 0x584, 0, 0x08011374 }, { 0x585, 0, 0x08011408 }, { 0x586, 0, 0x080114BC }, { 0x587, 0, 0x08011528 }, + { 0x588, 0, 0x080115C0 }, { 0x589, 0, 0x08011674 }, { 0x58A, 0, 0x080116E4 }, { 0x58B, 0, 0x08011760 }, + { 0x58C, 0, 0x08011820 }, { 0x58D, 0, 0x08011884 }, { 0x58E, 0, 0x0801192C }, { 0x58F, 0, 0x08011A20 }, + { 0x590, 0, 0x08011B08 }, { 0x591, 0, 0x08011B68 }, { 0x592, 0, 0x08011BA4 }, { 0x593, 0, 0x08011BE4 }, + { 0x594, 0, 0x08011C20 }, { 0x595, 0, 0x08011D00 }, { 0x59C, 0, 0x08011DC8 }, { 0x59D, 0, 0x08011E78 }, + { 0x59E, 0, 0x08011EB4 }, { 0x59F, 0, 0x08011EFC }, { 0x5A0, 0, 0x08011FB4 }, { 0x5A1, 0, 0x08012068 }, + { 0x5A2, 0, 0x080120A4 }, { 0x5A3, 0, 0x080120E4 }, { 0x5A4, 0, 0x08012198 }, { 0x5A5, 0, 0x08012248 }, + { 0x5A6, 0, 0x08012284 }, { 0x5A7, 0, 0x080122C4 }, { 0x5A8, 0, 0x08012380 }, { 0x5A9, 0, 0x0801243C }, + { 0x5AA, 0, 0x08012478 }, { 0x5DC, 0, 0x080124B8 }, { 0x5DD, 0, 0x08012548 }, { 0x5DE, 0, 0x080125BC }, + { 0x5DF, 0, 0x08012678 }, { 0x5E0, 0, 0x08012730 }, { 0x5E1, 0, 0x0801276C }, { 0x5E2, 0, 0x08012784 }, + { 0x5E3, 0, 0x080127C4 }, { 0x5E4, 0, 0x080128A8 }, { 0x5E5, 0, 0x080128E0 }, { 0x5E6, 0, 0x0801294C }, + { 0x5E7, 0, 0x08012970 }, { 0x5E8, 0, 0x080129A4 }, { 0x5E9, 0, 0x08012A5C }, { 0x5EA, 0, 0x08012ACC }, + { 0x5EB, 0, 0x08012B4C }, { 0x5EC, 0, 0x08012BF0 }, { 0x5ED, 0, 0x08012CE0 }, { 0x5EE, 0, 0x08012D84 }, + { 0x5EF, 0, 0x08012DE4 }, { 0x5F0, 0, 0x08012E1C }, { 0x5F1, 0, 0x08012E7C }, { 0x5F2, 0, 0x08012EF0 }, + { 0x5F3, 0, 0x08012FAC }, { 0x5F4, 0, 0x08013060 }, { 0x5F5, 0, 0x080130F4 }, { 0x5F6, 0, 0x0801315C }, + { 0x5F7, 0, 0x08013210 }, { 0x5F8, 0, 0x08013258 }, { 0x60E, 0, 0x080132B0 }, { 0x60F, 0, 0x08013368 }, + { 0x610, 0, 0x08013470 }, { 0x611, 0, 0x08013530 }, { 0x612, 0, 0x080135F8 }, { 0x613, 0, 0x08013680 }, + { 0x614, 0, 0x080137D0 }, { 0x615, 0, 0x0801386C }, { 0x616, 0, 0x08013944 }, { 0x617, 0, 0x080139B8 }, + { 0x618, 0, 0x08013A44 }, { 0x619, 0, 0x08013AA8 }, { 0x61A, 0, 0x08013BFC }, { 0x61B, 0, 0x08013C5C }, + { 0x61C, 0, 0x08013CB0 }, { 0x61D, 0, 0x08013D00 }, { 0x61E, 0, 0x08013D60 }, { 0x61F, 0, 0x08013DAC }, + { 0x620, 0, 0x08013DEC }, { 0x621, 0, 0x08013E4C }, { 0x622, 0, 0x08013E80 }, { 0x623, 0, 0x08013ED8 }, + { 0x624, 0, 0x08013F24 }, { 0x625, 0, 0x08013FEC }, { 0x626, 0, 0x08014010 }, { 0x627, 0, 0x08014064 }, + { 0x628, 0, 0x080140C4 }, { 0x629, 0, 0x08014170 }, { 0x62A, 0, 0x08014208 }, { 0x62B, 0, 0x080142D0 }, + { 0x62C, 0, 0x08014398 }, { 0x640, 0, 0x0801454C }, { 0x641, 0, 0x0801458C }, { 0x642, 0, 0x080145B4 }, + { 0x644, 0, 0x080145F0 }, { 0x645, 0, 0x08014608 }, { 0x646, 0, 0x08014648 }, { 0x647, 0, 0x080146B0 }, + { 0x648, 0, 0x080146D4 }, { 0x649, 0, 0x08014760 }, { 0x64A, 0, 0x08014798 }, { 0x64B, 0, 0x08014850 }, + { 0x64C, 0, 0x08014898 }, { 0x64D, 0, 0x080148B4 }, { 0x64E, 0, 0x08014924 }, { 0x64F, 0, 0x08014988 }, + { 0x650, 0, 0x080149F0 }, { 0x651, 0, 0x08014A50 }, { 0x652, 0, 0x08014A8C }, { 0x653, 0, 0x08014AF4 }, + { 0x654, 0, 0x08014B34 }, { 0x655, 0, 0x08014B9C }, { 0x656, 0, 0x08014BD8 }, { 0x657, 0, 0x08014C38 }, + { 0x658, 0, 0x08014C78 }, { 0x659, 0, 0x08014CBC }, { 0x65A, 0, 0x08014D10 }, { 0x65B, 0, 0x08014D94 }, + { 0x65C, 0, 0x08014E68 }, { 0x65D, 0, 0x08014F18 }, { 0x65E, 0, 0x08014F5C }, { 0x65F, 0, 0x08014F88 }, + { 0x660, 0, 0x08014FD0 }, { 0x661, 0, 0x08015024 }, { 0x662, 0, 0x080150F0 }, { 0x663, 0, 0x08015188 }, + { 0x664, 0, 0x080151AC }, { 0x665, 0, 0x080151E4 }, { 0x666, 0, 0x08015248 }, { 0x667, 0, 0x0801529C }, + { 0x668, 0, 0x080152CC }, { 0x669, 0, 0x0801532C }, { 0x66A, 0, 0x08015390 }, { 0x66B, 0, 0x080153E4 }, + { 0x66C, 0, 0x08015450 }, { 0x66D, 0, 0x080154BC }, { 0x66E, 0, 0x08015550 }, { 0x66F, 0, 0x080155C0 }, + { 0x670, 0, 0x08015600 }, { 0x671, 0, 0x08015634 }, { 0x672, 0, 0x0801568C }, { 0x673, 0, 0x080156C8 }, + { 0x674, 0, 0x0801574C }, { 0x675, 0, 0x08015784 }, { 0x676, 0, 0x080157F8 }, { 0x677, 0, 0x0801588C }, + { 0x678, 0, 0x080158E4 }, { 0x679, 0, 0x08015940 }, { 0x67A, 0, 0x08015994 }, { 0x67B, 0, 0x080159E8 }, + { 0x67C, 0, 0x08015A48 }, { 0x67D, 0, 0x08015B58 }, { 0x67E, 0, 0x08015C04 }, { 0x67F, 0, 0x08015C50 }, + { 0x680, 0, 0x08015D64 }, { 0x681, 0, 0x08015E40 }, { 0x682, 0, 0x08015ED0 }, { 0x683, 0, 0x08015F00 }, + { 0x684, 0, 0x08015F90 }, { 0x685, 0, 0x08015FCC }, { 0x686, 0, 0x08016020 }, { 0x687, 0, 0x08016078 }, + { 0x688, 0, 0x080160AC }, { 0x689, 0, 0x08016104 }, { 0x68A, 0, 0x08016130 }, { 0x6A4, 0, 0x08016184 }, + { 0x6A5, 0, 0x080161B8 }, { 0x6A6, 0, 0x0801620C }, { 0x6A7, 0, 0x08016248 }, { 0x6A8, 0, 0x080162A0 }, + { 0x6A9, 0, 0x080162C8 }, { 0x6AA, 0, 0x0801634C }, { 0x6AB, 0, 0x08016398 }, { 0x6AC, 0, 0x080163FC }, + { 0x6AD, 0, 0x08016478 }, { 0x6AE, 0, 0x080164B4 }, { 0x6AF, 0, 0x08016508 }, { 0x6B0, 0, 0x08016548 }, + { 0x6B1, 0, 0x080165C0 }, { 0x6B2, 0, 0x08016600 }, { 0x6B3, 0, 0x08016674 }, { 0x6B4, 0, 0x080166B4 }, + { 0x6B5, 0, 0x0801671C }, { 0x6B6, 0, 0x08016758 }, { 0x6B7, 0, 0x080167C0 }, { 0x6B8, 0, 0x080167F8 }, + { 0x6B9, 0, 0x08016858 }, { 0x6BA, 0, 0x08016894 }, { 0x6BB, 0, 0x08016900 }, { 0x6BC, 0, 0x0801693C }, + { 0x6BD, 0, 0x0801698C }, { 0x6BE, 0, 0x080169CC }, { 0x6BF, 0, 0x08016A04 }, { 0x6C0, 0, 0x08016A28 }, + { 0x6C1, 0, 0x08016A7C }, { 0x6C2, 0, 0x08016A98 }, { 0x6C3, 0, 0x08016AC8 }, { 0x6C4, 0, 0x08016AE4 }, + { 0x6C5, 0, 0x08016B2C }, { 0x6C6, 0, 0x08016B84 }, { 0x6C7, 0, 0x08016BC8 }, { 0x6C8, 0, 0x08016BE0 }, + { 0x6C9, 0, 0x08016C34 }, { 0x6CA, 0, 0x08016C94 }, { 0x6CB, 0, 0x08016CD0 }, { 0x6CC, 0, 0x08016D24 }, + { 0x6CD, 0, 0x08016D64 }, { 0x6CE, 0, 0x08016DC8 }, { 0x6CF, 0, 0x08016E08 }, { 0x6D0, 0, 0x08016E6C }, + { 0x6D1, 0, 0x08016EAC }, { 0x6D2, 0, 0x08016F14 }, { 0x6D3, 0, 0x08016F50 }, { 0x6D4, 0, 0x08016FD0 }, + { 0x6D5, 0, 0x08017008 }, { 0x6D6, 0, 0x08017084 }, { 0x6D7, 0, 0x080170C0 }, { 0x6D8, 0, 0x08017110 }, + { 0x6D9, 0, 0x0801714C }, { 0x6DA, 0, 0x080171A4 }, { 0x6DB, 0, 0x080171E0 }, { 0x6DC, 0, 0x08017218 }, + { 0x6DD, 0, 0x08017264 }, { 0x6DE, 0, 0x080172E0 }, { 0x708, 0, 0x08017330 }, { 0x709, 0, 0x080173C4 }, + { 0x70A, 0, 0x0801741C }, { 0x70B, 0, 0x080174B4 }, { 0x70C, 0, 0x0801753C }, { 0x70D, 0, 0x08017564 }, + { 0x70E, 0, 0x0801758C }, { 0x70F, 0, 0x080175FC }, { 0x710, 0, 0x08017650 }, { 0x711, 0, 0x08017748 }, + { 0x712, 0, 0x0801775C }, { 0x713, 0, 0x080177B0 }, { 0x714, 0, 0x080177D8 }, { 0x715, 0, 0x0801781C }, + { 0x716, 0, 0x0801787C }, { 0x717, 0, 0x08017A6C }, { 0x718, 0, 0x08017AB8 }, { 0x719, 0, 0x08017AE8 }, + { 0x71A, 0, 0x08017B48 }, { 0x71B, 0, 0x08017BA0 }, { 0x721, 0, 0x08017C00 }, { 0x722, 0, 0x08017C44 }, + { 0x723, 0, 0x08017C84 }, { 0x724, 0, 0x08017CC4 }, { 0x725, 0, 0x08017D04 }, { 0x726, 0, 0x08017D90 }, + { 0x727, 0, 0x08017DE4 }, { 0x728, 0, 0x08017DF0 }, { 0x729, 0, 0x08017E50 }, { 0x72A, 0, 0x08017E9C }, + { 0x72B, 0, 0x08017F08 }, { 0x72C, 0, 0x08017F5C }, { 0x72D, 0, 0x08017F8C }, { 0x72E, 0, 0x08017FC8 }, + { 0x72F, 0, 0x0801800C }, { 0x730, 0, 0x08018064 }, { 0x731, 0, 0x080180A0 }, { 0x732, 0, 0x080180E8 }, + { 0x733, 0, 0x08018104 }, { 0x734, 0, 0x08018188 }, { 0x735, 0, 0x08018240 }, { 0x736, 0, 0x080182A8 }, + { 0x737, 0, 0x080182E4 }, { 0x738, 0, 0x080184D0 }, { 0x73A, 0, 0x08018510 }, { 0x73B, 0, 0x08018594 }, + { 0x73C, 0, 0x08018618 }, { 0x73D, 0, 0x080186B0 }, { 0x73E, 0, 0x0801876C }, { 0x73F, 0, 0x08018818 }, + { 0x740, 0, 0x080188CC }, { 0x741, 0, 0x08018908 }, { 0x742, 0, 0x08018938 }, { 0x743, 0, 0x080189A0 }, + { 0x744, 0, 0x08018A00 }, { 0x745, 0, 0x08018A90 }, { 0x746, 0, 0x08018B4C }, { 0x747, 0, 0x08018C18 }, + { 0x748, 0, 0x08018C8C }, { 0x749, 0, 0x08018CE0 }, { 0x74A, 0, 0x08018D78 }, { 0x74B, 0, 0x08018DD0 }, + { 0x74C, 0, 0x08018E38 }, { 0x74D, 0, 0x08018E78 }, { 0x74E, 0, 0x08018EC0 }, { 0x74F, 0, 0x08018F38 }, + { 0x750, 0, 0x08018FF4 }, { 0x751, 0, 0x08019014 }, { 0x752, 0, 0x0801910C }, { 0x753, 0, 0x08019160 }, + { 0x754, 0, 0x080191A4 }, { 0x755, 0, 0x080191FC }, { 0x756, 0, 0x08019254 }, { 0x757, 0, 0x0801927C }, + { 0x758, 0, 0x080192E8 }, { 0x759, 0, 0x08019354 }, { 0x75A, 0, 0x0801939C }, { 0x76C, 0, 0x0801941C }, + { 0x76D, 0, 0x08019468 }, { 0x76E, 0, 0x080194BC }, { 0x76F, 0, 0x080194F8 }, { 0x770, 0, 0x08019530 }, + { 0x771, 0, 0x0801956C }, { 0x772, 0, 0x080195A4 }, { 0x773, 0, 0x080195DC }, { 0x774, 0, 0x08019620 }, + { 0x775, 0, 0x08019654 }, { 0x776, 0, 0x08019688 }, { 0x777, 0, 0x080196A4 }, { 0x778, 0, 0x080196F0 }, + { 0x779, 0, 0x080197A4 }, { 0x77A, 0, 0x080197C0 }, { 0x77B, 0, 0x080197E4 }, { 0x77C, 0, 0x0801982C }, + { 0x77D, 0, 0x08019854 }, { 0x7D0, 0, 0x08019878 }, { 0x7D1, 0, 0x080198BC }, { 0x7D2, 0, 0x080199A8 }, + { 0x7D3, 0, 0x080199BC }, { 0x7D4, 0, 0x080199E4 }, { 0x7D5, 0, 0x08019AD8 }, { 0x7D6, 0, 0x08019B10 }, + { 0x7D7, 0, 0x08019B28 }, { 0x7D8, 0, 0x08019BA4 }, { 0x7D9, 0, 0x08019BC8 }, { 0x7DC, 0, 0x08019C20 }, + { 0x7DD, 0, 0x08019C40 }, { 0x7DE, 0, 0x08019C60 }, { 0x800, 0, 0x08019C80 }, { 0x801, 0, 0x08019D44 }, + { 0x802, 0, 0x08019DD0 }, { 0x803, 0, 0x08019E24 }, { 0x804, 0, 0x08019E44 }, { 0x806, 0, 0x08019F84 }, + { 0x807, 0, 0x0801A0F0 }, { 0x80B, 0, 0x0801A0FC }, { 0x80C, 0, 0x0801A144 }, { 0x80D, 0, 0x0801A1AC }, + { 0x80E, 0, 0x0801A218 }, { 0x80F, 0, 0x0801A288 }, { 0x810, 0, 0x0801A320 }, { 0x811, 0, 0x0801A348 }, + { 0x820, 0, 0x0801A378 }, { 0x821, 0, 0x0801A3B4 }, { 0x822, 0, 0x0801A408 }, { 0x823, 0, 0x0801A484 }, + { 0x824, 0, 0x0801A4D4 }, { 0x825, 0, 0x0801A538 }, { 0x826, 0, 0x0801A5A8 }, { 0x827, 0, 0x0801A614 }, + { 0x828, 0, 0x0801A654 }, { 0x829, 0, 0x0801A680 }, { 0x82A, 0, 0x0801A6EC }, { 0x82B, 0, 0x0801A740 }, + { 0x82C, 0, 0x0801A79C }, { 0x82D, 0, 0x0801A808 }, { 0x82E, 0, 0x0801A868 }, { 0x82F, 0, 0x0801A894 }, + { 0x830, 0, 0x0801A918 }, { 0x831, 0, 0x0801A968 }, { 0x832, 0, 0x0801A9DC }, { 0x833, 0, 0x0801AA5C }, + { 0x834, 0, 0x0801AA80 }, { 0x835, 0, 0x0801AAD0 }, { 0x836, 0, 0x0801AB60 }, { 0x838, 0, 0x0801AC28 }, + { 0x839, 0, 0x0801AC7C }, { 0x83A, 0, 0x0801AD18 }, { 0x83B, 0, 0x0801AD48 }, { 0x83C, 0, 0x0801ADC4 }, + { 0x83D, 0, 0x0801AE2C }, { 0x83E, 0, 0x0801AE84 }, { 0x83F, 0, 0x0801AEC4 }, { 0x840, 0, 0x0801AF0C }, + { 0x841, 0, 0x0801AF48 }, { 0x842, 0, 0x0801AFA4 }, { 0x843, 0, 0x0801AFE4 }, { 0x844, 0, 0x0801B054 }, + { 0x845, 0, 0x0801B090 }, { 0x846, 0, 0x0801B0CC }, { 0x847, 0, 0x0801B114 }, { 0x848, 0, 0x0801B168 }, + { 0x849, 0, 0x0801B190 }, { 0x84A, 0, 0x0801B210 }, { 0x84B, 0, 0x0801B278 }, { 0x84C, 0, 0x0801B2BC }, + { 0x84D, 0, 0x0801B310 }, { 0x84E, 0, 0x0801B380 }, { 0x84F, 0, 0x0801B3A4 }, { 0x850, 0, 0x0801B3CC }, + { 0x851, 0, 0x0801B47C }, { 0x852, 0, 0x0801B488 }, { 0x853, 0, 0x0801B4B4 }, { 0x854, 0, 0x0801B5C4 }, + { 0x855, 0, 0x0801B608 }, { 0x856, 0, 0x0801B678 }, { 0x857, 0, 0x0801B6D8 }, { 0x858, 0, 0x0801B718 }, + { 0x859, 0, 0x0801B78C }, { 0x85A, 0, 0x0801B810 }, { 0x85B, 0, 0x0801B85C }, { 0x85C, 0, 0x0801B8C4 }, + { 0x85D, 0, 0x0801B8F4 }, { 0x85E, 0, 0x0801B900 }, { 0x85F, 0, 0x0801B92C }, { 0x860, 0, 0x0801B968 }, + { 0x861, 0, 0x0801B994 }, { 0x862, 0, 0x0801B9E0 }, { 0x863, 0, 0x0801BA6C }, { 0x864, 0, 0x0801BACC }, + { 0x865, 0, 0x0801BB18 }, { 0x866, 0, 0x0801BB8C }, { 0x867, 0, 0x0801BBA4 }, { 0x868, 0, 0x0801BC0C }, + { 0x869, 0, 0x0801BC88 }, { 0x86A, 0, 0x0801BCC0 }, { 0x86B, 0, 0x0801BD30 }, { 0x86C, 0, 0x0801BD90 }, + { 0x86D, 0, 0x0801BDD4 }, { 0x86E, 0, 0x0801BE60 }, { 0x86F, 0, 0x0801BF1C }, { 0x870, 0, 0x0801BF40 }, + { 0x871, 0, 0x0801BF90 }, { 0x872, 0, 0x0801BFB0 }, { 0x873, 0, 0x0801C004 }, { 0x874, 0, 0x0801C038 }, + { 0x875, 0, 0x0801C0A0 }, { 0x876, 0, 0x0801C0F8 }, { 0x877, 0, 0x0801C170 }, { 0x878, 0, 0x0801C1E0 }, + { 0x879, 0, 0x0801C23C }, { 0x87A, 0, 0x0801C2A0 }, { 0x87B, 0, 0x0801C2D4 }, { 0x87C, 0, 0x0801C314 }, + { 0x87D, 0, 0x0801C384 }, { 0x87E, 0, 0x0801C3DC }, { 0x87F, 0, 0x0801C43C }, { 0x880, 0, 0x0801C494 }, + { 0x881, 0, 0x0801C504 }, { 0x882, 0, 0x0801C580 }, { 0x883, 0, 0x0801C5E8 }, { 0x884, 0, 0x0801C694 }, + { 0x885, 0, 0x0801C6DC }, { 0x886, 0, 0x0801C73C }, { 0x887, 0, 0x0801C798 }, { 0x888, 0, 0x0801C7EC }, + { 0x889, 0, 0x0801C824 }, { 0x88A, 0, 0x0801C86C }, { 0x88B, 0, 0x0801C890 }, { 0x88C, 0, 0x0801C8C4 }, + { 0x88D, 0, 0x0801C914 }, { 0x88E, 0, 0x0801C98C }, { 0x88F, 0, 0x0801CA00 }, { 0x890, 0, 0x0801CA40 }, + { 0x898, 0, 0x0801CADC }, { 0x899, 0, 0x0801CB1C }, { 0x89A, 0, 0x0801CB60 }, { 0x89B, 0, 0x0801CC18 }, + { 0x89C, 0, 0x0801CC74 }, { 0x89D, 0, 0x0801CCCC }, { 0x89E, 0, 0x0801CD40 }, { 0x89F, 0, 0x0801CDA0 }, + { 0x8A0, 0, 0x0801CDE8 }, { 0x8A1, 0, 0x0801CE44 }, { 0x8A2, 0, 0x0801CEB0 }, { 0x8A3, 0, 0x0801CF0C }, + { 0x8A4, 0, 0x0801CF38 }, { 0x8A5, 0, 0x0801CFD0 }, { 0x8CA, 0, 0x0801D010 }, { 0x8CB, 0, 0x0801D0E0 }, + { 0x8CC, 0, 0x0801D108 }, { 0x8CD, 0, 0x0801D138 }, { 0x8CE, 0, 0x0801D170 }, { 0x8CF, 0, 0x0801D1C0 }, + { 0x8D0, 0, 0x0801D200 }, { 0x8D1, 0, 0x0801D238 }, { 0x8D2, 0, 0x0801D268 }, { 0x8D3, 0, 0x0801D340 }, + { 0x8D4, 0, 0x0801D3D4 }, { 0x8D5, 0, 0x0801D444 }, { 0x8D6, 0, 0x0801D488 }, { 0x8D7, 0, 0x0801D4D8 }, + { 0x8D8, 0, 0x0801D508 }, { 0x8D9, 0, 0x0801D574 }, { 0x8DA, 0, 0x0801D5A0 }, { 0x8DB, 0, 0x0801D5D0 }, + { 0x8DC, 0, 0x0801D600 }, { 0x8DD, 0, 0x0801D644 }, { 0x8DE, 0, 0x0801D7C8 }, { 0x8DF, 0, 0x0801D7FC }, + { 0x8E0, 0, 0x0801D844 }, { 0x8E1, 0, 0x0801D898 }, { 0x8E2, 0, 0x0801D938 }, { 0x8E3, 0, 0x0801D9E0 }, + { 0x8E4, 0, 0x0801DA40 }, { 0x8E5, 0, 0x0801DA9C }, { 0x8E6, 0, 0x0801DB20 }, { 0x8E7, 0, 0x0801DB88 }, + { 0x8E8, 0, 0x0801DBB0 }, { 0x8E9, 0, 0x0801DBE4 }, { 0x8EA, 0, 0x0801DC6C }, { 0x8EB, 0, 0x0801DC84 }, + { 0x8EC, 0, 0x0801DD18 }, { 0x910, 0, 0x0801DD64 }, { 0x911, 0, 0x0801DDC0 }, { 0x912, 0, 0x0801DE3C }, + { 0x913, 0, 0x0801DEAC }, { 0x914, 0, 0x0801DF18 }, { 0x915, 0, 0x0801DF88 }, { 0x916, 0, 0x0801DFF0 }, + { 0x917, 0, 0x0801E038 }, { 0x918, 0, 0x0801E164 }, { 0x919, 0, 0x0801E1BC }, { 0x91A, 0, 0x0801E204 }, + { 0x91B, 0, 0x0801E330 }, { 0x91C, 0, 0x0801E370 }, { 0x91E, 0, 0x0801E3CC }, { 0x92E, 0, 0x0801E464 }, + { 0x92F, 0, 0x0801E4C0 }, { 0x930, 0, 0x0801E534 }, { 0x931, 0, 0x0801E5AC }, { 0x932, 0, 0x0801E5B8 }, + { 0x933, 0, 0x0801E608 }, { 0x934, 0, 0x0801E650 }, { 0x935, 0, 0x0801E698 }, { 0x936, 0, 0x0801E6D0 }, + { 0x937, 0, 0x0801E738 }, { 0x938, 0, 0x0801E768 }, { 0x960, 0, 0x0801E774 }, { 0x961, 0, 0x0801E798 }, + { 0x962, 0, 0x0801E810 }, { 0x963, 0, 0x0801E8AC }, { 0x964, 0, 0x0801E97C }, { 0x965, 0, 0x0801E9C8 }, + { 0x966, 0, 0x0801EA1C }, { 0x967, 0, 0x0801EABC }, { 0x968, 0, 0x0801EB08 }, { 0x969, 0, 0x0801EBC8 }, + { 0x96A, 0, 0x0801EC58 }, { 0x96B, 0, 0x0801EC8C }, { 0x96C, 0, 0x0801ECD4 }, { 0x96D, 0, 0x0801ED40 }, + { 0x96E, 0, 0x0801ED88 }, { 0x96F, 0, 0x0801EE4C }, { 0x970, 0, 0x0801EF08 }, { 0x971, 0, 0x0801EF98 }, + { 0x972, 0, 0x0801EFF4 }, { 0x9C4, 0, 0x0801F000 }, { 0x9C5, 0, 0x0801F08C }, { 0x9C6, 0, 0x0801F0B0 }, + { 0x9C7, 0, 0x0801F104 }, { 0x9C8, 0, 0x0801F110 }, { 0x9C9, 0, 0x0801F160 }, { 0x9CA, 0, 0x0801F1D4 }, + { 0x9CB, 0, 0x0801F25C }, { 0x9CC, 0, 0x0801F2A0 }, { 0x9CD, 0, 0x0801F2E8 }, { 0x9CE, 0, 0x0801F338 }, + { 0x9CF, 0, 0x0801F37C }, { 0x9D0, 0, 0x0801F3CC }, { 0x9D1, 0, 0x0801F424 }, { 0x9D2, 0, 0x0801F450 }, + { 0x9D3, 0, 0x0801F510 }, { 0x9D4, 0, 0x0801F558 }, { 0x9D5, 0, 0x0801F580 }, { 0x9D6, 0, 0x0801F5D0 }, + { 0x9D7, 0, 0x0801F61C }, { 0x9D8, 0, 0x0801F65C }, { 0x9D9, 0, 0x0801F69C }, { 0x9DA, 0, 0x0801F6EC }, + { 0x9DB, 0, 0x0801F764 }, { 0x9DC, 0, 0x0801F7B0 }, { 0x9DD, 0, 0x0801F808 }, { 0x9DE, 0, 0x0801F8AC }, + { 0x9DF, 0, 0x0801F91C }, { 0x9E0, 0, 0x0801F990 }, { 0x9E1, 0, 0x0801F9CC }, { 0x9E2, 0, 0x0801FA2C }, + { 0x9E3, 0, 0x0801FA74 }, { 0x9E4, 0, 0x0801FB24 }, { 0x9E5, 0, 0x0801FB90 }, { 0x9E6, 0, 0x0801FBBC }, + { 0x9E7, 0, 0x0801FBE4 }, { 0x9E8, 0, 0x0801FC4C }, { 0x9E9, 0, 0x0801FCA0 }, { 0x9EA, 0, 0x0801FD80 }, + { 0x9EB, 0, 0x0801FDE8 }, { 0x9EC, 0, 0x0801FE70 }, { 0x9ED, 0, 0x0801FEAC }, { 0x9EE, 0, 0x0801FF40 }, + { 0x9EF, 0, 0x0801FF8C }, { 0xA28, 0, 0x0801FFC4 }, { 0xA29, 0, 0x0801FFF4 }, { 0xA2A, 0, 0x08020014 }, + { 0xA2B, 0, 0x08020048 }, { 0xA2C, 0, 0x0802012C }, { 0xA2D, 0, 0x08020190 }, { 0xA2E, 0, 0x080201EC }, + { 0xA2F, 0, 0x08020278 }, { 0xA30, 0, 0x080202E4 }, { 0xA31, 0, 0x0802031C }, { 0xA32, 0, 0x08020360 }, + { 0xA33, 0, 0x080203A4 }, { 0xA34, 0, 0x080203C8 }, { 0xA35, 0, 0x08020424 }, { 0xA36, 0, 0x0802047C }, + { 0xA37, 0, 0x080204F0 }, { 0xA38, 0, 0x08020534 }, { 0xA39, 0, 0x08020570 }, { 0xA3A, 0, 0x080205E4 }, + { 0xBB8, 0, 0x08020668 }, { 0xBB9, 0, 0x080206A4 }, { 0xBBA, 0, 0x080206EC }, { 0xBBB, 0, 0x08020710 }, + { 0xBBC, 0, 0x08020764 }, { 0xBBD, 0, 0x080207A4 }, { 0xBBE, 0, 0x080207E8 }, { 0xBBF, 0, 0x08020814 }, + { 0xBC0, 0, 0x08020858 }, { 0xBC1, 0, 0x080208B0 }, { 0xBC2, 0, 0x08020910 }, { 0xBC3, 0, 0x08020960 }, + { 0xBC4, 0, 0x080209C4 }, { 0xBC5, 0, 0x080209F0 }, { 0xBC6, 0, 0x08020A50 }, { 0xBC7, 0, 0x08020A8C }, + { 0xBC8, 0, 0x08020B00 }, { 0xBC9, 0, 0x08020B3C }, { 0xBCA, 0, 0x08020BB8 }, { 0xBCB, 0, 0x08020BF4 }, + { 0xBCC, 0, 0x08020C4C }, { 0xBCD, 0, 0x08020C88 }, { 0xBCE, 0, 0x08020CF0 }, { 0xBCF, 0, 0x08020D2C }, + { 0xBD0, 0, 0x08020D80 }, { 0xBD1, 0, 0x08020DC0 }, { 0xBD2, 0, 0x08020DFC }, { 0xBD3, 0, 0x08020E58 }, + { 0xBD4, 0, 0x08020E88 }, { 0xBD5, 0, 0x08020EE0 }, { 0xBD6, 0, 0x08020F18 }, { 0xBD7, 0, 0x08020F44 }, + { 0xBEA, 0, 0x08020F60 }, { 0xBEB, 0, 0x08021158 }, { 0xBEC, 0, 0x080211C0 }, { 0xBED, 0, 0x080211EC }, + { 0xBEE, 0, 0x08021350 }, { 0xBEF, 0, 0x08021380 }, { 0xBF0, 0, 0x080213F8 }, { 0xBF1, 0, 0x08021480 }, + { 0xBF2, 0, 0x08021558 }, { 0xBF3, 0, 0x08021588 }, { 0xBF4, 0, 0x080215E0 }, { 0xBF5, 0, 0x080216A0 }, + { 0xBF6, 0, 0x080217CC }, { 0xBF7, 0, 0x08021858 }, { 0xBF8, 0, 0x080218CC }, { 0xBF9, 0, 0x08021974 }, + { 0xBFA, 0, 0x080219F8 }, { 0xBFB, 0, 0x08021A68 }, { 0xBFC, 0, 0x08021AF8 }, { 0xBFD, 0, 0x08021B9C }, + { 0xBFE, 0, 0x08021BE0 }, { 0xBFF, 0, 0x08021C54 }, { 0xC00, 0, 0x08021C80 }, { 0xC01, 0, 0x08021CC8 }, + { 0xC02, 0, 0x08021F20 }, { 0xC03, 0, 0x08021F50 }, { 0xC04, 0, 0x08022024 }, { 0xC1D, 0, 0x08022090 }, + { 0xC1E, 0, 0x080220B8 }, { 0xC1F, 0, 0x080220D0 }, { 0xC20, 0, 0x08022104 }, { 0xC21, 0, 0x08022198 }, + { 0xC22, 0, 0x080221B8 }, { 0xC23, 0, 0x080221DC }, { 0xC24, 0, 0x08022248 }, { 0xC25, 0, 0x08022288 }, + { 0xC26, 0, 0x08022308 }, { 0xC27, 0, 0x0802233C }, { 0xC28, 0, 0x0802239C }, { 0xC29, 0, 0x080223E4 }, + { 0xC2A, 0, 0x08022408 }, { 0xC2B, 0, 0x08022470 }, { 0xC2C, 0, 0x080224C4 }, { 0xC2D, 0, 0x0802255C }, + { 0xC2E, 0, 0x08022584 }, { 0xC2F, 0, 0x080225AC }, { 0xC30, 0, 0x08022640 }, { 0xC31, 0, 0x08022670 }, + { 0xC32, 0, 0x0802268C }, { 0xC33, 0, 0x080226A0 }, { 0xC34, 0, 0x080226E0 }, { 0xC35, 0, 0x08022738 }, + { 0xC36, 0, 0x08022760 }, { 0xC37, 0, 0x08022780 }, { 0xC38, 0, 0x080227B8 }, { 0xC39, 0, 0x080227F0 }, + { 0xC3A, 0, 0x080228DC }, { 0xC3B, 0, 0x08022954 }, { 0xC3C, 0, 0x08022AD4 }, { 0xC3D, 0, 0x08022B48 }, + { 0xC3E, 0, 0x08022C14 }, { 0xC3F, 0, 0x08022C48 }, { 0xC40, 0, 0x08022C78 }, { 0xC41, 0, 0x08022CB0 }, + { 0xC42, 0, 0x08022CFC }, { 0xC43, 0, 0x08022D64 }, { 0xC44, 0, 0x08022D84 }, { 0xC45, 0, 0x08022DEC }, + { 0xC46, 0, 0x08022EBC }, { 0xC47, 0, 0x08022F9C }, { 0xC48, 0, 0x08023004 }, { 0xC49, 0, 0x08023024 }, + { 0xC4A, 0, 0x080230B0 }, { 0xC4B, 0, 0x080230E0 }, { 0xC4C, 0, 0x080231E4 }, { 0xC4D, 0, 0x0802329C }, + { 0xC4E, 0, 0x080232FC }, { 0xC4F, 0, 0x08023360 }, { 0xC50, 0, 0x080233BC }, { 0xC51, 0, 0x080233F4 }, + { 0xC52, 0, 0x0802352C }, { 0xC53, 0, 0x08023550 }, { 0xC54, 0, 0x08023640 }, { 0xC55, 0, 0x08023668 }, + { 0xC56, 0, 0x080236A4 }, { 0xC57, 0, 0x080236F4 }, { 0xC58, 0, 0x08023788 }, { 0xC80, 0, 0x080237C4 }, + { 0xC81, 0, 0x08023824 }, { 0xC82, 0, 0x080238F0 }, { 0xC83, 0, 0x08023920 }, { 0xC84, 0, 0x080239E4 }, + { 0xC85, 0, 0x08023B24 }, { 0xC86, 0, 0x08023B58 }, { 0xC87, 0, 0x08023C3C }, { 0xC88, 0, 0x08023CF0 }, + { 0xC89, 0, 0x08023D44 }, { 0xC8A, 0, 0x08023D80 }, { 0xC8B, 0, 0x08023DB0 }, { 0xC8C, 0, 0x08023E0C }, + { 0xC8D, 0, 0x08023E60 }, { 0xC8E, 0, 0x08023E90 }, { 0xC8F, 0, 0x08023F40 }, { 0xC90, 0, 0x08023FA0 }, + { 0xC91, 0, 0x0802400C }, { 0xC92, 0, 0x08024058 }, { 0xC93, 0, 0x080240D0 }, { 0xC94, 0, 0x0802410C }, + { 0xCE4, 0, 0x08024164 }, { 0xCE5, 0, 0x080241D4 }, { 0xCE6, 0, 0x08024254 }, { 0xCE7, 0, 0x08024304 }, + { 0xCE8, 0, 0x08024330 }, { 0xCE9, 0, 0x08024360 }, { 0xCEA, 0, 0x0802444C }, { 0xCEB, 0, 0x08024470 }, + { 0xCEC, 0, 0x080244E8 }, { 0xCED, 0, 0x08024548 }, { 0xCEE, 0, 0x08024634 }, { 0xCEF, 0, 0x08024718 }, + { 0xCF0, 0, 0x0802476C }, { 0xCF1, 0, 0x080247F8 }, { 0xCF2, 0, 0x0802483C }, { 0xCF3, 0, 0x08024880 }, + { 0xCF4, 0, 0x08024918 }, { 0xCF5, 0, 0x08024994 }, { 0xCF6, 0, 0x08024B58 }, { 0xCF7, 0, 0x08024BD8 }, + { 0xCF8, 0, 0x08024C84 }, { 0xCF9, 0, 0x08024D10 }, { 0xCFA, 0, 0x08024D44 }, { 0xCFB, 0, 0x08024D8C }, + { 0xCFC, 0, 0x08024DB8 }, { 0xCFD, 0, 0x08024DFC }, { 0xCFE, 0, 0x08024E6C }, { 0xCFF, 0, 0x08024EA4 }, + { 0xD00, 0, 0x08024ED4 }, { 0xD01, 0, 0x08024F4C }, { 0xD02, 0, 0x08024F8C }, { 0xD03, 0, 0x08024FDC }, + { 0xD04, 0, 0x08025040 }, { 0xD05, 0, 0x080250D8 }, { 0xD06, 0, 0x08025100 }, { 0xD07, 0, 0x08025134 }, + { 0xD08, 0, 0x0802516C }, { 0xD09, 0, 0x080251B4 }, { 0xD0A, 0, 0x080251E0 }, { 0xD0B, 0, 0x08025260 }, + { 0xD0C, 0, 0x080252AC }, { 0xD0D, 0, 0x080252E4 }, { 0xD0E, 0, 0x08025330 }, { 0xD0F, 0, 0x08025358 }, + { 0xD10, 0, 0x08025394 }, { 0xD11, 0, 0x080253C8 }, { 0xD12, 0, 0x08025434 }, { 0xD13, 0, 0x0802547C }, + { 0xD14, 0, 0x080254C0 }, { 0xD15, 0, 0x0802550C }, { 0xD16, 0, 0x08025550 }, { 0xD17, 0, 0x080255A4 }, + { 0xD18, 0, 0x080255DC }, { 0xD19, 0, 0x080255FC }, { 0xD1A, 0, 0x0802563C }, { 0xD1B, 0, 0x080256C8 }, + { 0xD1C, 0, 0x08025708 }, { 0xD1D, 0, 0x0802575C }, { 0xD1E, 0, 0x080257B8 }, { 0xD1F, 0, 0x08025814 }, + { 0xD20, 0, 0x08025874 }, { 0xD21, 0, 0x080258EC }, { 0xD48, 0, 0x08025960 }, { 0xD49, 0, 0x0802597C }, + { 0xD4A, 0, 0x080259B8 }, { 0xD4B, 0, 0x080259F8 }, { 0xD4C, 0, 0x08025A9C }, { 0xD4D, 0, 0x08025AF4 }, + { 0xD4E, 0, 0x08025B4C }, { 0xD4F, 0, 0x08025B80 }, { 0xD5E, 0, 0x08025BBC }, { 0xD5F, 0, 0x08025BD8 }, + { 0xD60, 0, 0x08025BFC }, { 0xD61, 0, 0x08025C3C }, { 0xD62, 0, 0x08025C7C }, { 0xD63, 0, 0x08025CE0 }, + { 0xD64, 0, 0x08025D64 }, { 0xD65, 0, 0x08025D90 }, { 0xD66, 0, 0x08025DC0 }, { 0xD67, 0, 0x08025E34 }, + { 0xD68, 0, 0x08025E74 }, { 0xD69, 0, 0x08025EB0 }, { 0xD6A, 0, 0x08025EE4 }, { 0xD6B, 0, 0x08025F14 }, + { 0xD6C, 0, 0x08025F4C }, { 0xD6D, 0, 0x08025F9C }, { 0xD6E, 0, 0x08025FEC }, { 0xD6F, 0, 0x08026024 }, + { 0xD70, 0, 0x08026064 }, { 0xD71, 0, 0x080260D4 }, { 0xD72, 0, 0x0802613C }, { 0xD73, 0, 0x08026190 }, + { 0xD74, 0, 0x080261E4 }, { 0xD75, 0, 0x0802621C }, { 0xD76, 0, 0x0802626C }, { 0xD77, 0, 0x08026354 }, + { 0xD78, 0, 0x0802637C }, { 0xD79, 0, 0x080263C8 }, { 0xD7A, 0, 0x08026444 }, { 0xD7B, 0, 0x08026490 }, + { 0xD7C, 0, 0x080264EC }, { 0xD7D, 0, 0x08026548 }, { 0xD7E, 0, 0x08026598 }, { 0xD7F, 0, 0x080265C4 }, + { 0xD80, 0, 0x080265F8 }, { 0xD81, 0, 0x08026628 }, { 0xD82, 0, 0x08026658 }, { 0xD83, 0, 0x08026688 }, + { 0xD84, 0, 0x080266D0 }, { 0xD85, 0, 0x08026728 }, { 0xD86, 0, 0x08026770 }, { 0xD87, 0, 0x080267B4 }, + { 0xD88, 0, 0x08026850 }, { 0xD89, 0, 0x080268B0 }, { 0xD8A, 0, 0x08026998 }, { 0xD8B, 0, 0x08026A5C }, + { 0xDAC, 0, 0x08026AA0 }, { 0xDAD, 0, 0x08026AC8 }, { 0xDAE, 0, 0x08026B04 }, { 0xDAF, 0, 0x08026B9C }, + { 0xDB0, 0, 0x08026BDC }, { 0xDB1, 0, 0x08026C6C }, { 0xDB2, 0, 0x08026CD8 }, { 0xDB3, 0, 0x08026D4C }, + { 0xDB4, 0, 0x08026DB4 }, { 0xDB5, 0, 0x08026E34 }, { 0xDB6, 0, 0x08026EA4 }, { 0xDB7, 0, 0x08026EBC }, + { 0xDB8, 0, 0x08026EE8 }, { 0xDB9, 0, 0x08026F28 }, { 0xDBA, 0, 0x08026F70 }, { 0xDBB, 0, 0x08026FA0 }, + { 0xDBC, 0, 0x0802701C }, { 0xDBD, 0, 0x08027070 }, { 0xDBE, 0, 0x08027088 }, { 0xDBF, 0, 0x080270BC }, + { 0xDC0, 0, 0x080270E0 }, { 0xDC1, 0, 0x0802713C }, { 0xDC2, 0, 0x08027194 }, { 0xDC3, 0, 0x08027220 }, + { 0xDC4, 0, 0x0802727C }, { 0xDC5, 0, 0x08027300 }, { 0xDC6, 0, 0x08027334 }, { 0xDC7, 0, 0x08027370 }, + { 0xDC8, 0, 0x08027394 }, { 0xDC9, 0, 0x080273A8 }, { 0xDCA, 0, 0x080273D0 }, { 0xDCB, 0, 0x08027414 }, + { 0xDCC, 0, 0x0802744C }, { 0xDCD, 0, 0x080274BC }, { 0xDCE, 0, 0x08027500 }, { 0xDCF, 0, 0x080275D4 }, + { 0xDD0, 0, 0x0802762C }, { 0xDD1, 0, 0x08027668 }, { 0xDD2, 0, 0x08027684 }, { 0xDD3, 0, 0x080276D8 }, + { 0xDD4, 0, 0x08027710 }, { 0xDD5, 0, 0x0802773C }, { 0xDD6, 0, 0x08027760 }, { 0xDD7, 0, 0x08027798 }, + { 0xDD8, 0, 0x080277C0 }, { 0xDD9, 0, 0x08027824 }, { 0xDDA, 0, 0x080278AC }, { 0xDDB, 0, 0x08027934 }, + { 0xDDC, 0, 0x08027984 }, { 0xDDD, 0, 0x080279E8 }, { 0xDDE, 0, 0x08027A70 }, { 0xDDF, 0, 0x08027AE8 }, + { 0xDE0, 0, 0x08027B28 }, { 0xDE1, 0, 0x08027B84 }, { 0xDE2, 0, 0x08027BF4 }, { 0xDE3, 0, 0x08027C40 }, + { 0xDE4, 0, 0x08027C84 }, { 0xDE5, 0, 0x08027CC8 }, { 0xDE6, 0, 0x08027D3C }, { 0xDE7, 0, 0x08027D8C }, + { 0xDE8, 0, 0x08027DBC }, { 0xDE9, 0, 0x08027DEC }, { 0xDEA, 0, 0x08027E78 }, { 0xDEB, 0, 0x08027EBC }, + { 0xDEC, 0, 0x08027EE4 }, { 0xDED, 0, 0x08027F4C }, { 0xDEE, 0, 0x08027F9C }, { 0xDEF, 0, 0x0802800C }, + { 0xDF0, 0, 0x08028058 }, { 0xDF1, 0, 0x080280A4 }, { 0xDF2, 0, 0x080280DC }, { 0xDF3, 0, 0x08028134 }, + { 0xDF4, 0, 0x080281B0 }, { 0xDF5, 0, 0x080281E8 }, { 0xDF6, 0, 0x08028234 }, { 0xDF7, 0, 0x08028264 }, + { 0xDF8, 0, 0x080282C0 }, { 0xDF9, 0, 0x080282F8 }, { 0xDFA, 0, 0x08028378 }, { 0xDFB, 0, 0x080283C4 }, + { 0xDFC, 0, 0x080283FC }, { 0xDFD, 0, 0x08028444 }, { 0xDFE, 0, 0x08028478 }, { 0xDFF, 0, 0x080284BC }, + { 0xE02, 0, 0x080284F4 }, { 0xE03, 0, 0x08028540 }, { 0xE04, 0, 0x08028588 }, { 0xE05, 0, 0x080285C8 }, + { 0xE06, 0, 0x08028604 }, { 0xE07, 0, 0x08028620 }, { 0xE10, 0, 0x08028670 }, { 0xE11, 0, 0x080286AC }, + { 0xE12, 0, 0x08028744 }, { 0xE13, 0, 0x080287C4 }, { 0xE14, 0, 0x0802885C }, { 0xE15, 0, 0x08028940 }, + { 0xE16, 0, 0x080289D4 }, { 0xE17, 0, 0x08028A20 }, { 0xE18, 0, 0x08028A58 }, { 0xE19, 0, 0x08028AA8 }, + { 0xE1A, 0, 0x08028B5C }, { 0xE1B, 0, 0x08028B8C }, { 0xE1C, 0, 0x08028BF0 }, { 0xE1D, 0, 0x08028C38 }, + { 0xE1E, 0, 0x08028C98 }, { 0xE1F, 0, 0x08028CBC }, { 0xE20, 0, 0x08028D10 }, { 0xE21, 0, 0x08028D28 }, + { 0xE22, 0, 0x08028D68 }, { 0xE23, 0, 0x08028DC8 }, { 0xE24, 0, 0x08028E24 }, { 0xE25, 0, 0x08028E44 }, + { 0xE26, 0, 0x08028E88 }, { 0xE27, 0, 0x08028ED0 }, { 0xE28, 0, 0x08028EEC }, { 0xE29, 0, 0x08028F40 }, + { 0xE2A, 0, 0x08028F9C }, { 0xE2B, 0, 0x08029010 }, { 0xE2C, 0, 0x08029078 }, { 0xE2D, 0, 0x08029104 }, + { 0xE2E, 0, 0x08029174 }, { 0xE2F, 0, 0x080291D4 }, { 0xE30, 0, 0x08029238 }, { 0xE31, 0, 0x080292B8 }, + { 0xE32, 0, 0x0802933C }, { 0xE42, 0, 0x0802939C }, { 0xE43, 0, 0x080293FC }, { 0xE44, 0, 0x08029428 }, + { 0xE45, 0, 0x080294A8 }, { 0xE46, 0, 0x08029500 }, { 0xE47, 0, 0x080295A0 }, { 0xE48, 0, 0x080295C4 }, + { 0xE49, 0, 0x08029634 }, { 0xE4A, 0, 0x0802969C }, { 0xE4B, 0, 0x08029704 }, { 0xE4C, 0, 0x08029774 }, + { 0xE4D, 0, 0x080297D4 }, { 0xE4E, 0, 0x08029860 }, { 0xE4F, 0, 0x080298C8 }, { 0xE50, 0, 0x08029948 }, + { 0xE51, 0, 0x080299D0 }, { 0xE52, 0, 0x08029A30 }, { 0xE74, 0, 0x08029AC0 }, { 0xE75, 0, 0x08029B20 }, + { 0xE76, 0, 0x08029B74 }, { 0xE77, 0, 0x08029BD4 }, { 0xE78, 0, 0x08029C48 }, { 0xE79, 0, 0x08029C9C }, + { 0xE7A, 0, 0x08029CB0 }, { 0xE7B, 0, 0x08029CCC }, { 0xE7C, 0, 0x08029D58 }, { 0xE7D, 0, 0x08029DAC }, + { 0xE7E, 0, 0x08029DC0 }, { 0xE7F, 0, 0x08029E10 }, { 0xE80, 0, 0x08029E74 }, { 0xE81, 0, 0x08029ED4 }, + { 0xE82, 0, 0x08029F2C }, { 0xE83, 0, 0x08029F54 }, { 0xE84, 0, 0x08029FCC }, { 0xE85, 0, 0x0802A03C }, + { 0xE86, 0, 0x0802A090 }, { 0xE87, 0, 0x0802A0D8 }, { 0xE88, 0, 0x0802A128 }, { 0xE89, 0, 0x0802A1BC }, + { 0xE8A, 0, 0x0802A1F4 }, { 0xE8B, 0, 0x0802A260 }, { 0xE8C, 0, 0x0802A2A4 }, { 0xE8D, 0, 0x0802A2F4 }, + { 0xE8E, 0, 0x0802A334 }, { 0xE8F, 0, 0x0802A37C }, { 0xE90, 0, 0x0802A3DC }, { 0xE91, 0, 0x0802A448 }, + { 0xE92, 0, 0x0802A47C }, { 0xE93, 0, 0x0802A4A8 }, { 0xE94, 0, 0x0802A550 }, { 0xE95, 0, 0x0802A5B0 }, + { 0xE97, 0, 0x0802A608 }, { 0xE98, 0, 0x0802A69C }, { 0xE99, 0, 0x0802A6F0 }, { 0xFA0, 0, 0x0802A760 }, + { 0xFA1, 0, 0x0802A79C }, { 0xFA2, 0, 0x0802A7F4 }, { 0xFA3, 0, 0x0802A84C }, { 0xFA4, 0, 0x0802A8F4 }, + { 0xFA5, 0, 0x0802AA24 }, { 0xFA6, 0, 0x0802AAA0 }, { 0xFA7, 0, 0x0802AB04 }, { 0xFA8, 0, 0x0802ABA0 }, + { 0xFA9, 0, 0x0802AC08 }, { 0xFAA, 0, 0x0802ACA4 }, { 0xFAB, 0, 0x0802AD1C }, { 0xFAC, 0, 0x0802AD8C }, + { 0xFAD, 0, 0x0802ADF4 }, { 0xFAE, 0, 0x0802AE90 }, { 0xFAF, 0, 0x0802AF00 }, { 0xFB0, 0, 0x0802AF70 }, + { 0xFB1, 0, 0x0802B018 }, { 0xFB2, 0, 0x0802B0B8 }, { 0xFB3, 0, 0x0802B110 }, { 0xFB4, 0, 0x0802B190 }, + { 0xFB5, 0, 0x0802B24C }, { 0xFB6, 0, 0x0802B288 }, { 0xFB7, 0, 0x0802B2E4 }, { 0xFB8, 0, 0x0802B314 }, + { 0xFB9, 0, 0x0802B39C }, { 0xFBA, 0, 0x0802B40C }, { 0xFBB, 0, 0x0802B488 }, { 0xFBC, 0, 0x0802B4EC }, + { 0xFBD, 0, 0x0802B598 }, { 0xFBE, 0, 0x0802B650 }, { 0xFBF, 0, 0x0802B6F8 }, { 0x1004, 0, 0x0802B750 }, + { 0x1005, 0, 0x0802B778 }, { 0x1006, 0, 0x0802B7A0 }, { 0x1007, 0, 0x0802B7C8 }, { 0x1008, 0, 0x0802B7EC }, + { 0x1009, 0, 0x0802B84C }, { 0x100A, 0, 0x0802B890 }, { 0x100B, 0, 0x0802B8D8 }, { 0x100C, 0, 0x0802B908 }, + { 0x100D, 0, 0x0802B97C }, { 0x100E, 0, 0x0802BA00 }, { 0x100F, 0, 0x0802BA54 }, { 0x1010, 0, 0x0802BAC0 }, + { 0x1011, 0, 0x0802BB28 }, { 0x1012, 0, 0x0802BB94 }, { 0x1013, 0, 0x0802BC18 }, { 0x1014, 0, 0x0802BC44 }, + { 0x1015, 0, 0x0802BC88 }, { 0x1016, 0, 0x0802BCE0 }, { 0x1017, 0, 0x0802BD24 }, { 0x1018, 0, 0x0802BD8C }, + { 0x1019, 0, 0x0802BE18 }, { 0x101A, 0, 0x0802BE80 }, { 0x101B, 0, 0x0802BF84 }, { 0x101C, 0, 0x0802C048 }, + { 0x101D, 0, 0x0802C064 }, { 0x101E, 0, 0x0802C15C }, { 0x101F, 0, 0x0802C284 }, { 0x1020, 0, 0x0802C3BC }, + { 0x1021, 0, 0x0802C3D4 }, { 0x1022, 0, 0x0802C438 }, { 0x1023, 0, 0x0802C470 }, { 0x1024, 0, 0x0802C494 }, + { 0x1025, 0, 0x0802C4C4 }, { 0x1026, 0, 0x0802C4F8 }, { 0x1027, 0, 0x0802C564 }, { 0x1028, 0, 0x0802C5F8 }, + { 0x1029, 0, 0x0802C67C }, { 0x102A, 0, 0x0802C6DC }, { 0x102B, 0, 0x0802C73C }, { 0x102C, 0, 0x0802C798 }, + { 0x102D, 0, 0x0802C824 }, { 0x102E, 0, 0x0802C87C }, { 0x102F, 0, 0x0802C8B8 }, { 0x1030, 0, 0x0802C928 }, + { 0x1031, 0, 0x0802CA60 }, { 0x1032, 0, 0x0802CAB4 }, { 0x1033, 0, 0x0802CB00 }, { 0x1034, 0, 0x0802CB3C }, + { 0x1035, 0, 0x0802CB94 }, { 0x1036, 0, 0x0802CBF0 }, { 0x1037, 0, 0x0802CC28 }, { 0x1038, 0, 0x0802CC80 }, + { 0x1039, 0, 0x0802CCE0 }, { 0x103A, 0, 0x0802CD30 }, { 0x103B, 0, 0x0802CD64 }, { 0x103C, 0, 0x0802CDDC }, + { 0x1068, 0, 0x0802CE10 }, { 0x1069, 0, 0x0802CE64 }, { 0x106A, 0, 0x0802CF30 }, { 0x106B, 0, 0x0802CF90 }, + { 0x106C, 0, 0x0802CFD4 }, { 0x106D, 0, 0x0802D07C }, { 0x106E, 0, 0x0802D0C0 }, { 0x106F, 0, 0x0802D110 }, + { 0x1070, 0, 0x0802D178 }, { 0x1071, 0, 0x0802D1C4 }, { 0x1072, 0, 0x0802D234 }, { 0x1073, 0, 0x0802D27C }, + { 0x1074, 0, 0x0802D2BC }, { 0x1075, 0, 0x0802D314 }, { 0x1076, 0, 0x0802D354 }, { 0x1077, 0, 0x0802D3AC }, + { 0x1078, 0, 0x0802D3F0 }, { 0x1079, 0, 0x0802D434 }, { 0x107A, 0, 0x0802D4AC }, { 0x107B, 0, 0x0802D4EC }, + { 0x107C, 0, 0x0802D554 }, { 0x107D, 0, 0x0802D5A8 }, { 0x107E, 0, 0x0802D5FC }, { 0x107F, 0, 0x0802D69C }, + { 0x1080, 0, 0x0802D6E8 }, { 0x1081, 0, 0x0802D744 }, { 0x1082, 0, 0x0802D7A4 }, { 0x1083, 0, 0x0802D7EC }, + { 0x1084, 0, 0x0802D82C }, { 0x1085, 0, 0x0802D8B0 }, { 0x1086, 0, 0x0802D8F0 }, { 0x1087, 0, 0x0802D954 }, + { 0x1088, 0, 0x0802D9DC }, { 0x1089, 0, 0x0802DA24 }, { 0x108A, 0, 0x0802DA8C }, { 0x108B, 0, 0x0802DACC }, + { 0x108C, 0, 0x0802DB30 }, { 0x108D, 0, 0x0802DBA0 }, { 0x108E, 0, 0x0802DBF4 }, { 0x108F, 0, 0x0802DC28 }, + { 0x1090, 0, 0x0802DC94 }, { 0x1091, 0, 0x0802DCFC }, { 0x1092, 0, 0x0802DDC0 }, { 0x1093, 0, 0x0802DE18 }, + { 0x1094, 0, 0x0802DEA0 }, { 0x1095, 0, 0x0802DF10 }, { 0x1096, 0, 0x0802DF78 }, { 0x1097, 0, 0x0802DFE0 }, + { 0x1098, 0, 0x0802E024 }, { 0x1099, 0, 0x0802E088 }, { 0x109A, 0, 0x0802E170 }, { 0x109B, 0, 0x0802E1F8 }, + { 0x109C, 0, 0x0802E240 }, { 0x109D, 0, 0x0802E290 }, { 0x109E, 0, 0x0802E2D8 }, { 0x109F, 0, 0x0802E308 }, + { 0x10A0, 0, 0x0802E364 }, { 0x10A1, 0, 0x0802E3B8 }, { 0x10A2, 0, 0x0802E3DC }, { 0x10A3, 0, 0x0802E480 }, + { 0x10A4, 0, 0x0802E4D4 }, { 0x10A5, 0, 0x0802E53C }, { 0x10A6, 0, 0x0802E624 }, { 0x10A7, 0, 0x0802E68C }, + { 0x10A8, 0, 0x0802E738 }, { 0x10A9, 0, 0x0802E78C }, { 0x10CE, 0, 0x0802E830 }, { 0x10CF, 0, 0x0802E878 }, + { 0x10D0, 0, 0x0802E8CC }, { 0x10D1, 0, 0x0802E90C }, { 0x10D2, 0, 0x0802E970 }, { 0x10D3, 0, 0x0802E9A4 }, + { 0x10D4, 0, 0x0802E9D0 }, { 0x10D6, 0, 0x0802EA7C }, { 0x10D7, 0, 0x0802EB50 }, { 0x10D8, 0, 0x0802EB6C }, + { 0x10D9, 0, 0x0802EBA0 }, { 0x10DA, 0, 0x0802EBC8 }, { 0x10DB, 0, 0x0802EC10 }, { 0x10DC, 0, 0x0802EC40 }, + { 0x10DD, 0, 0x0802EC6C }, { 0x10DE, 0, 0x0802ECA8 }, { 0x10DF, 0, 0x0802ECD8 }, { 0x10E0, 0, 0x0802ED14 }, + { 0x10E1, 0, 0x0802ED40 }, { 0x10E2, 0, 0x0802ED68 }, { 0x10E3, 0, 0x0802EDA0 }, { 0x10E4, 0, 0x0802EE18 }, + { 0x10E5, 0, 0x0802EE44 }, { 0x10E6, 0, 0x0802EEB0 }, { 0x10E7, 0, 0x0802EEE8 }, { 0x10E8, 0, 0x0802EF24 }, + { 0x10E9, 0, 0x0802EF84 }, { 0x10EA, 0, 0x0802EFCC }, { 0x10EB, 0, 0x0802EFF8 }, { 0x10EC, 0, 0x0802F030 }, + { 0x10ED, 0, 0x0802F078 }, { 0x10EE, 0, 0x0802F0B4 }, { 0x10EF, 0, 0x0802F0E0 }, { 0x10F0, 0, 0x0802F110 }, + { 0x10F1, 0, 0x0802F14C }, { 0x10F2, 0, 0x0802F184 }, { 0x10F3, 0, 0x0802F1A8 }, { 0x10F4, 0, 0x0802F1D4 }, + { 0x10F5, 0, 0x0802F204 }, { 0x10F6, 0, 0x0802F258 }, { 0x10F7, 0, 0x0802F28C }, { 0x10F8, 0, 0x0802F2D4 }, + { 0x10F9, 0, 0x0802F30C }, { 0x10FA, 0, 0x0802F334 }, { 0x10FB, 0, 0x0802F3A8 }, { 0x10FC, 0, 0x0802F3D8 }, + { 0x10FD, 0, 0x0802F408 }, { 0x10FE, 0, 0x0802F44C }, { 0x10FF, 0, 0x0802F484 }, { 0x1100, 0, 0x0802F4CC }, + { 0x1101, 0, 0x0802F500 }, { 0x1102, 0, 0x0802F590 }, { 0x1103, 0, 0x0802F5CC }, { 0x1104, 0, 0x0802F604 }, + { 0x1105, 0, 0x0802F660 }, { 0x1106, 0, 0x0802F694 }, { 0x1107, 0, 0x0802F6B8 }, { 0x1108, 0, 0x0802F730 }, + { 0x1109, 0, 0x0802F7B4 }, { 0x1130, 0, 0x0802F7D8 }, { 0x1131, 0, 0x0802F7F4 }, { 0x1132, 0, 0x0802F82C }, + { 0x1133, 0, 0x0802F8C0 }, { 0x1134, 0, 0x0802F8E8 }, { 0x1135, 0, 0x0802F8F4 }, { 0x1136, 0, 0x0802F900 }, + { 0x1137, 0, 0x0802F960 }, { 0x1138, 0, 0x0802F9D0 }, { 0x1139, 0, 0x0802FA70 }, { 0x113A, 0, 0x0802FB2C }, + { 0x113B, 0, 0x0802FB64 }, { 0x113C, 0, 0x0802FBF4 }, { 0x113D, 0, 0x0802FC4C }, { 0x113E, 0, 0x0802FCA0 }, + { 0x113F, 0, 0x0802FD10 }, { 0x1140, 0, 0x0802FDA8 }, { 0x1141, 0, 0x0802FE38 }, { 0x1142, 0, 0x0802FE7C }, + { 0x1143, 0, 0x0802FEBC }, { 0x1144, 0, 0x0802FEF8 }, { 0x1145, 0, 0x0802FF58 }, { 0x1146, 0, 0x0802FFB4 }, + { 0x1147, 0, 0x08030004 }, { 0x1148, 0, 0x08030018 }, { 0x1149, 0, 0x080300B8 }, { 0x114A, 0, 0x08030114 }, + { 0x114B, 0, 0x08030170 }, { 0x114C, 0, 0x080301CC }, { 0x114D, 0, 0x08030228 }, { 0x114E, 0, 0x08030284 }, + { 0x114F, 0, 0x080302E0 }, { 0x1150, 0, 0x08030318 }, { 0x1151, 0, 0x080303C8 }, { 0x1152, 0, 0x080303DC }, + { 0x1194, 0, 0x08030438 }, { 0x1195, 0, 0x08030458 }, { 0x1196, 0, 0x080304AC }, { 0x1197, 0, 0x080304E0 }, + { 0x1198, 0, 0x08030578 }, { 0x1199, 0, 0x080305E4 }, { 0x119A, 0, 0x080305FC }, { 0x119B, 0, 0x08030638 }, + { 0x119C, 0, 0x080306D0 }, { 0x119D, 0, 0x08030748 }, { 0x119E, 0, 0x08030770 }, { 0x119F, 0, 0x08030784 }, + { 0x11A0, 0, 0x080307EC }, { 0x11A1, 0, 0x08030828 }, { 0x11A2, 0, 0x080308E0 }, { 0x11A3, 0, 0x08030918 }, + { 0x11A4, 0, 0x08030934 }, { 0x11A5, 0, 0x08030948 }, { 0x11A6, 0, 0x080309BC }, { 0x11A7, 0, 0x080309E8 }, + { 0x11A8, 0, 0x08030A38 }, { 0x11A9, 0, 0x08030A60 }, { 0x11AA, 0, 0x08030AA0 }, { 0x11AB, 0, 0x08030ADC }, + { 0x11AC, 0, 0x08030B10 }, { 0x11AD, 0, 0x08030B40 }, { 0x11AE, 0, 0x08030B80 }, { 0x11AF, 0, 0x08030BB4 }, + { 0x11F8, 0, 0x08030BFC }, { 0x11F9, 0, 0x08030C64 }, { 0x11FA, 0, 0x08030CA0 }, { 0x11FB, 0, 0x08030D28 }, + { 0x11FC, 0, 0x08030D58 }, { 0x11FD, 0, 0x08030E14 }, { 0x11FE, 0, 0x08030E94 }, { 0x11FF, 0, 0x08030F2C }, + { 0x1200, 0, 0x08030F6C }, { 0x1201, 0, 0x08031004 }, { 0x1202, 0, 0x08031038 }, { 0x1203, 0, 0x080310A4 }, + { 0x1204, 0, 0x08031110 }, { 0x1205, 0, 0x08031154 }, { 0x1206, 0, 0x080311EC }, { 0x1207, 0, 0x08031230 }, + { 0x1208, 0, 0x08031290 }, { 0x1209, 0, 0x080312C4 }, { 0x120A, 0, 0x08031304 }, { 0x120B, 0, 0x08031320 }, + { 0x120C, 0, 0x08031348 }, { 0x120D, 0, 0x08031390 }, { 0x120E, 0, 0x080313DC }, { 0x120F, 0, 0x08031470 }, + { 0x1210, 0, 0x08031498 }, { 0x1211, 0, 0x08031520 }, { 0x1212, 0, 0x08031580 }, { 0x1213, 0, 0x080315A8 }, + { 0x1214, 0, 0x08031644 }, { 0x1215, 0, 0x080316AC }, { 0x1216, 0, 0x08031708 }, { 0x1217, 0, 0x0803176C }, + { 0x1218, 0, 0x080317BC }, { 0x1219, 0, 0x080317E8 }, { 0x121A, 0, 0x08031834 }, { 0x121B, 0, 0x080318B8 }, + { 0x121C, 0, 0x08031900 }, { 0x121D, 0, 0x08031930 }, { 0x121E, 0, 0x08031984 }, { 0x121F, 0, 0x080319C8 }, + { 0x1220, 0, 0x08031A08 }, { 0x1221, 0, 0x08031A7C }, { 0x1222, 0, 0x08031AFC }, { 0x1223, 0, 0x08031B68 }, + { 0x1224, 0, 0x08031BC0 }, { 0x1225, 0, 0x08031C10 }, { 0x1226, 0, 0x08031CD4 }, { 0x1227, 0, 0x08031D38 }, + { 0x1228, 0, 0x08031DC0 }, { 0x1229, 0, 0x08031E00 }, { 0x122A, 0, 0x08031E54 }, { 0x122B, 0, 0x08031E80 }, + { 0x122C, 0, 0x08031EF8 }, { 0x122D, 0, 0x08031F1C }, { 0x122E, 0, 0x08031FA4 }, { 0x122F, 0, 0x0803202C }, + { 0x1230, 0, 0x08032050 }, { 0x1231, 0, 0x0803210C }, { 0x1232, 0, 0x08032148 }, { 0x1233, 0, 0x080321B4 }, + { 0x1234, 0, 0x08032200 }, { 0x1235, 0, 0x08032250 }, { 0x1236, 0, 0x080322C4 }, { 0x1237, 0, 0x08032330 }, + { 0x1238, 0, 0x08032364 }, { 0x1239, 0, 0x08032414 }, { 0x123A, 0, 0x08032464 }, { 0x123B, 0, 0x08032504 }, + { 0x123C, 0, 0x08032550 }, { 0x123D, 0, 0x080325A4 }, { 0x123E, 0, 0x08032638 }, { 0x123F, 0, 0x08032698 }, + { 0x1240, 0, 0x080326FC }, { 0x1241, 0, 0x080327D4 }, { 0x1242, 0, 0x0803284C }, { 0x1243, 0, 0x08032904 }, + { 0x1244, 0, 0x08032964 }, { 0x1245, 0, 0x080329B8 }, { 0x1246, 0, 0x080329E4 }, { 0x1247, 0, 0x08032A54 }, + { 0x1248, 0, 0x08032AC0 }, { 0x1249, 0, 0x08032B08 }, { 0x124A, 0, 0x08032B68 }, { 0x124B, 0, 0x08032BC4 }, + { 0x124C, 0, 0x08032BE0 }, { 0x124D, 0, 0x08032C24 }, { 0x124E, 0, 0x08032C68 }, { 0x124F, 0, 0x08032CD8 }, + { 0x1250, 0, 0x08032D1C }, { 0x1251, 0, 0x08032D6C }, { 0x1252, 0, 0x08032DE4 }, { 0x1253, 0, 0x08032E0C }, + { 0x1254, 0, 0x08032E60 }, { 0x1255, 0, 0x08032EC4 }, { 0x1256, 0, 0x08032F38 }, { 0x1257, 0, 0x08032F7C }, + { 0x1258, 0, 0x08032FF4 }, { 0x1259, 0, 0x08033030 }, { 0x125A, 0, 0x080330BC }, { 0x125B, 0, 0x080330F8 }, + { 0x125C, 0, 0x0803319C }, { 0x125D, 0, 0x08033224 }, { 0x125E, 0, 0x080332D0 }, { 0x125F, 0, 0x08033358 }, + { 0x1260, 0, 0x080333CC }, { 0x1261, 0, 0x08033410 }, { 0x1262, 0, 0x08033450 }, { 0x1263, 0, 0x080334BC }, + { 0x1264, 0, 0x080334F4 }, { 0x1265, 0, 0x0803353C }, { 0x1266, 0, 0x08033588 }, { 0x1267, 0, 0x080335F4 }, + { 0x1268, 0, 0x08033678 }, { 0x1269, 0, 0x0803370C }, { 0x126A, 0, 0x08033778 }, { 0x126B, 0, 0x080337CC }, + { 0x126C, 0, 0x08033830 }, { 0x126D, 0, 0x080338B0 }, { 0x126E, 0, 0x08033934 }, { 0x126F, 0, 0x0803397C }, + { 0x1270, 0, 0x080339F0 }, { 0x1271, 0, 0x08033A14 }, { 0x1272, 0, 0x08033A44 }, { 0x1273, 0, 0x08033A88 }, + { 0x1274, 0, 0x08033AE0 }, { 0x1275, 0, 0x08033B74 }, { 0x1276, 0, 0x08033BC0 }, { 0x1277, 0, 0x08033C24 }, + { 0x1278, 0, 0x08033CA0 }, { 0x1279, 0, 0x08033D10 }, { 0x127A, 0, 0x08033D80 }, { 0x127B, 0, 0x08033DB4 }, + { 0x127C, 0, 0x08033E18 }, { 0x127D, 0, 0x08033E68 }, { 0x127E, 0, 0x08033EB4 }, { 0x127F, 0, 0x08033F04 }, + { 0x1280, 0, 0x08033F58 }, { 0x1281, 0, 0x08033FB8 }, { 0x1282, 0, 0x08034014 }, { 0x1283, 0, 0x08034044 }, + { 0x1284, 0, 0x0803409C }, { 0x1285, 0, 0x080340EC }, { 0x1286, 0, 0x08034140 }, { 0x1287, 0, 0x080341A0 }, + { 0x1288, 0, 0x08034204 }, { 0x1289, 0, 0x08034248 }, { 0x128A, 0, 0x080342A8 }, { 0x128B, 0, 0x080342E0 }, + { 0x128C, 0, 0x08034314 }, { 0x128D, 0, 0x08034340 }, { 0x128E, 0, 0x08034368 }, { 0x128F, 0, 0x080343C8 }, + { 0x1290, 0, 0x0803445C }, { 0x1291, 0, 0x080344E8 }, { 0x1292, 0, 0x08034528 }, { 0x1293, 0, 0x08034538 }, + { 0x1294, 0, 0x08034578 }, { 0x1295, 0, 0x080345C4 }, { 0x1296, 0, 0x08034618 }, { 0x1297, 0, 0x08034680 }, + { 0x1298, 0, 0x080346AC }, { 0x1299, 0, 0x08034728 }, { 0x129A, 0, 0x0803479C }, { 0x129B, 0, 0x08034808 }, + { 0x129C, 0, 0x08034854 }, { 0x129D, 0, 0x08034888 }, { 0x129E, 0, 0x080348B4 }, { 0x129F, 0, 0x080348FC }, + { 0x12A0, 0, 0x08034938 }, { 0x12A1, 0, 0x08034984 }, { 0x12A2, 0, 0x080349C4 }, { 0x12A3, 0, 0x08034A24 }, + { 0x12A4, 0, 0x08034A80 }, { 0x12A5, 0, 0x08034AF0 }, { 0x12A6, 0, 0x08034B40 }, { 0x12A7, 0, 0x08034B74 }, + { 0x12A8, 0, 0x08034BCC }, { 0x12A9, 0, 0x08034C2C }, { 0x12AA, 0, 0x08034CA0 }, { 0x12AB, 0, 0x08034CDC }, + { 0x12AC, 0, 0x08034D50 }, { 0x12AD, 0, 0x08034D9C }, { 0x12AE, 0, 0x08034E10 }, { 0x12AF, 0, 0x08034E40 }, + { 0x12B0, 0, 0x08034E70 }, { 0x12B1, 0, 0x08034EDC }, { 0x12B2, 0, 0x08034F28 }, { 0x12B3, 0, 0x08034F74 }, + { 0x12B4, 0, 0x08034FA0 }, { 0x12B5, 0, 0x08034FF4 }, { 0x12B6, 0, 0x08035018 }, { 0x12B7, 0, 0x0803504C }, + { 0x12B8, 0, 0x08035078 }, { 0x12B9, 0, 0x080350C0 }, { 0x12BA, 0, 0x080350F0 }, { 0x12BB, 0, 0x08035134 }, + { 0x12BC, 0, 0x0803516C }, { 0x12BD, 0, 0x080351D0 }, { 0x12BE, 0, 0x0803521C }, { 0x12BF, 0, 0x08035288 }, + { 0x12C0, 0, 0x08035308 }, { 0x12C1, 0, 0x0803534C }, { 0x12C2, 0, 0x0803539C }, { 0x12C3, 0, 0x080353CC }, + { 0x12C4, 0, 0x08035410 }, { 0x12C5, 0, 0x08035470 }, { 0x12C6, 0, 0x080354B8 }, { 0x12C7, 0, 0x08035520 }, + { 0x12C8, 0, 0x08035560 }, { 0x12C9, 0, 0x08035604 }, { 0x12CA, 0, 0x0803566C }, { 0x12CB, 0, 0x080356A4 }, + { 0x12CC, 0, 0x080356E4 }, { 0x12CD, 0, 0x0803577C }, { 0x12CE, 0, 0x080357EC }, { 0x12CF, 0, 0x0803581C }, + { 0x12D0, 0, 0x08035848 }, { 0x12D1, 0, 0x08035888 }, { 0x12D2, 0, 0x080358D0 }, { 0x12D3, 0, 0x080358E8 }, + { 0x12D4, 0, 0x0803590C }, { 0x12D5, 0, 0x0803592C }, { 0x12D6, 0, 0x0803596C }, { 0x12D7, 0, 0x080359C4 }, + { 0x12D8, 0, 0x08035A10 }, { 0x12D9, 0, 0x08035A80 }, { 0x12DA, 0, 0x08035ADC }, { 0x12DB, 0, 0x08035B48 }, + { 0x12DC, 0, 0x08035BB8 }, { 0x12DD, 0, 0x08035BF8 }, { 0x12DE, 0, 0x08035C74 }, { 0x12DF, 0, 0x08035CB0 }, + { 0x12E0, 0, 0x08035D10 }, { 0x12E3, 0, 0x08035D4C }, { 0x12E4, 0, 0x08035D70 }, { 0x12E5, 0, 0x08035DAC }, + { 0x12E6, 0, 0x08035DD8 }, { 0x12E7, 0, 0x08035DF4 }, { 0x12E8, 0, 0x08035E0C }, { 0x12E9, 0, 0x08035E58 }, + { 0x12EA, 0, 0x08035ED4 }, { 0x12EB, 0, 0x08035F44 }, { 0x12EC, 0, 0x08036074 }, { 0x12ED, 0, 0x080360BC }, + { 0x12EE, 0, 0x08036104 }, { 0x12EF, 0, 0x0803613C }, { 0x12F0, 0, 0x080361A0 }, { 0x12F1, 0, 0x080361F0 }, + { 0x12F2, 0, 0x08036248 }, { 0x12F3, 0, 0x08036260 }, { 0x12F4, 0, 0x080362A0 }, { 0x12F5, 0, 0x08036300 }, + { 0x12F6, 0, 0x08036324 }, { 0x12F7, 0, 0x080363A0 }, { 0x12F8, 0, 0x0803640C }, { 0x12F9, 0, 0x08036474 }, + { 0x12FA, 0, 0x080364CC }, { 0x12FB, 0, 0x08036508 }, { 0x12FC, 0, 0x0803655C }, { 0x12FD, 0, 0x08036578 }, + { 0x12FE, 0, 0x080365D4 }, { 0x12FF, 0, 0x080365F8 }, { 0x1300, 0, 0x08036654 }, { 0x1301, 0, 0x080366A4 }, + { 0x1302, 0, 0x080366F0 }, { 0x1303, 0, 0x08036738 }, { 0x1304, 0, 0x08036770 }, { 0x1305, 0, 0x080367AC }, + { 0x1306, 0, 0x080367F0 }, { 0x1307, 0, 0x08036830 }, { 0x1308, 0, 0x08036850 }, { 0x1309, 0, 0x0803688C }, + { 0x130A, 0, 0x080368F0 }, { 0x130B, 0, 0x08036924 }, { 0x130C, 0, 0x0803695C }, { 0x130D, 0, 0x080369A8 }, + { 0x130E, 0, 0x080369FC }, { 0x130F, 0, 0x08036A40 }, { 0x1310, 0, 0x08036A74 }, { 0x1311, 0, 0x08036AB8 }, + { 0x1312, 0, 0x08036B14 }, { 0x1313, 0, 0x08036B4C }, { 0x1314, 0, 0x08036BAC }, { 0x1315, 0, 0x08036C0C }, + { 0x1316, 0, 0x08036C64 }, { 0x1317, 0, 0x08036CBC }, { 0x1318, 0, 0x08036D1C }, { 0x1319, 0, 0x08036D80 }, + { 0x131A, 0, 0x08036DC4 }, { 0x131B, 0, 0x08036E0C }, { 0x131C, 0, 0x08036E8C }, { 0x131D, 0, 0x08036F14 }, + { 0x1388, 0, 0x08036F8C }, { 0x1389, 0, 0x08036FB4 }, { 0x138A, 0, 0x08036FF8 }, { 0x138B, 0, 0x08037034 }, + { 0x138C, 0, 0x08037060 }, { 0x138D, 0, 0x0803709C }, { 0x138E, 0, 0x0803711C }, { 0x138F, 0, 0x08037140 }, + { 0x1390, 0, 0x08037178 }, { 0x1391, 0, 0x080371AC }, { 0x1392, 0, 0x08037204 }, { 0x1393, 0, 0x08037234 }, + { 0x1394, 0, 0x08037288 }, { 0x1395, 0, 0x080372BC }, { 0x1396, 0, 0x080372F0 }, { 0x1397, 0, 0x08037310 }, + { 0x1398, 0, 0x08037338 }, { 0x1399, 0, 0x080373C4 }, { 0x139A, 0, 0x08037438 }, { 0x139B, 0, 0x080374A0 }, + { 0x139C, 0, 0x0803751C }, { 0x139D, 0, 0x0803758C }, { 0x139E, 0, 0x08037620 }, { 0x139F, 0, 0x08037704 }, + { 0x13A0, 0, 0x08037764 }, { 0x13A1, 0, 0x080377F4 }, { 0x13A2, 0, 0x08037838 }, { 0x13A3, 0, 0x08037894 }, + { 0x13A4, 0, 0x08037918 }, { 0x13A5, 0, 0x08037974 }, { 0x13A6, 0, 0x080379CC }, { 0x13A7, 0, 0x08037A68 }, + { 0x13A8, 0, 0x08037ACC }, { 0x13AE, 0, 0x08037B5C }, { 0x13AF, 0, 0x08037BF8 }, { 0x13B0, 0, 0x08037CE0 }, + { 0x13B1, 0, 0x08037D2C }, { 0x13B2, 0, 0x08037D54 }, { 0x13B3, 0, 0x08037D74 }, { 0x13EC, 0, 0x08037DB8 }, + { 0x13ED, 0, 0x08037DCC }, { 0x13EE, 0, 0x08037E30 }, { 0x13EF, 0, 0x08037EB4 }, { 0x13F0, 0, 0x08037EF4 }, + { 0x13F1, 0, 0x08037F34 }, { 0x13F2, 0, 0x08037F74 }, { 0x13F3, 0, 0x08037F8C }, { 0x13F4, 0, 0x08037FA4 }, + { 0x13F5, 0, 0x08037FC8 }, { 0x13F6, 0, 0x08037FF8 }, { 0x13F7, 0, 0x0803800C }, { 0x13F8, 0, 0x0803803C }, + { 0x13F9, 0, 0x08038084 }, { 0x13FA, 0, 0x080380C8 }, { 0x13FB, 0, 0x08038108 }, { 0x13FC, 0, 0x080381A4 }, + { 0x13FD, 0, 0x080381FC }, { 0x13FE, 0, 0x08038254 }, { 0x13FF, 0, 0x080382D8 }, { 0x1400, 0, 0x080383A8 }, + { 0x1401, 0, 0x08038504 }, { 0x1402, 0, 0x080385A8 }, { 0x1403, 0, 0x08038630 }, { 0x1404, 0, 0x0803868C }, + { 0x1405, 0, 0x080386C4 }, { 0x1406, 0, 0x08038728 }, { 0x1407, 0, 0x08038824 }, { 0x1408, 0, 0x08038844 }, + { 0x1409, 0, 0x080388F4 }, { 0x140A, 0, 0x08038984 }, { 0x140B, 0, 0x080389D0 }, { 0x140C, 0, 0x08038A3C }, + { 0x140D, 0, 0x08038A88 }, { 0x140E, 0, 0x08038AE8 }, { 0x140F, 0, 0x08038B20 }, { 0x1410, 0, 0x08038B60 }, + { 0x1411, 0, 0x08038BBC }, { 0x1412, 0, 0x08038BF4 }, { 0x1413, 0, 0x08038C34 }, { 0x1414, 0, 0x08038CC0 }, + { 0x1450, 0, 0x08038D04 }, { 0x1451, 0, 0x08038EC4 }, { 0x1452, 0, 0x08038EF8 }, { 0x1453, 0, 0x08038F10 }, + { 0x1454, 0, 0x08038F50 }, { 0x1455, 0, 0x08038F9C }, { 0x1456, 0, 0x08038FE4 }, { 0x1457, 0, 0x08039064 }, + { 0x1458, 0, 0x080390A8 }, { 0x1459, 0, 0x080390D4 }, { 0x145A, 0, 0x08039128 }, { 0x145B, 0, 0x08039198 }, + { 0x145C, 0, 0x080391C4 }, { 0x145D, 0, 0x080391D8 }, { 0x145E, 0, 0x08039204 }, { 0x145F, 0, 0x080392B0 }, + { 0x1460, 0, 0x08039360 }, { 0x1461, 0, 0x080393A8 }, { 0x1462, 0, 0x080393BC }, { 0x1463, 0, 0x080393EC }, + { 0x1464, 0, 0x0803940C }, { 0x1465, 0, 0x0803942C }, { 0x1466, 0, 0x08039454 }, { 0x1467, 0, 0x0803948C }, + { 0x1468, 0, 0x080394E8 }, { 0x1469, 0, 0x08039548 }, { 0x146A, 0, 0x080395A8 }, { 0x146B, 0, 0x08039638 }, + { 0x146C, 0, 0x08039700 }, { 0x146D, 0, 0x08039738 }, { 0x146E, 0, 0x08039758 }, { 0x146F, 0, 0x080397D8 }, + { 0x1470, 0, 0x08039858 }, { 0x1471, 0, 0x08039880 }, { 0x1472, 0, 0x080398B8 }, { 0x1473, 0, 0x08039924 }, + { 0x1474, 0, 0x08039950 }, { 0x1475, 0, 0x08039A64 }, { 0x1476, 0, 0x08039AE8 }, { 0x1477, 0, 0x08039B4C }, + { 0x1478, 0, 0x08039B70 }, { 0x1479, 0, 0x08039B98 }, { 0x147A, 0, 0x08039BCC }, { 0x147B, 0, 0x08039C00 }, + { 0x147C, 0, 0x08039D6C }, { 0x147D, 0, 0x08039E18 }, { 0x14B4, 0, 0x08039E78 }, { 0x14B5, 0, 0x08039EA8 }, + { 0x14B6, 0, 0x08039EF8 }, { 0x14B7, 0, 0x08039F64 }, { 0x14B8, 0, 0x08039F90 }, { 0x14B9, 0, 0x08039FE4 }, + { 0x14BA, 0, 0x0803A044 }, { 0x14BB, 0, 0x0803A090 }, { 0x14BC, 0, 0x0803A110 }, { 0x14BD, 0, 0x0803A138 }, + { 0x14BE, 0, 0x0803A1B8 }, { 0x14BF, 0, 0x0803A208 }, { 0x14C0, 0, 0x0803A25C }, { 0x14C1, 0, 0x0803A29C }, + { 0x14C2, 0, 0x0803A2E8 }, { 0x14C3, 0, 0x0803A384 }, { 0x14C4, 0, 0x0803A3FC }, { 0x14C5, 0, 0x0803A458 }, + { 0x14C6, 0, 0x0803A514 }, { 0x14C7, 0, 0x0803A540 }, { 0x14C8, 0, 0x0803A570 }, { 0x14C9, 0, 0x0803A5E4 }, + { 0x14CA, 0, 0x0803A614 }, { 0x14CB, 0, 0x0803A684 }, { 0x14CC, 0, 0x0803A700 }, { 0x14CD, 0, 0x0803A79C }, + { 0x14CE, 0, 0x0803A7B8 }, { 0x14CF, 0, 0x0803A880 }, { 0x14D0, 0, 0x0803A8AC }, { 0x14D1, 0, 0x0803A96C }, + { 0x14D2, 0, 0x0803AA08 }, { 0x14D3, 0, 0x0803AA80 }, { 0x14D4, 0, 0x0803AB40 }, { 0x14D5, 0, 0x0803AB80 }, + { 0x14D6, 0, 0x0803ABC0 }, { 0x14D7, 0, 0x0803AC30 }, { 0x14D8, 0, 0x0803AC78 }, { 0x14D9, 0, 0x0803ACEC }, + { 0x14DA, 0, 0x0803AD64 }, { 0x14DB, 0, 0x0803AD8C }, { 0x14DC, 0, 0x0803ADB8 }, { 0x14DD, 0, 0x0803ADEC }, + { 0x14DE, 0, 0x0803AE40 }, { 0x14DF, 0, 0x0803AEAC }, { 0x14E0, 0, 0x0803AEFC }, { 0x14E1, 0, 0x0803AF58 }, + { 0x14E2, 0, 0x0803AFDC }, { 0x14E3, 0, 0x0803B018 }, { 0x14E4, 0, 0x0803B044 }, { 0x14E5, 0, 0x0803B07C }, + { 0x14E6, 0, 0x0803B100 }, { 0x14E7, 0, 0x0803B13C }, { 0x14E8, 0, 0x0803B19C }, { 0x14E9, 0, 0x0803B220 }, + { 0x14EA, 0, 0x0803B2A0 }, { 0x14EB, 0, 0x0803B358 }, { 0x14EC, 0, 0x0803B398 }, { 0x14ED, 0, 0x0803B40C }, + { 0x14EE, 0, 0x0803B518 }, { 0x14EF, 0, 0x0803B5F8 }, { 0x14F0, 0, 0x0803B63C }, { 0x14F1, 0, 0x0803B6A8 }, + { 0x14F2, 0, 0x0803B734 }, { 0x14F3, 0, 0x0803B7B8 }, { 0x14F4, 0, 0x0803B834 }, { 0x14F5, 0, 0x0803B910 }, + { 0x14F6, 0, 0x0803B984 }, { 0x14F7, 0, 0x0803B9F0 }, { 0x14F8, 0, 0x0803BA80 }, { 0x14F9, 0, 0x0803BAB8 }, + { 0x14FA, 0, 0x0803BAF8 }, { 0x14FB, 0, 0x0803BB60 }, { 0x14FC, 0, 0x0803BB8C }, { 0x1518, 0, 0x0803BBFC }, + { 0x1519, 0, 0x0803BC5C }, { 0x151A, 0, 0x0803BCB0 }, { 0x151B, 0, 0x0803BCC8 }, { 0x151C, 0, 0x0803BCF8 }, + { 0x151D, 0, 0x0803BD44 }, { 0x151E, 0, 0x0803BDB8 }, { 0x151F, 0, 0x0803BDFC }, { 0x1520, 0, 0x0803BE9C }, + { 0x1521, 0, 0x0803BF18 }, { 0x1522, 0, 0x0803BF64 }, { 0x1523, 0, 0x0803BF8C }, { 0x1524, 0, 0x0803BFA4 }, + { 0x1525, 0, 0x0803BFD8 }, { 0x1526, 0, 0x0803BFF8 }, { 0x1527, 0, 0x0803C014 }, { 0x1528, 0, 0x0803C068 }, + { 0x1529, 0, 0x0803C0EC }, { 0x152A, 0, 0x0803C174 }, { 0x152B, 0, 0x0803C1CC }, { 0x152C, 0, 0x0803C22C }, + { 0x152D, 0, 0x0803C290 }, { 0x152E, 0, 0x0803C314 }, { 0x152F, 0, 0x0803C398 }, { 0x1530, 0, 0x0803C3F0 }, + { 0x1531, 0, 0x0803C454 }, { 0x1532, 0, 0x0803C4DC }, { 0x1533, 0, 0x0803C518 }, { 0x1534, 0, 0x0803C564 }, + { 0x1535, 0, 0x0803C5A4 }, { 0x1536, 0, 0x0803C5E4 }, { 0x1537, 0, 0x0803C644 }, { 0x1538, 0, 0x0803C6C8 }, + { 0x1539, 0, 0x0803C744 }, { 0x153A, 0, 0x0803C7E0 }, { 0x153B, 0, 0x0803C80C }, { 0x153C, 0, 0x0803C84C }, + { 0x153D, 0, 0x0803C884 }, { 0x153E, 0, 0x0803C89C }, { 0x153F, 0, 0x0803C8DC }, { 0x1540, 0, 0x0803C908 }, + { 0x1541, 0, 0x0803C944 }, { 0x1542, 0, 0x0803C9A0 }, { 0x157C, 0, 0x0803C9BC }, { 0x157D, 0, 0x0803C9D4 }, + { 0x157E, 0, 0x0803CA30 }, { 0x157F, 0, 0x0803CA70 }, { 0x1580, 0, 0x0803CAA0 }, { 0x1581, 0, 0x0803CAEC }, + { 0x1582, 0, 0x0803CB04 }, { 0x1583, 0, 0x0803CB18 }, { 0x1584, 0, 0x0803CB30 }, { 0x1585, 0, 0x0803CB64 }, + { 0x1586, 0, 0x0803CBD8 }, { 0x1587, 0, 0x0803CBF4 }, { 0x1588, 0, 0x0803CC34 }, { 0x1589, 0, 0x0803CC78 }, + { 0x158A, 0, 0x0803CD14 }, { 0x158B, 0, 0x0803CDA0 }, { 0x158C, 0, 0x0803CDE0 }, { 0x158D, 0, 0x0803CE3C }, + { 0x158E, 0, 0x0803CEA8 }, { 0x158F, 0, 0x0803CEE8 }, { 0x1590, 0, 0x0803CF30 }, { 0x1591, 0, 0x0803CFA4 }, + { 0x1592, 0, 0x0803D050 }, { 0x1593, 0, 0x0803D0C8 }, { 0x1594, 0, 0x0803D118 }, { 0x1595, 0, 0x0803D168 }, + { 0x1596, 0, 0x0803D1A8 }, { 0x1597, 0, 0x0803D1F0 }, { 0x1598, 0, 0x0803D228 }, { 0x1599, 0, 0x0803D290 }, + { 0x159A, 0, 0x0803D2FC }, { 0x159B, 0, 0x0803D368 }, { 0x159C, 0, 0x0803D448 }, { 0x159D, 0, 0x0803D4C0 }, + { 0x159E, 0, 0x0803D500 }, { 0x159F, 0, 0x0803D558 }, { 0x15A0, 0, 0x0803D5B4 }, { 0x15A1, 0, 0x0803D628 }, + { 0x15A2, 0, 0x0803D730 }, { 0x15A3, 0, 0x0803D798 }, { 0x15A4, 0, 0x0803D818 }, { 0x15A5, 0, 0x0803D868 }, + { 0x15A6, 0, 0x0803D8C4 }, { 0x15A7, 0, 0x0803D9AC }, { 0x15A8, 0, 0x0803D9FC }, { 0x15E0, 0, 0x0803DA3C }, + { 0x15E1, 0, 0x0803DA80 }, { 0x15E2, 0, 0x0803DB14 }, { 0x15E3, 0, 0x0803DB9C }, { 0x15E4, 0, 0x0803DC1C }, + { 0x15E5, 0, 0x0803DC70 }, { 0x15E6, 0, 0x0803DCA8 }, { 0x15E7, 0, 0x0803DCF8 }, { 0x15E8, 0, 0x0803DD5C }, + { 0x15E9, 0, 0x0803DE00 }, { 0x15EA, 0, 0x0803DE5C }, { 0x15EB, 0, 0x0803DE84 }, { 0x15EC, 0, 0x0803DED0 }, + { 0x15ED, 0, 0x0803DF34 }, { 0x15EE, 0, 0x0803DF64 }, { 0x15EF, 0, 0x0803DF9C }, { 0x15F0, 0, 0x0803DFBC }, + { 0x15F1, 0, 0x0803E018 }, { 0x15F2, 0, 0x0803E0B8 }, { 0x15F3, 0, 0x0803E124 }, { 0x15F4, 0, 0x0803E178 }, + { 0x15F5, 0, 0x0803E1E0 }, { 0x15F6, 0, 0x0803E298 }, { 0x15F7, 0, 0x0803E310 }, { 0x15F8, 0, 0x0803E36C }, + { 0x15F9, 0, 0x0803E3D0 }, { 0x15FA, 0, 0x0803E420 }, { 0x15FB, 0, 0x0803E454 }, { 0x15FC, 0, 0x0803E488 }, + { 0x15FD, 0, 0x0803E4E8 }, { 0x15FE, 0, 0x0803E59C }, { 0x15FF, 0, 0x0803E620 }, { 0x1600, 0, 0x0803E66C }, + { 0x1601, 0, 0x0803E70C }, { 0x1602, 0, 0x0803E74C }, { 0x1603, 0, 0x0803E7A4 }, { 0x1604, 0, 0x0803E7DC }, + { 0x1605, 0, 0x0803E804 }, { 0x1606, 0, 0x0803E864 }, { 0x1607, 0, 0x0803E8E8 }, { 0x1608, 0, 0x0803E930 }, + { 0x1609, 0, 0x0803E9E4 }, { 0x160A, 0, 0x0803EA4C }, { 0x160B, 0, 0x0803EAB0 }, { 0x160C, 0, 0x0803EB18 }, + { 0x160D, 0, 0x0803EB58 }, { 0x160E, 0, 0x0803EBA8 }, { 0x160F, 0, 0x0803EBFC }, { 0x1610, 0, 0x0803EC9C }, + { 0x1611, 0, 0x0803ED14 }, { 0x1612, 0, 0x0803EE08 }, { 0x1613, 0, 0x0803EE48 }, { 0x1614, 0, 0x0803EEB0 }, + { 0x1615, 0, 0x0803EEF0 }, { 0x1616, 0, 0x0803EFAC }, { 0x1617, 0, 0x0803F004 }, { 0x1618, 0, 0x0803F04C }, + { 0x1619, 0, 0x0803F078 }, { 0x161A, 0, 0x0803F0E0 }, { 0x161B, 0, 0x0803F110 }, { 0x161C, 0, 0x0803F15C }, + { 0x161D, 0, 0x0803F1EC }, { 0x161E, 0, 0x0803F264 }, { 0x161F, 0, 0x0803F2CC }, { 0x1620, 0, 0x0803F344 }, + { 0x1621, 0, 0x0803F3A8 }, { 0x1622, 0, 0x0803F3F4 }, { 0x1623, 0, 0x0803F46C }, { 0x1624, 0, 0x0803F4AC }, + { 0x1625, 0, 0x0803F500 }, { 0x1626, 0, 0x0803F608 }, { 0x1627, 0, 0x0803F66C }, { 0x1628, 0, 0x0803F6E8 }, + { 0x1629, 0, 0x0803F718 }, { 0x162A, 0, 0x0803F760 }, { 0x162B, 0, 0x0803F7C0 }, { 0x162C, 0, 0x0803F87C }, + { 0x162D, 0, 0x0803F8A8 }, { 0x162E, 0, 0x0803F8EC }, { 0x162F, 0, 0x0803F94C }, { 0x1630, 0, 0x0803F978 }, + { 0x1631, 0, 0x0803F9DC }, { 0x1632, 0, 0x0803FA3C }, { 0x1633, 0, 0x0803FA78 }, { 0x1634, 0, 0x0803FAC4 }, + { 0x1635, 0, 0x0803FB0C }, { 0x1636, 0, 0x0803FB5C }, { 0x1637, 0, 0x0803FBCC }, { 0x1638, 0, 0x0803FC50 }, + { 0x1644, 0, 0x0803FC6C }, { 0x1645, 0, 0x0803FD0C }, { 0x1646, 0, 0x0803FD5C }, { 0x1647, 0, 0x0803FDC0 }, + { 0x1648, 0, 0x0803FE08 }, { 0x1649, 0, 0x0803FE54 }, { 0x164A, 0, 0x0803FEB4 }, { 0x164B, 0, 0x0803FF88 }, + { 0x164C, 0, 0x0803FFF4 }, { 0x164D, 0, 0x08040064 }, { 0x164E, 0, 0x080400BC }, { 0x164F, 0, 0x0804010C }, + { 0x1650, 0, 0x08040174 }, { 0x1651, 0, 0x0804019C }, { 0x1652, 0, 0x08040208 }, { 0x1653, 0, 0x08040250 }, + { 0x1654, 0, 0x080402B0 }, { 0x1655, 0, 0x080402CC }, { 0x1656, 0, 0x0804032C }, { 0x1657, 0, 0x0804035C }, + { 0x1658, 0, 0x080403C0 }, { 0x1659, 0, 0x08040494 }, { 0x165A, 0, 0x08040530 }, { 0x165B, 0, 0x0804054C }, + { 0x165C, 0, 0x080405AC }, { 0x165D, 0, 0x080405E0 }, { 0x165E, 0, 0x08040624 }, { 0x165F, 0, 0x0804070C }, + { 0x1660, 0, 0x08040798 }, { 0x1661, 0, 0x080407C0 }, { 0x1700, 0, 0x08040848 }, { 0x1701, 0, 0x080408E4 }, + { 0x1702, 0, 0x0804092C }, { 0x1703, 0, 0x08040988 }, { 0x1704, 0, 0x080409D4 }, { 0x1705, 0, 0x08040A28 }, + { 0x1706, 0, 0x08040ABC }, { 0x1707, 0, 0x08040B0C }, { 0x1708, 0, 0x08040B50 }, { 0x1709, 0, 0x08040BA4 }, + { 0x170A, 0, 0x08040C18 }, { 0x170B, 0, 0x08040C60 }, { 0x170C, 0, 0x08040C6C }, { 0x170D, 0, 0x08040CC8 }, + { 0x170E, 0, 0x08040D38 }, { 0x170F, 0, 0x08040DBC }, { 0x1710, 0, 0x08040E0C }, { 0x1711, 0, 0x08040E84 }, + { 0x1712, 0, 0x08040E90 }, { 0x1713, 0, 0x08040EE8 }, { 0x1714, 0, 0x08040F30 }, { 0x1715, 0, 0x08040F78 }, + { 0x1716, 0, 0x08040FD0 }, { 0x1717, 0, 0x08041050 }, { 0x1718, 0, 0x08041084 }, { 0x1719, 0, 0x080410E8 }, + { 0x171A, 0, 0x08041128 }, { 0x171B, 0, 0x08041170 }, { 0x171C, 0, 0x080411BC }, { 0x171D, 0, 0x080411C8 }, + { 0x171E, 0, 0x0804122C }, { 0x171F, 0, 0x0804125C }, { 0x1720, 0, 0x080412A8 }, { 0x1721, 0, 0x080412E8 }, + { 0x1722, 0, 0x0804132C }, { 0x1723, 0, 0x08041378 }, { 0x1724, 0, 0x080413C0 }, { 0x1725, 0, 0x08041414 }, + { 0x1726, 0, 0x08041470 }, { 0x1727, 0, 0x0804147C }, { 0x1728, 0, 0x08041488 }, { 0x1729, 0, 0x080414D0 }, + { 0x172A, 0, 0x08041530 }, { 0x172B, 0, 0x08041588 }, { 0x172C, 0, 0x080415E4 }, { 0x172D, 0, 0x08041640 }, + { 0x172E, 0, 0x08041698 }, { 0x172F, 0, 0x080416FC }, { 0x1730, 0, 0x08041740 }, { 0x1731, 0, 0x08041794 }, + { 0x1732, 0, 0x080417A0 }, { 0x1733, 0, 0x080417F4 }, { 0x1734, 0, 0x08041848 }, { 0x1735, 0, 0x0804189C }, + { 0x1736, 0, 0x08041900 }, { 0x1737, 0, 0x08041958 }, { 0x1738, 0, 0x080419A8 }, { 0x1739, 0, 0x080419F4 }, + { 0x173A, 0, 0x08041A54 }, { 0x173B, 0, 0x08041AA0 }, { 0x173C, 0, 0x08041AF8 }, { 0x173D, 0, 0x08041B54 }, + { 0x173E, 0, 0x08041BA4 }, { 0x173F, 0, 0x08041BF4 }, { 0x1740, 0, 0x08041C48 }, { 0x1741, 0, 0x08041CAC }, + { 0x1742, 0, 0x08041D08 }, { 0x1743, 0, 0x08041D68 }, { 0x1744, 0, 0x08041DB4 }, { 0x1745, 0, 0x08041DF8 }, + { 0x1746, 0, 0x08041E54 }, { 0x1747, 0, 0x08041EB0 }, { 0x1748, 0, 0x08041F2C }, { 0x1749, 0, 0x08041F78 }, + { 0x1784, 0, 0x08041FD0 }, { 0x1785, 0, 0x0804202C }, { 0x1786, 0, 0x08042088 }, { 0x1787, 0, 0x080420E4 }, + { 0x1788, 0, 0x080420F0 }, { 0x1789, 0, 0x0804214C }, { 0x178A, 0, 0x080421B0 }, { 0x178B, 0, 0x080421F4 }, + { 0x178C, 0, 0x0804223C }, { 0x178D, 0, 0x08042288 }, { 0x178E, 0, 0x080422CC }, { 0x178F, 0, 0x08042314 }, + { 0x1798, 0, 0x08042360 }, { 0x1799, 0, 0x080423AC }, { 0x179A, 0, 0x080423F4 }, { 0x179B, 0, 0x08042440 }, + { 0x17AA, 0, 0x08042490 }, { 0x17AC, 0, 0x08042514 }, { 0x17AD, 0, 0x08042568 }, { 0x17AE, 0, 0x080425C0 }, + { 0x17AF, 0, 0x0804262C }, { 0x1800, 0, 0x080426AC }, { 0x1801, 0, 0x080426CC }, { 0x1802, 0, 0x0804272C }, + { 0x1803, 0, 0x08042754 }, { 0x1804, 0, 0x08042784 }, { 0x1805, 0, 0x080427E0 }, { 0x1806, 0, 0x08042834 }, + { 0x1807, 0, 0x08042870 }, { 0x1808, 0, 0x080428D0 }, { 0x1809, 0, 0x08042910 }, { 0x180A, 0, 0x0804293C }, + { 0x180B, 0, 0x08042968 }, { 0x180C, 0, 0x08042990 }, { 0x180D, 0, 0x080429AC }, { 0x180E, 0, 0x08042A04 }, + { 0x180F, 0, 0x08042A50 }, { 0x1810, 0, 0x08042A80 }, { 0x1811, 0, 0x08042AB4 }, { 0x1812, 0, 0x08042AF8 }, + { 0x1813, 0, 0x08042B38 }, { 0x1814, 0, 0x08042B6C }, { 0x1815, 0, 0x08042BAC }, { 0x1816, 0, 0x08042C04 }, + { 0x1817, 0, 0x08042C4C }, { 0x1818, 0, 0x08042C8C }, { 0x1819, 0, 0x08042CB8 }, { 0x181A, 0, 0x08042CEC }, + { 0x181B, 0, 0x08042D28 }, { 0x181C, 0, 0x08042D34 }, { 0x181D, 0, 0x08042D94 }, { 0x181E, 0, 0x08042DD8 }, + { 0x181F, 0, 0x08042DF0 }, { 0x1820, 0, 0x08042E40 }, { 0x1821, 0, 0x08042E7C }, { 0x1822, 0, 0x08042EB0 }, + { 0x1823, 0, 0x08042EE8 }, { 0x1824, 0, 0x08042F20 }, { 0x1883, 0, 0x08042F2C }, { 0x1884, 0, 0x08042F60 }, + { 0x1885, 0, 0x08042F9C }, { 0x1886, 0, 0x08043008 }, { 0x1887, 0, 0x08043054 }, { 0x1888, 0, 0x08043094 }, + { 0x1889, 0, 0x080430E4 }, { 0x188A, 0, 0x08043134 }, { 0x188B, 0, 0x08043150 }, { 0x188C, 0, 0x0804318C }, + { 0x188D, 0, 0x080431E8 }, { 0x188E, 0, 0x08043224 }, { 0x188F, 0, 0x0804326C }, { 0x1890, 0, 0x08043298 }, + { 0x1891, 0, 0x080432D8 }, { 0x1892, 0, 0x0804332C }, { 0x1893, 0, 0x08043378 }, { 0x1901, 0, 0x080433B4 }, + { 0x1902, 0, 0x0804341C }, { 0x1903, 0, 0x08043484 }, { 0x1904, 0, 0x08043508 }, { 0x1905, 0, 0x08043580 }, + { 0x1906, 0, 0x08043610 }, { 0x1907, 0, 0x0804367C }, { 0x1908, 0, 0x08043710 }, { 0x1909, 0, 0x08043784 }, + { 0x190A, 0, 0x0804380C }, { 0x190B, 0, 0x08043880 }, { 0x190C, 0, 0x080438E8 }, { 0x190D, 0, 0x08043948 }, + { 0x190E, 0, 0x080439C4 }, { 0x190F, 0, 0x08043A20 }, { 0x1910, 0, 0x08043AA0 }, { 0x1911, 0, 0x08043B24 }, + { 0x1912, 0, 0x08043BA8 }, { 0x1913, 0, 0x08043C30 }, { 0x1914, 0, 0x08043C9C }, { 0x1915, 0, 0x08043CEC }, + { 0x1916, 0, 0x08043D50 }, { 0x1917, 0, 0x08043DD8 }, { 0x1918, 0, 0x08043E40 }, { 0x1919, 0, 0x08043EB0 }, + { 0x191A, 0, 0x08043F24 }, { 0x191B, 0, 0x08043FB0 }, { 0x191C, 0, 0x0804401C }, { 0x191D, 0, 0x08044098 }, + { 0x191E, 0, 0x0804411C }, { 0x191F, 0, 0x08044184 }, { 0x1921, 0, 0x080441E8 }, { 0x1922, 0, 0x08044258 }, + { 0x1923, 0, 0x080442D4 }, { 0x1924, 0, 0x08044348 }, { 0x1925, 0, 0x080443D0 }, { 0x1926, 0, 0x08044458 }, + { 0x1927, 0, 0x080444DC }, { 0x1928, 0, 0x08044574 }, { 0x1929, 0, 0x080445CC }, { 0x192A, 0, 0x08044630 }, + { 0x192C, 0, 0x080446AC }, { 0x192D, 0, 0x0804471C }, { 0x192E, 0, 0x08044780 }, { 0x1930, 0, 0x08044808 }, + { 0x1931, 0, 0x08044898 }, { 0x1932, 0, 0x08044910 }, { 0x1933, 0, 0x0804498C }, { 0x1934, 0, 0x08044A04 }, + { 0x1935, 0, 0x08044A94 }, { 0x1937, 0, 0x08044B10 }, { 0x1939, 0, 0x08044B9C }, { 0x193A, 0, 0x08044C0C }, + { 0x193B, 0, 0x08044C18 }, { 0x193C, 0, 0x08044C8C }, { 0x1942, 0, 0x08044D04 }, { 0x1944, 0, 0x08044D6C }, + { 0x1945, 0, 0x08044DCC }, { 0x1946, 0, 0x08044E48 }, { 0x1947, 0, 0x08044EAC }, { 0x1948, 0, 0x08044F20 }, + { 0x1949, 0, 0x08044F88 }, { 0x194A, 0, 0x08045004 }, { 0x194B, 0, 0x08045084 }, { 0x194C, 0, 0x080450F4 }, + { 0x194D, 0, 0x08045174 }, { 0x1950, 0, 0x080451C8 }, { 0x1951, 0, 0x08045238 }, { 0x1952, 0, 0x080452A0 }, + { 0x1953, 0, 0x08045310 }, { 0x1954, 0, 0x08045378 }, { 0x1955, 0, 0x080453E8 }, { 0x1956, 0, 0x08045458 }, + { 0x1957, 0, 0x080454CC }, { 0x1958, 0, 0x08045540 }, { 0x1959, 0, 0x080455C4 }, { 0x195A, 0, 0x0804564C }, + { 0x195B, 0, 0x080456AC }, { 0x195C, 0, 0x08045704 }, { 0x195D, 0, 0x0804576C }, { 0x195E, 0, 0x080457E8 }, + { 0x195F, 0, 0x08045838 }, { 0x1960, 0, 0x0804589C }, { 0x1961, 0, 0x08045918 }, { 0x1962, 0, 0x08045988 }, + { 0x1963, 0, 0x080459E4 }, { 0x1964, 0, 0x08045A24 }, { 0x1B58, 0, 0x08045ACC }, { 0x1B59, 0, 0x08045ADC }, + { 0x1B5A, 0, 0x08045B00 }, { 0x1B5B, 0, 0x08045B20 }, { 0x1B5C, 0, 0x08045B2C }, { 0x1B5D, 0, 0x08045B58 }, + { 0x1B5E, 0, 0x08045B7C }, { 0x1B5F, 0, 0x08045BAC }, { 0x1B60, 0, 0x08045BD8 }, { 0x1B61, 0, 0x08045BFC }, + { 0x1B62, 0, 0x08045C18 }, { 0x1B63, 0, 0x08045C3C }, { 0x1B64, 0, 0x08045C60 }, { 0x1B65, 0, 0x08045C90 }, + { 0x1B66, 0, 0x08045CC0 }, { 0x1B67, 0, 0x08045CEC }, { 0x1B6A, 0, 0x08045CF8 }, { 0x1B6B, 0, 0x08045D28 }, + { 0x1B72, 0, 0x08045D58 }, { 0x1B73, 0, 0x08045D8C }, { 0x1B74, 0, 0x08045DB8 }, { 0x1B75, 0, 0x08045DEC }, + { 0x1B76, 0, 0x08045E1C }, { 0x1B77, 0, 0x08045E48 }, { 0x1B78, 0, 0x08045E54 }, { 0x1B79, 0, 0x08045E80 }, + { 0x1B7A, 0, 0x08045EB0 }, { 0x1B7B, 0, 0x08045ED8 }, { 0x1B7C, 0, 0x08045F08 }, { 0x1B7D, 0, 0x08045F34 }, + { 0x1B7E, 0, 0x08045F40 }, { 0x1B7F, 0, 0x08045F74 }, { 0x1B80, 0, 0x08045FA8 }, { 0x1B81, 0, 0x08045FD4 }, + { 0x1B89, 0, 0x08045FE0 }, { 0x1B8A, 0, 0x08045FF0 }, { 0x1B8B, 0, 0x08046038 }, { 0x1B8C, 0, 0x08046060 }, + { 0x1B8D, 0, 0x08046098 }, { 0x1B8E, 0, 0x080460D4 }, { 0x1B8F, 0, 0x08046110 }, { 0x1B90, 0, 0x08046150 }, + { 0x1B91, 0, 0x0804618C }, { 0x1B92, 0, 0x080461CC }, { 0x1B93, 0, 0x08046208 }, { 0x1B94, 0, 0x0804622C }, + { 0x1B95, 0, 0x0804626C }, { 0x1B96, 0, 0x080462A8 }, { 0x1B98, 0, 0x080462B4 }, { 0x1B9E, 0, 0x08046300 }, + { 0x1B9F, 0, 0x08046374 }, { 0x1BA0, 0, 0x080463FC }, { 0x1BA1, 0, 0x08046480 }, { 0x1BA2, 0, 0x08046594 }, + { 0x1BA4, 0, 0x080465C4 }, { 0x1BA5, 0, 0x08046654 }, { 0x1BA6, 0, 0x08046684 }, { 0x1BA7, 0, 0x080466D4 }, + { 0x1BA8, 0, 0x08046760 }, { 0x1BAC, 0, 0x080467E8 }, { 0x1BB2, 0, 0x08046848 }, { 0x1BB3, 0, 0x08046888 }, + { 0x1BB4, 0, 0x080468C4 }, { 0x1BB5, 0, 0x08046904 }, { 0x1BB6, 0, 0x08046944 }, { 0x1C00, 0, 0x08046984 }, + { 0x1C01, 0, 0x08046A4C }, { 0x1C02, 0, 0x08046AB8 }, { 0x1C03, 0, 0x08046BA8 }, { 0x1C04, 0, 0x08046C10 }, + { 0x1C05, 0, 0x08046D68 }, { 0x1C06, 0, 0x08046E44 }, { 0x1C07, 0, 0x08046EAC }, { 0x1C08, 0, 0x08046F0C }, + { 0x1C09, 0, 0x08046F5C }, { 0x1C0A, 0, 0x08046F94 }, { 0x1C0B, 0, 0x08047014 }, { 0x1C0C, 0, 0x080470D4 }, + { 0x1C0D, 0, 0x08047118 }, { 0x1C0E, 0, 0x08047130 }, { 0x1C0F, 0, 0x08047148 }, { 0x1C10, 0, 0x08047164 }, + { 0x1C11, 0, 0x0804717C }, { 0x1C12, 0, 0x0804719C }, { 0x1C13, 0, 0x080471BC }, { 0x1C14, 0, 0x080471D4 }, + { 0x1C15, 0, 0x080471F0 }, { 0x1C16, 0, 0x08047214 }, { 0x1C17, 0, 0x0804730C }, { 0x1C18, 0, 0x0804734C }, + { 0x1D00, 0, 0x080473A4 }, { 0x1D01, 0, 0x08047414 }, { 0x1D02, 0, 0x08047524 }, { 0x1D03, 0, 0x0804758C }, + { 0x1D04, 0, 0x08047644 }, { 0x1D05, 0, 0x08047678 }, { 0x1D06, 0, 0x080476D0 }, { 0x1D07, 0, 0x080476F8 }, + { 0x1D08, 0, 0x08047728 }, { 0x1D09, 0, 0x08047788 }, { 0x1D0A, 0, 0x080477C0 }, { 0x1D0B, 0, 0x080477F4 }, + { 0x1D0C, 0, 0x08047808 }, { 0x1D0D, 0, 0x08047820 }, { 0x1D11, 0, 0x08047844 }, { 0x1D12, 0, 0x08047890 }, + { 0x1D13, 0, 0x080478D8 }, { 0x1D14, 0, 0x08047920 }, { 0x1D15, 0, 0x0804796C }, { 0x1D16, 0, 0x080479B4 }, + { 0x1D17, 0, 0x080479FC }, { 0x1F40, 0, 0x08047A20 }, { 0x1F41, 0, 0x08047ABC }, { 0x1F42, 0, 0x08047B20 }, + { 0x1F43, 0, 0x08047B94 }, { 0x1F44, 0, 0x08047BD8 }, { 0x1F45, 0, 0x08047C40 }, { 0x1F46, 0, 0x08047CB4 }, + { 0x1F47, 0, 0x08047D1C }, { 0x1F48, 0, 0x08047D88 }, { 0x1F49, 0, 0x08047DA8 }, { 0x1F4A, 0, 0x08047E48 }, + { 0x1F4B, 0, 0x08047F30 }, { 0x1F4C, 0, 0x08047F88 }, { 0x1F4D, 0, 0x08048014 }, { 0x1F4E, 0, 0x080480E0 }, + { 0x1F4F, 0, 0x0804819C }, { 0x1F50, 0, 0x08048280 }, { 0x1F51, 0, 0x080482E4 }, { 0x1F52, 0, 0x0804833C }, + { 0x1F53, 0, 0x080483B8 }, { 0x1F54, 0, 0x08048430 }, { 0x1F55, 0, 0x080484AC }, { 0x1F56, 0, 0x080484F8 }, + { 0x1F5F, 0, 0x0804857C }, { 0x1F60, 0, 0x0804859C }, { 0x1F61, 0, 0x080485D4 }, { 0x1F62, 0, 0x08048604 }, + { 0x1F63, 0, 0x0804862C }, { 0x1F64, 0, 0x0804866C }, { 0x1F65, 0, 0x080486A4 }, { 0x1F66, 0, 0x080486E0 }, + { 0x1F67, 0, 0x08048708 }, { 0x1F68, 0, 0x08048774 }, { 0x1F69, 0, 0x080487A4 }, { 0x1F6A, 0, 0x080487E0 }, + { 0x1F6B, 0, 0x08048810 }, { 0x1F6C, 0, 0x08048864 }, { 0x1F6D, 0, 0x08048898 }, { 0x1F6E, 0, 0x08048960 }, + { 0x1F6F, 0, 0x08048990 }, { 0x1F70, 0, 0x080489E8 }, { 0x1F71, 0, 0x08048A44 }, { 0x1F72, 0, 0x08048AB8 }, + { 0x1F73, 0, 0x08048AE8 }, { 0x1F74, 0, 0x08048B94 }, { 0x1F75, 0, 0x08048BB0 }, { 0x1FA4, 0, 0x08048BD8 }, + { 0x1FA5, 0, 0x08048C14 }, { 0x1FA6, 0, 0x08048CF8 }, { 0x1FA7, 0, 0x08048D40 }, { 0x1FA8, 0, 0x08048D88 }, + { 0x1FA9, 0, 0x08048DF4 }, { 0x1FAA, 0, 0x08048E68 }, { 0x1FAB, 0, 0x08048EE0 }, { 0x1FAC, 0, 0x08048FB4 }, + { 0x1FAD, 0, 0x08049034 }, { 0x1FAE, 0, 0x08049068 }, { 0x1FAF, 0, 0x080491B0 }, { 0x1FB0, 0, 0x0804927C }, + { 0x1FB1, 0, 0x080492C8 }, { 0x1FB2, 0, 0x08049318 }, { 0x1FB3, 0, 0x08049384 }, { 0x1FB4, 0, 0x08049424 }, + { 0x1FB5, 0, 0x0804951C }, { 0x1FB6, 0, 0x08049558 }, { 0x1FB7, 0, 0x08049598 }, { 0x1FB8, 0, 0x080495B8 }, + { 0x1FB9, 0, 0x080495D0 }, { 0x1FBA, 0, 0x080495E8 }, { 0x1FBB, 0, 0x08049614 }, { 0x1FBC, 0, 0x0804963C }, + { 0x1FBD, 0, 0x08049688 }, { 0x1FBE, 0, 0x080496DC }, { 0x1FBF, 0, 0x08049758 }, { 0x1FC0, 0, 0x080497BC }, + { 0x1FC1, 0, 0x080497E4 }, { 0x1FC2, 0, 0x0804982C }, { 0x1FC3, 0, 0x080498A0 }, { 0x1FC4, 0, 0x08049920 }, + { 0x1FC5, 0, 0x08049940 }, { 0x1FC6, 0, 0x08049A0C }, { 0x1FC7, 0, 0x08049A38 }, { 0x1FC8, 0, 0x08049AA0 }, + { 0x1FC9, 0, 0x08049AB8 }, { 0x1FCA, 0, 0x08049AF0 }, { 0x1FCB, 0, 0x08049B74 }, { 0x1FCC, 0, 0x08049BD0 }, + { 0x1FCD, 0, 0x08049C34 }, { 0x1FCE, 0, 0x08049D14 }, { 0x1FCF, 0, 0x08049D70 }, { 0x1FD0, 0, 0x08049DAC }, + { 0x1FD1, 0, 0x08049E08 }, { 0x1FD2, 0, 0x08049E24 }, { 0x1FD3, 0, 0x08049E44 }, { 0x1FD4, 0, 0x08049E88 }, + { 0x1FD5, 0, 0x08049EB8 }, { 0x1FD6, 0, 0x08049F00 }, { 0x1FD7, 0, 0x08049F3C }, { 0x1FD8, 0, 0x08049F90 }, + { 0x1FD9, 0, 0x08049FC4 }, { 0x1FDA, 0, 0x0804A018 }, { 0x1FDB, 0, 0x0804A050 }, { 0x1FDC, 0, 0x0804A0BC }, + { 0x1FDD, 0, 0x0804A0F0 }, { 0x1FDE, 0, 0x0804A11C }, { 0x1FDF, 0, 0x0804A14C }, { 0x1FE0, 0, 0x0804A1A0 }, + { 0x1FE1, 0, 0x0804A1D4 }, { 0x1FE2, 0, 0x0804A210 }, { 0x1FE3, 0, 0x0804A244 }, { 0x1FE4, 0, 0x0804A290 }, + { 0x1FE5, 0, 0x0804A2C8 }, { 0x1FE6, 0, 0x0804A334 }, { 0x1FE7, 0, 0x0804A36C }, { 0x1FE8, 0, 0x0804A3EC }, + { 0x1FE9, 0, 0x0804A420 }, { 0x1FEA, 0, 0x0804A484 }, { 0x1FEB, 0, 0x0804A4B8 }, { 0x1FEC, 0, 0x0804A51C }, + { 0x1FED, 0, 0x0804A554 }, { 0x1FEE, 0, 0x0804A59C }, { 0x1FEF, 0, 0x0804A5D0 }, { 0x1FF0, 0, 0x0804A620 }, + { 0x1FF1, 0, 0x0804A658 }, { 0x1FF2, 0, 0x0804A6C0 }, { 0x1FF3, 0, 0x0804A6F4 }, { 0x1FF4, 0, 0x0804A74C }, + { 0x1FF5, 0, 0x0804A788 }, { 0x1FF6, 0, 0x0804A800 }, { 0x1FF7, 0, 0x0804A834 }, { 0x1FF8, 0, 0x0804A888 }, + { 0x1FF9, 0, 0x0804A8B8 }, { 0x1FFA, 0, 0x0804A908 }, { 0x1FFB, 0, 0x0804A940 }, { 0x1FFC, 0, 0x0804A970 }, + { 0x1FFD, 0, 0x0804A9A4 }, { 0x1FFE, 0, 0x0804AA00 }, { 0x1FFF, 0, 0x0804AA60 }, { 0x2000, 0, 0x0804AAA0 }, + { 0x2001, 0, 0x0804AACC }, { 0x2002, 0, 0x0804AB00 }, { 0x2003, 0, 0x0804AB60 }, { 0x2004, 0, 0x0804ABA0 }, + { 0x2005, 0, 0x0804ACE0 }, { 0x2006, 0, 0x0804ADB4 }, { 0x2007, 0, 0x0804AE8C }, { 0x2008, 0, 0x0804AEE0 }, + { 0x2009, 0, 0x0804AEF8 }, { 0x200A, 0, 0x0804AF10 }, { 0x200B, 0, 0x0804AFAC }, { 0x200C, 0, 0x0804B024 }, + { 0x200D, 0, 0x0804B058 }, { 0x200E, 0, 0x0804B0D0 }, { 0x200F, 0, 0x0804B144 }, { 0x2010, 0, 0x0804B168 }, + { 0x2011, 0, 0x0804B1B4 }, { 0x2012, 0, 0x0804B1F8 }, { 0x2013, 0, 0x0804B260 }, { 0x2014, 0, 0x0804B298 }, + { 0x2015, 0, 0x0804B300 }, { 0x2016, 0, 0x0804B338 }, { 0x2017, 0, 0x0804B350 }, { 0x201D, 0, 0x0804B3B0 }, + { 0x201E, 0, 0x0804B3F8 }, { 0x201F, 0, 0x0804B508 }, { 0x2020, 0, 0x0804B58C }, { 0x2021, 0, 0x0804B5F8 }, + { 0x2022, 0, 0x0804B68C }, { 0x2023, 0, 0x0804B6E4 }, { 0x2024, 0, 0x0804B6F0 }, { 0x2026, 0, 0x0804B6FC }, + { 0x2027, 0, 0x0804B71C }, { 0x2028, 0, 0x0804B744 }, { 0x2029, 0, 0x0804B758 }, { 0x202A, 0, 0x0804B770 }, + { 0x202B, 0, 0x0804B7C4 }, { 0x202C, 0, 0x0804B81C }, { 0x202D, 0, 0x0804B860 }, { 0x202E, 0, 0x0804B8A8 }, + { 0x202F, 0, 0x0804B908 }, { 0x2030, 0, 0x0804B93C }, { 0x2031, 0, 0x0804B9B8 }, { 0x2032, 0, 0x0804BA20 }, + { 0x2033, 0, 0x0804BA9C }, { 0x2034, 0, 0x0804BAEC }, { 0x2035, 0, 0x0804BB34 }, { 0x2036, 0, 0x0804BB7C }, + { 0x2037, 0, 0x0804BBAC }, { 0x2038, 0, 0x0804BBDC }, { 0x2039, 0, 0x0804BC20 }, { 0x203A, 0, 0x0804BC98 }, + { 0x203B, 0, 0x0804BCF0 }, { 0x203C, 0, 0x0804BD40 }, { 0x203D, 0, 0x0804BD5C }, { 0x203E, 0, 0x0804BDAC }, + { 0x203F, 0, 0x0804BE24 }, { 0x2040, 0, 0x0804BE4C }, { 0x2041, 0, 0x0804BEB8 }, { 0x2042, 0, 0x0804BEEC }, + { 0x2043, 0, 0x0804BF08 }, { 0x2044, 0, 0x0804BF38 }, { 0x2045, 0, 0x0804BF74 }, { 0x2046, 0, 0x0804BFB4 }, + { 0x2047, 0, 0x0804C028 }, { 0x2048, 0, 0x0804C08C }, { 0x2049, 0, 0x0804C0BC }, { 0x204A, 0, 0x0804C0D8 }, + { 0x204B, 0, 0x0804C114 }, { 0x204C, 0, 0x0804C144 }, { 0x204D, 0, 0x0804C180 }, { 0x204E, 0, 0x0804C204 }, + { 0x206C, 0, 0x0804C264 }, { 0x206D, 0, 0x0804C2A8 }, { 0x206E, 0, 0x0804C2F8 }, { 0x206F, 0, 0x0804C338 }, + { 0x2070, 0, 0x0804C384 }, { 0x2076, 0, 0x0804C390 }, { 0x2077, 0, 0x0804C3C0 }, { 0x2078, 0, 0x0804C404 }, + { 0x2079, 0, 0x0804C480 }, { 0x2080, 0, 0x0804C4C4 }, { 0x2081, 0, 0x0804C5B4 }, { 0x2082, 0, 0x0804C5FC }, + { 0x2083, 0, 0x0804C630 }, { 0x208A, 0, 0x0804C674 }, { 0x208B, 0, 0x0804C6BC }, { 0x208C, 0, 0x0804C708 }, + { 0x208D, 0, 0x0804C7B4 }, { 0x208E, 0, 0x0804C7FC }, { 0x2093, 0, 0x0804C8A4 }, { 0x2094, 0, 0x0804C8C0 }, + { 0x2095, 0, 0x0804C8E8 }, { 0x20B0, 0, 0x0804C920 }, { 0x20B1, 0, 0x0804C984 }, { 0x20B2, 0, 0x0804CA38 }, + { 0x20B3, 0, 0x0804CB34 }, { 0x20B4, 0, 0x0804CC18 }, { 0x20B5, 0, 0x0804CD10 }, { 0x20B6, 0, 0x0804CDD4 }, + { 0x20B7, 0, 0x0804CE8C }, { 0x20B8, 0, 0x0804CF48 }, { 0x20B9, 0, 0x0804CFA4 }, { 0x20BA, 0, 0x0804D018 }, + { 0x20BB, 0, 0x0804D084 }, { 0x20BC, 0, 0x0804D0EC }, { 0x20BD, 0, 0x0804D158 }, { 0x20BE, 0, 0x0804D1C0 }, + { 0x20BF, 0, 0x0804D230 }, { 0x20C0, 0, 0x0804D294 }, { 0x20C1, 0, 0x0804D300 }, { 0x20C2, 0, 0x0804D380 }, + { 0x20C3, 0, 0x0804D3F8 }, { 0x20C4, 0, 0x0804D460 }, { 0x20C5, 0, 0x0804D4AC }, { 0x20C6, 0, 0x0804D52C }, + { 0x20C7, 0, 0x0804D590 }, { 0x20D0, 0, 0x0804D5FC }, { 0x20D1, 0, 0x0804D654 }, { 0x20D2, 0, 0x0804D6C8 }, + { 0x20D4, 0, 0x0804D6EC }, { 0x20D5, 0, 0x0804D75C }, { 0x20D6, 0, 0x0804D7B4 }, { 0x20D7, 0, 0x0804D834 }, + { 0x20D8, 0, 0x0804D8B0 }, { 0x20D9, 0, 0x0804D93C }, { 0x20DA, 0, 0x0804D99C }, { 0x20DB, 0, 0x0804D9FC }, + { 0x20DC, 0, 0x0804DA74 }, { 0x20DD, 0, 0x0804DB20 }, { 0x20DE, 0, 0x0804DBB0 }, { 0x20DF, 0, 0x0804DC18 }, + { 0x20E0, 0, 0x0804DC90 }, { 0x20E1, 0, 0x0804DCFC }, { 0x20E2, 0, 0x0804DD84 }, { 0x20E3, 0, 0x0804DE0C }, + { 0x20E4, 0, 0x0804DEA0 }, { 0x20E5, 0, 0x0804DF10 }, { 0x20E6, 0, 0x0804DF78 }, { 0x20E7, 0, 0x0804DFEC }, + { 0x20F3, 0, 0x0804E05C }, { 0x20F7, 0, 0x0804E0C0 }, { 0x20F8, 0, 0x0804E134 }, { 0x20F9, 0, 0x0804E1AC }, + { 0x2103, 0, 0x0804E220 }, { 0x2104, 0, 0x0804E288 }, { 0x2105, 0, 0x0804E2CC }, { 0x2106, 0, 0x0804E320 }, + { 0x2107, 0, 0x0804E364 }, { 0x2108, 0, 0x0804E3BC }, { 0x2109, 0, 0x0804E408 }, { 0x210A, 0, 0x0804E458 }, + { 0x210B, 0, 0x0804E4B0 }, { 0x210C, 0, 0x0804E4EC }, { 0x210D, 0, 0x0804E52C }, { 0x210E, 0, 0x0804E578 }, + { 0x210F, 0, 0x0804E5D0 }, { 0x2110, 0, 0x0804E618 }, { 0x2111, 0, 0x0804E660 }, { 0x2112, 0, 0x0804E6BC }, + { 0x2113, 0, 0x0804E70C }, { 0x2114, 0, 0x0804E75C }, { 0x2115, 0, 0x0804E7A8 }, { 0x2116, 0, 0x0804E7F0 }, + { 0x2134, 0, 0x0804E83C }, { 0x2135, 0, 0x0804E880 }, { 0x2136, 0, 0x0804E8CC }, { 0x2137, 0, 0x0804E91C }, + { 0x2138, 0, 0x0804E96C }, { 0x2139, 0, 0x0804E9B4 }, { 0x213A, 0, 0x0804E9FC }, { 0x213B, 0, 0x0804EA38 }, + { 0x213C, 0, 0x0804EA88 }, { 0x213D, 0, 0x0804EAD0 }, { 0x213E, 0, 0x0804EB28 }, { 0x213F, 0, 0x0804EB80 }, + { 0x2140, 0, 0x0804EBD0 }, { 0x2141, 0, 0x0804EC1C }, { 0x2142, 0, 0x0804EC60 }, { 0x2143, 0, 0x0804ECAC }, + { 0x2144, 0, 0x0804ECF0 }, { 0x2145, 0, 0x0804ED40 }, { 0x2146, 0, 0x0804ED88 }, { 0x2147, 0, 0x0804EDDC }, + { 0x2152, 0, 0x0804EE34 }, { 0x2153, 0, 0x0804EE78 }, { 0x2154, 0, 0x0804EECC }, { 0x2156, 0, 0x0804EF1C }, + { 0x2157, 0, 0x0804EF64 }, { 0x2158, 0, 0x0804EFC4 }, { 0x2159, 0, 0x0804F014 }, { 0x215A, 0, 0x0804F05C }, + { 0x215B, 0, 0x0804F0C0 }, { 0x215D, 0, 0x0804F124 }, { 0x215E, 0, 0x0804F178 }, { 0x215F, 0, 0x0804F184 }, + { 0x2160, 0, 0x0804F1D8 }, { 0x2161, 0, 0x0804F234 }, { 0x2162, 0, 0x0804F298 }, { 0x2163, 0, 0x0804F2A4 }, + { 0x2164, 0, 0x0804F2F8 }, { 0x2165, 0, 0x0804F358 }, { 0x2166, 0, 0x0804F3B0 }, { 0x2167, 0, 0x0804F400 }, + { 0x2168, 0, 0x0804F458 }, { 0x2169, 0, 0x0804F4B0 }, { 0x216A, 0, 0x0804F504 }, { 0x216B, 0, 0x0804F554 }, + { 0x216C, 0, 0x0804F5A0 }, { 0x216D, 0, 0x0804F5F8 }, { 0x216E, 0, 0x0804F658 }, { 0x216F, 0, 0x0804F6B8 }, + { 0x2170, 0, 0x0804F710 }, { 0x2171, 0, 0x0804F764 }, { 0x2172, 0, 0x0804F7BC }, { 0x2173, 0, 0x0804F814 }, + { 0x2174, 0, 0x0804F870 }, { 0x2198, 0, 0x0804F8CC }, { 0x2199, 0, 0x0804F920 }, { 0x219A, 0, 0x0804F978 }, + { 0x219B, 0, 0x0804F9D0 }, { 0x219C, 0, 0x0804FA2C }, { 0x219D, 0, 0x0804FA80 }, { 0x219E, 0, 0x0804FAD0 }, + { 0x219F, 0, 0x0804FB28 }, { 0x21A0, 0, 0x0804FB80 }, { 0x21A1, 0, 0x0804FBD8 }, { 0x21A2, 0, 0x0804FC30 }, + { 0x21A3, 0, 0x0804FC88 }, { 0x21A4, 0, 0x0804FCD8 }, { 0x21A5, 0, 0x0804FD30 }, { 0x21A6, 0, 0x0804FD84 }, + { 0x21A7, 0, 0x0804FDDC }, { 0x21A8, 0, 0x0804FE34 }, { 0x21A9, 0, 0x0804FE88 }, { 0x21AA, 0, 0x0804FED8 }, + { 0x21AB, 0, 0x0804FF30 }, { 0x21AC, 0, 0x0804FF84 }, { 0x21AD, 0, 0x0804FFDC }, { 0x21AE, 0, 0x08050038 }, + { 0x21AF, 0, 0x08050094 }, { 0x21B0, 0, 0x080500EC }, { 0x21B1, 0, 0x08050140 }, { 0x21B2, 0, 0x08050198 }, + { 0x21B3, 0, 0x080501F4 }, { 0x21B4, 0, 0x0805024C }, { 0x21B5, 0, 0x080502A4 }, { 0x21B6, 0, 0x080502F8 }, + { 0x21B7, 0, 0x08050350 }, { 0x21B8, 0, 0x080503A8 }, { 0x21B9, 0, 0x08050400 }, { 0x21BA, 0, 0x0805045C }, + { 0x21CA, 0, 0x080504AC }, { 0x21CB, 0, 0x080504EC }, { 0x21CC, 0, 0x08050528 }, { 0x21CD, 0, 0x08050580 }, + { 0x21CE, 0, 0x080505C8 }, { 0x21CF, 0, 0x08050604 }, { 0x21D0, 0, 0x08050648 }, { 0x21D1, 0, 0x08050680 }, + { 0x21D2, 0, 0x080506CC }, { 0x21D3, 0, 0x08050700 }, { 0x21D4, 0, 0x0805075C }, { 0x21D5, 0, 0x080507A8 }, + { 0x21D6, 0, 0x080507F0 }, { 0x21D7, 0, 0x08050840 }, { 0x21D8, 0, 0x08050884 }, { 0x21D9, 0, 0x080508CC }, + { 0x21DA, 0, 0x08050910 }, { 0x21DB, 0, 0x0805094C }, { 0x21DC, 0, 0x08050998 }, { 0x21DD, 0, 0x080509D0 }, + { 0x21FC, 0, 0x08050A20 }, { 0x21FD, 0, 0x08050A50 }, { 0x21FE, 0, 0x08050A74 }, { 0x21FF, 0, 0x08050ABC }, + { 0x2200, 0, 0x08050ADC }, { 0x2201, 0, 0x08050AF0 }, { 0x2202, 0, 0x08050B0C }, { 0x2203, 0, 0x08050B44 }, + { 0x2204, 0, 0x08050B74 }, { 0x2205, 0, 0x08050B98 }, { 0x2206, 0, 0x08050BCC }, { 0x2207, 0, 0x08050BF8 }, + { 0x2208, 0, 0x08050C48 }, { 0x2209, 0, 0x08050CB0 }, { 0x220A, 0, 0x08050CC4 }, { 0x220B, 0, 0x08050CE0 }, + { 0x220C, 0, 0x08050D10 }, { 0x220D, 0, 0x08050D44 }, { 0x220E, 0, 0x08050D98 }, { 0x220F, 0, 0x08050DE0 }, + { 0x2210, 0, 0x08050E24 }, { 0x2211, 0, 0x08050E44 }, { 0x2212, 0, 0x08050E78 }, { 0x2213, 0, 0x08050E8C }, + { 0x2214, 0, 0x08050ECC }, { 0x2215, 0, 0x08050F14 }, { 0x2216, 0, 0x08050F44 }, { 0x2217, 0, 0x08050F6C }, + { 0x2218, 0, 0x08050FB4 }, { 0x2219, 0, 0x08050FDC }, { 0x221A, 0, 0x0805100C }, { 0x221B, 0, 0x08051034 }, + { 0x221C, 0, 0x08051054 }, { 0x221D, 0, 0x08051080 }, { 0x221E, 0, 0x080510A0 }, { 0x221F, 0, 0x080510DC }, + { 0x2220, 0, 0x08051104 }, { 0x2221, 0, 0x08051138 }, { 0x2222, 0, 0x0805114C }, { 0x2223, 0, 0x0805117C }, + { 0x2224, 0, 0x080511A8 }, { 0x2225, 0, 0x080511E4 }, { 0x2226, 0, 0x0805122C }, { 0x2227, 0, 0x08051258 }, + { 0x2228, 0, 0x080512AC }, { 0x2229, 0, 0x080512D8 }, { 0x222A, 0, 0x08051338 }, { 0x222B, 0, 0x08051374 }, + { 0x2328, 0, 0x080513C4 }, { 0x2329, 0, 0x08051410 }, { 0x232A, 0, 0x08051454 }, { 0x232B, 0, 0x080514B4 }, + { 0x232C, 0, 0x08051514 }, { 0x232D, 0, 0x08051564 }, { 0x232E, 0, 0x080515A8 }, { 0x232F, 0, 0x080515E4 }, + { 0x2330, 0, 0x08051630 }, { 0x2331, 0, 0x08051680 }, { 0x2332, 0, 0x08051700 }, { 0x2333, 0, 0x08051750 }, + { 0x2334, 0, 0x080517AC }, { 0x2335, 0, 0x08051814 }, { 0x2336, 0, 0x08051868 }, { 0x2337, 0, 0x080518C8 }, + { 0x2338, 0, 0x08051914 }, { 0x2339, 0, 0x08051948 }, { 0x233A, 0, 0x080519A4 }, { 0x233B, 0, 0x080519D8 }, + { 0x233C, 0, 0x08051A10 }, { 0x233D, 0, 0x08051A70 }, { 0x233E, 0, 0x08051AA4 }, { 0x233F, 0, 0x08051ADC }, + { 0x2340, 0, 0x08051B10 }, { 0x2341, 0, 0x08051B54 }, { 0x2342, 0, 0x08051BC8 }, { 0x2343, 0, 0x08051C38 }, + { 0x2344, 0, 0x08051C70 }, { 0x2345, 0, 0x08051CC0 }, { 0x2346, 0, 0x08051CFC }, { 0x2347, 0, 0x08051D24 }, + { 0x2348, 0, 0x08051DA4 }, { 0x2349, 0, 0x08051DE4 }, { 0x234A, 0, 0x08051E44 }, { 0x234B, 0, 0x08051E84 }, + { 0x234C, 0, 0x08051EA4 }, { 0x234D, 0, 0x08051EC4 }, { 0x234E, 0, 0x08051F04 }, { 0x234F, 0, 0x08051F30 }, + { 0x2350, 0, 0x08051F48 }, { 0x2351, 0, 0x08051F7C }, { 0x2352, 0, 0x08051FA8 }, { 0x2353, 0, 0x08051FC0 }, + { 0x2354, 0, 0x08051FE4 }, { 0x2355, 0, 0x08052004 }, { 0x2356, 0, 0x08052020 }, { 0x2357, 0, 0x08052048 }, + { 0x2358, 0, 0x080520AC }, { 0x2359, 0, 0x080520DC }, { 0x235A, 0, 0x08052104 }, { 0x235B, 0, 0x08052138 }, + { 0x235C, 0, 0x0805215C }, { 0x235D, 0, 0x08052188 }, { 0x235E, 0, 0x080522B4 }, { 0x235F, 0, 0x080522DC }, + { 0x2360, 0, 0x08052334 }, { 0x2361, 0, 0x080523A8 }, { 0x2362, 0, 0x08052400 }, { 0x2363, 0, 0x08052450 }, + { 0x2364, 0, 0x0805250C }, { 0x2365, 0, 0x08052644 }, { 0x2366, 0, 0x080526C0 }, { 0x2367, 0, 0x08052718 }, + { 0x2368, 0, 0x080527E4 }, { 0x2369, 0, 0x080528E0 }, { 0x236A, 0, 0x08052930 }, { 0x236B, 0, 0x08052A04 }, + { 0x236C, 0, 0x08052A40 }, { 0x236D, 0, 0x08052A8C }, { 0x236E, 0, 0x08052ABC }, { 0x236F, 0, 0x08052AD8 }, + { 0x2370, 0, 0x08052B34 }, { 0x2371, 0, 0x08052B64 }, { 0x2372, 0, 0x08052BE0 }, { 0x2373, 0, 0x08052BF8 }, + { 0x2374, 0, 0x08052C3C }, { 0x2375, 0, 0x08052C80 }, { 0x2376, 0, 0x08052CE4 }, { 0x2377, 0, 0x08052D08 }, + { 0x2378, 0, 0x08052D54 }, { 0x2710, 0, 0x08052D8C }, { 0x2711, 0, 0x08052E54 }, { 0x2712, 0, 0x08052EA4 }, + { 0x2713, 0, 0x08053008 }, { 0x2714, 0, 0x0805305C }, { 0x2715, 0, 0x080531A0 }, { 0x2716, 0, 0x08053220 }, + { 0x2717, 0, 0x08053284 }, { 0x2718, 0, 0x080532BC }, { 0x2719, 0, 0x08053300 }, { 0x271A, 0, 0x0805332C }, + { 0x271B, 0, 0x08053424 }, { 0x271C, 0, 0x080534AC }, { 0x271D, 0, 0x08053524 }, { 0x271E, 0, 0x0805358C }, + { 0x271F, 0, 0x08053608 }, { 0x2720, 0, 0x0805367C }, { 0x2721, 0, 0x08053718 }, { 0x2722, 0, 0x0805374C }, + { 0x2723, 0, 0x080537A8 }, { 0x2724, 0, 0x080537F4 }, { 0x2725, 0, 0x08053850 }, { 0x2726, 0, 0x080538A8 }, + { 0x2727, 0, 0x08053914 }, { 0x2728, 0, 0x08053974 }, { 0x2729, 0, 0x08053A34 }, { 0x272A, 0, 0x08053A4C }, + { 0x272B, 0, 0x08053A90 }, { 0x272C, 0, 0x08053AB0 }, { 0x272D, 0, 0x08053AF4 }, { 0x272E, 0, 0x08053B3C }, + { 0x272F, 0, 0x08053B9C }, { 0x2730, 0, 0x08053BCC }, { 0x2731, 0, 0x08053C04 }, { 0x2732, 0, 0x08053C70 }, + { 0x2733, 0, 0x08053CD8 }, { 0x2734, 0, 0x08053D4C }, { 0x2735, 0, 0x08053DD4 }, { 0x2736, 0, 0x08053E48 }, + { 0x2737, 0, 0x08053EA8 }, { 0x2738, 0, 0x08053F9C }, { 0x2739, 0, 0x08054038 }, { 0x273A, 0, 0x080540A0 }, + { 0x273B, 0, 0x0805411C }, { 0x273C, 0, 0x08054188 }, { 0x273D, 0, 0x080541D0 }, { 0x273E, 0, 0x08054278 }, + { 0x273F, 0, 0x080542A0 }, { 0x2740, 0, 0x0805432C }, { 0x2741, 0, 0x080543CC }, { 0x2742, 0, 0x08054478 }, + { 0x2743, 0, 0x080544F8 }, { 0x2744, 0, 0x08054580 }, { 0x2745, 0, 0x08054630 }, { 0x2746, 0, 0x08054674 }, + { 0x2747, 0, 0x080546C4 }, { 0x2748, 0, 0x08054784 }, { 0x2749, 0, 0x080547EC }, { 0x274A, 0, 0x0805483C }, + { 0x274B, 0, 0x0805489C }, { 0x274C, 0, 0x08054924 }, { 0x274D, 0, 0x0805494C }, { 0x274E, 0, 0x080549E0 }, + { 0x274F, 0, 0x08054A90 }, { 0x2774, 0, 0x08054B24 }, { 0x2775, 0, 0x08054B7C }, { 0x2776, 0, 0x08054C30 }, + { 0x2777, 0, 0x08054C3C }, { 0x2778, 0, 0x08054CD0 }, { 0x2779, 0, 0x08054CDC }, { 0x277A, 0, 0x08054D00 }, + { 0x277B, 0, 0x08054DA4 }, { 0x277C, 0, 0x08054EC8 }, { 0x277D, 0, 0x08054F54 }, { 0x277E, 0, 0x08054FA0 }, + { 0x277F, 0, 0x08055004 }, { 0x2780, 0, 0x0805503C }, { 0x2781, 0, 0x080550B0 }, { 0x2782, 0, 0x08055110 }, + { 0x2783, 0, 0x08055138 }, { 0x2784, 0, 0x08055160 }, { 0x2785, 0, 0x08055194 }, { 0x2786, 0, 0x080551E0 }, + { 0x2787, 0, 0x08055224 }, { 0x2788, 0, 0x08055264 }, { 0x2789, 0, 0x080552A8 }, { 0x278A, 0, 0x080552E8 }, + { 0x278B, 0, 0x08055310 }, { 0x278C, 0, 0x0805535C }, { 0x278D, 0, 0x080553E0 }, { 0x278E, 0, 0x08055424 }, + { 0x278F, 0, 0x08055448 }, { 0x2790, 0, 0x08055470 }, { 0x2791, 0, 0x080554F0 }, { 0x2792, 0, 0x08055510 }, + { 0x2793, 0, 0x08055534 }, { 0x2794, 0, 0x080555BC }, { 0x2795, 0, 0x080555FC }, { 0x2796, 0, 0x0805565C }, + { 0x2797, 0, 0x08055688 }, { 0x2798, 0, 0x080556CC }, { 0x2799, 0, 0x08055700 }, { 0x279A, 0, 0x0805573C }, + { 0x279B, 0, 0x0805576C }, { 0x279C, 0, 0x080557B0 }, { 0x279D, 0, 0x08055804 }, { 0x279E, 0, 0x08055858 }, + { 0x279F, 0, 0x080558DC }, { 0x27A0, 0, 0x0805591C }, { 0x27A1, 0, 0x08055984 }, { 0x27A2, 0, 0x080559C0 }, + { 0x27A3, 0, 0x08055A10 }, { 0x27A4, 0, 0x08055A38 }, { 0x27A5, 0, 0x08055AB0 }, { 0x27A6, 0, 0x08055AE8 }, + { 0x27A7, 0, 0x08055B1C }, { 0x27A8, 0, 0x08055B60 }, { 0x27A9, 0, 0x08055BA8 }, { 0x27AA, 0, 0x08055BC0 }, + { 0x27AB, 0, 0x08055C10 }, { 0x27AC, 0, 0x08055C34 }, { 0x27AD, 0, 0x08055CAC }, { 0x27AE, 0, 0x08055CC4 }, + { 0x27D8, 0, 0x08055D0C }, { 0x27D9, 0, 0x08055D50 }, { 0x27DA, 0, 0x08055D94 }, { 0x27DB, 0, 0x08055DCC }, + { 0x27DC, 0, 0x08055E10 }, { 0x27DD, 0, 0x08055E50 }, { 0x27DE, 0, 0x08055ED0 }, { 0x27DF, 0, 0x08055F14 }, + { 0x27E0, 0, 0x08055F70 }, { 0x27E1, 0, 0x08056000 }, { 0x27E2, 0, 0x0805609C }, { 0x27E3, 0, 0x080560DC }, + { 0x27E4, 0, 0x080560F8 }, { 0x27E5, 0, 0x08056128 }, { 0x27E6, 0, 0x08056170 }, { 0x27E7, 0, 0x08056220 }, + { 0x27E8, 0, 0x0805627C }, { 0x27E9, 0, 0x080562D8 }, { 0x27EA, 0, 0x08056334 }, { 0x27EB, 0, 0x0805635C }, + { 0x27EC, 0, 0x080563B0 }, { 0x27ED, 0, 0x080563D8 }, { 0x27EE, 0, 0x0805643C }, { 0x27EF, 0, 0x08056468 }, + { 0x27F0, 0, 0x08056488 }, { 0x27F1, 0, 0x080564AC }, { 0x27F2, 0, 0x080564F4 }, { 0x27F3, 0, 0x0805653C }, + { 0x27F4, 0, 0x08056570 }, { 0x27F5, 0, 0x0805662C }, { 0x27F6, 0, 0x0805668C }, { 0x27F7, 0, 0x080566B0 }, + { 0x27F8, 0, 0x080566E4 }, { 0x27F9, 0, 0x08056708 }, { 0x27FA, 0, 0x08056734 }, { 0x283C, 0, 0x0805678C }, + { 0x283D, 0, 0x080567C4 }, { 0x2841, 0, 0x080567FC }, { 0x2842, 0, 0x08056840 }, { 0x2843, 0, 0x08056878 }, + { 0x2844, 0, 0x080568E0 }, { 0x2845, 0, 0x0805696C }, { 0x2846, 0, 0x080569BC }, { 0x2847, 0, 0x08056A18 }, + { 0x2848, 0, 0x08056A54 }, { 0x2849, 0, 0x08056AB0 }, { 0x284A, 0, 0x08056AF4 }, { 0x284B, 0, 0x08056B38 }, + { 0x284C, 0, 0x08056B88 }, { 0x284D, 0, 0x08056BCC }, { 0x284E, 0, 0x08056C2C }, { 0x284F, 0, 0x08056C7C }, + { 0x2850, 0, 0x08056CA8 }, { 0x2851, 0, 0x08056CF8 }, { 0x2852, 0, 0x08056D24 }, { 0x2853, 0, 0x08056D68 }, + { 0x2854, 0, 0x08056DC0 }, { 0x2855, 0, 0x08056E04 }, { 0x2856, 0, 0x08056E50 }, { 0x2857, 0, 0x08056E98 }, + { 0x2858, 0, 0x08056EFC }, { 0x2859, 0, 0x08056F44 }, { 0x285A, 0, 0x08056FA8 }, { 0x285B, 0, 0x08056FE8 }, + { 0x285C, 0, 0x08057014 }, { 0x285D, 0, 0x0805705C }, { 0x285E, 0, 0x08057088 }, { 0x285F, 0, 0x080570C8 }, + { 0x2860, 0, 0x080570FC }, { 0x2861, 0, 0x08057114 }, { 0x2862, 0, 0x08057174 }, { 0x2863, 0, 0x080571C0 }, + { 0x2864, 0, 0x0805722C }, { 0x2865, 0, 0x08057278 }, { 0x2866, 0, 0x080572E4 }, { 0x2867, 0, 0x08057328 }, + { 0x2868, 0, 0x08057358 }, { 0x2869, 0, 0x080573A4 }, { 0x286A, 0, 0x08057410 }, { 0x286B, 0, 0x08057454 }, + { 0x286C, 0, 0x08057484 }, { 0x286D, 0, 0x080574D0 }, { 0x286E, 0, 0x080574F8 }, { 0x286F, 0, 0x0805753C }, + { 0x2870, 0, 0x080575A8 }, { 0x2871, 0, 0x080575E4 }, { 0x2872, 0, 0x08057628 }, { 0x2873, 0, 0x0805765C }, + { 0x2874, 0, 0x080576B4 }, { 0x2875, 0, 0x080576D0 }, { 0x2876, 0, 0x08057728 }, { 0x2877, 0, 0x0805777C }, + { 0x2878, 0, 0x080577D4 }, { 0x2879, 0, 0x08057828 }, { 0x287A, 0, 0x08057890 }, { 0x287B, 0, 0x08057900 }, + { 0x287C, 0, 0x08057968 }, { 0x287D, 0, 0x080579B8 }, { 0x287E, 0, 0x080579E8 }, { 0x287F, 0, 0x08057A5C }, + { 0x2880, 0, 0x08057AA8 }, { 0x2881, 0, 0x08057B24 }, { 0x2882, 0, 0x08057B5C }, { 0x2883, 0, 0x08057B94 }, + { 0x2884, 0, 0x08057BC8 }, { 0x2885, 0, 0x08057BE0 }, { 0x2886, 0, 0x08057BF8 }, { 0x2887, 0, 0x08057C24 }, + { 0x2888, 0, 0x08057C5C }, { 0x2889, 0, 0x08057C88 }, { 0x288A, 0, 0x08057CB4 }, { 0x288B, 0, 0x08057CD4 }, + { 0x28A0, 0, 0x08057CF0 }, { 0x28A1, 0, 0x08057D20 }, { 0x28A2, 0, 0x08057D5C }, { 0x28A3, 0, 0x08057D94 }, + { 0x28A4, 0, 0x08057E80 }, { 0x28A5, 0, 0x08057F64 }, { 0x28A6, 0, 0x08057FA8 }, { 0x28A7, 0, 0x08058080 }, + { 0x28A8, 0, 0x080580B4 }, { 0x28A9, 0, 0x080580F4 }, { 0x28AA, 0, 0x08058130 }, { 0x28AB, 0, 0x08058160 }, + { 0x28AC, 0, 0x080581EC }, { 0x28AD, 0, 0x080582C0 }, { 0x28AF, 0, 0x080582DC }, { 0x28B0, 0, 0x080582F8 }, + { 0x28B1, 0, 0x08058340 }, { 0x28B2, 0, 0x080583A8 }, { 0x28B3, 0, 0x08058400 }, { 0x28B4, 0, 0x08058488 }, + { 0x28B5, 0, 0x080584E8 }, { 0x28B6, 0, 0x08058524 }, { 0x28B7, 0, 0x08058594 }, { 0x28B8, 0, 0x080585F4 }, + { 0x28B9, 0, 0x08058618 }, { 0x28BA, 0, 0x0805864C }, { 0x28BB, 0, 0x08058688 }, { 0x28BC, 0, 0x080586B8 }, + { 0x28BD, 0, 0x080586F8 }, { 0x28BE, 0, 0x0805871C }, { 0x28BF, 0, 0x08058760 }, { 0x28C0, 0, 0x0805878C }, + { 0x28C1, 0, 0x080587B4 }, { 0x28C2, 0, 0x0805881C }, { 0x28C3, 0, 0x08058880 }, { 0x28C4, 0, 0x080589EC }, + { 0x28C5, 0, 0x08058A60 }, { 0x28C6, 0, 0x08058A78 }, { 0x28C7, 0, 0x08058AC0 }, { 0x28C8, 0, 0x08058AF4 }, + { 0x28C9, 0, 0x08058B54 }, { 0x28CA, 0, 0x08058B9C }, { 0x28CB, 0, 0x08058BD4 }, { 0x28CC, 0, 0x08058C24 }, + { 0x28CD, 0, 0x08058C58 }, { 0x28CE, 0, 0x08058C6C }, { 0x28CF, 0, 0x08058C88 }, { 0x28D0, 0, 0x08058CCC }, + { 0x28D1, 0, 0x08058D1C }, { 0x28D2, 0, 0x08058D4C }, { 0x28D3, 0, 0x08058DA0 }, { 0x28D4, 0, 0x08058DF0 }, + { 0x28D5, 0, 0x08058E4C }, { 0x28D6, 0, 0x08058EE8 }, { 0x28D7, 0, 0x08058F10 }, { 0x28D8, 0, 0x08058F60 }, + { 0x28D9, 0, 0x0805901C }, { 0x28DA, 0, 0x08059030 }, { 0x28DB, 0, 0x08059154 }, { 0x28DC, 0, 0x08059184 }, + { 0x28DE, 0, 0x080591A8 }, { 0x28DF, 0, 0x080591E4 }, { 0x28E0, 0, 0x08059220 }, { 0x28E1, 0, 0x08059260 }, + { 0x28E2, 0, 0x080592C8 }, { 0x28E3, 0, 0x0805931C }, { 0x28E4, 0, 0x08059378 }, { 0x28E5, 0, 0x080593A4 }, + { 0x28E6, 0, 0x080593B8 }, { 0x28E7, 0, 0x080593FC }, { 0x28E8, 0, 0x08059420 }, { 0x28E9, 0, 0x0805945C }, + { 0x28EA, 0, 0x08059480 }, { 0x28EB, 0, 0x080594D4 }, { 0x28EC, 0, 0x08059564 }, { 0x28ED, 0, 0x080595B8 }, + { 0x28EE, 0, 0x080595F8 }, { 0x28EF, 0, 0x08059640 }, { 0x28F0, 0, 0x080596F8 }, { 0x28F1, 0, 0x08059754 }, + { 0x28F2, 0, 0x080597D4 }, { 0x28F3, 0, 0x08059814 }, { 0x28F4, 0, 0x080599B0 }, { 0x28F5, 0, 0x080599F8 }, + { 0x28F6, 0, 0x08059AC0 }, { 0x28F7, 0, 0x08059AEC }, { 0x28F8, 0, 0x08059B70 }, { 0x28F9, 0, 0x08059BDC }, + { 0x28FA, 0, 0x08059C00 }, { 0x28FB, 0, 0x08059C60 }, { 0x28FC, 0, 0x08059CBC }, { 0x28FD, 0, 0x08059DA0 }, + { 0x28FE, 0, 0x08059DB0 }, { 0x28FF, 0, 0x08059E2C }, { 0x2900, 0, 0x08059EC8 }, { 0x2901, 0, 0x08059EF4 }, + { 0x2902, 0, 0x08059F70 }, { 0x2903, 0, 0x08059FD0 }, { 0x2904, 0, 0x0805A04C }, { 0x2905, 0, 0x0805A24C }, + { 0x2906, 0, 0x0805A4F8 }, { 0x2907, 0, 0x0805A584 }, { 0x2908, 0, 0x0805A5C0 }, { 0x2909, 0, 0x0805A60C }, + { 0x290A, 0, 0x0805A640 }, { 0x290B, 0, 0x0805A6C8 }, { 0x290C, 0, 0x0805A9C0 }, { 0x290D, 0, 0x0805AD84 }, + { 0x290E, 0, 0x0805ADF8 }, { 0x290F, 0, 0x0805AE40 }, { 0x2910, 0, 0x0805AE74 }, { 0x2911, 0, 0x0805AF50 }, + { 0x2912, 0, 0x0805AFCC }, { 0x2913, 0, 0x0805B044 }, { 0x2914, 0, 0x0805B104 }, { 0x2915, 0, 0x0805B1F8 }, + { 0x2916, 0, 0x0805B224 }, { 0x2917, 0, 0x0805B244 }, { 0x2918, 0, 0x0805B2A0 }, { 0x2919, 0, 0x0805B2D0 }, + { 0x291A, 0, 0x0805B314 }, { 0x291B, 0, 0x0805B354 }, { 0x291C, 0, 0x0805B3B0 }, { 0x291D, 0, 0x0805B400 }, + { 0x291E, 0, 0x0805B454 }, { 0x291F, 0, 0x0805B494 }, { 0x2920, 0, 0x0805B4EC }, { 0x2921, 0, 0x0805B538 }, + { 0x2922, 0, 0x0805B58C }, { 0x2923, 0, 0x0805B600 }, { 0x2924, 0, 0x0805B65C }, { 0x2925, 0, 0x0805B738 }, + { 0x2926, 0, 0x0805B770 }, { 0x2927, 0, 0x0805B794 }, { 0x2928, 0, 0x0805B7C8 }, { 0x2929, 0, 0x0805B7EC }, + { 0x292A, 0, 0x0805B814 }, { 0x292B, 0, 0x0805B8C0 }, { 0x292C, 0, 0x0805B994 }, { 0x292D, 0, 0x0805BA44 }, + { 0x292E, 0, 0x0805BB14 }, { 0x292F, 0, 0x0805BB74 }, { 0x2930, 0, 0x0805BBEC }, { 0x2931, 0, 0x0805BC40 }, + { 0x2932, 0, 0x0805BCBC }, { 0x2933, 0, 0x0805BD3C }, { 0x2934, 0, 0x0805BDA4 }, { 0x2935, 0, 0x0805BDE0 }, + { 0x2936, 0, 0x0805BE20 }, { 0x2937, 0, 0x0805BE90 }, { 0x2938, 0, 0x0805BEE8 }, { 0x2939, 0, 0x0805BF5C }, + { 0x293A, 0, 0x0805BF80 }, { 0x293B, 0, 0x0805BFE4 }, { 0x293C, 0, 0x0805C00C }, { 0x293D, 0, 0x0805C094 }, + { 0x293E, 0, 0x0805C0EC }, { 0x293F, 0, 0x0805C168 }, { 0x2940, 0, 0x0805C1EC }, { 0x2941, 0, 0x0805C258 }, + { 0x2942, 0, 0x0805C2DC }, { 0x2943, 0, 0x0805C350 }, { 0x2944, 0, 0x0805C3B8 }, { 0x2945, 0, 0x0805C3F8 }, + { 0x2946, 0, 0x0805C44C }, { 0x2947, 0, 0x0805C470 }, { 0x2948, 0, 0x0805C4F0 }, { 0x2949, 0, 0x0805C518 }, + { 0x294A, 0, 0x0805C534 }, { 0x294B, 0, 0x0805C54C }, { 0x294C, 0, 0x0805C570 }, { 0x294D, 0, 0x0805C5A8 }, + { 0x294E, 0, 0x0805C680 }, { 0x294F, 0, 0x0805C740 }, { 0x2950, 0, 0x0805C794 }, { 0x2951, 0, 0x0805C7F4 }, + { 0x2952, 0, 0x0805C854 }, { 0x2953, 0, 0x0805C914 }, { 0x2954, 0, 0x0805C940 }, { 0x2955, 0, 0x0805C980 }, + { 0x2956, 0, 0x0805C9DC }, { 0x2957, 0, 0x0805CA08 }, { 0x2958, 0, 0x0805CA2C }, { 0x2959, 0, 0x0805CA48 }, + { 0x295A, 0, 0x0805CA6C }, { 0x295B, 0, 0x0805CAB4 }, { 0x295C, 0, 0x0805CB08 }, { 0x295D, 0, 0x0805CB24 }, + { 0x295E, 0, 0x0805CB44 }, { 0x295F, 0, 0x0805CB60 }, { 0x2960, 0, 0x0805CC3C }, { 0x2961, 0, 0x0805CD14 }, + { 0x2962, 0, 0x0805CD3C }, { 0x2968, 0, 0x0805CE60 }, { 0x2969, 0, 0x0805CE78 }, { 0x296A, 0, 0x0805CEF4 }, + { 0x296B, 0, 0x0805CF24 }, { 0x296C, 0, 0x0805CF64 }, { 0x296D, 0, 0x0805CF9C }, { 0x296E, 0, 0x0805CFB4 }, + { 0x296F, 0, 0x0805D018 }, { 0x2970, 0, 0x0805D08C }, { 0x2971, 0, 0x0805D17C }, { 0x2972, 0, 0x0805D1C4 }, + { 0x2973, 0, 0x0805D234 }, { 0x2974, 0, 0x0805D258 }, { 0x2975, 0, 0x0805D2E4 }, { 0x2976, 0, 0x0805D314 }, + { 0x2977, 0, 0x0805D358 }, { 0x2978, 0, 0x0805D3DC }, { 0x2979, 0, 0x0805D414 }, { 0x297A, 0, 0x0805D458 }, + { 0x29CC, 0, 0x0805D4A8 }, { 0x29CD, 0, 0x0805D4C0 }, { 0x29CE, 0, 0x0805D514 }, { 0x29CF, 0, 0x0805D550 }, + { 0x29D0, 0, 0x0805D580 }, { 0x29D1, 0, 0x0805D5AC }, { 0x29D2, 0, 0x0805D5D4 }, { 0x29D3, 0, 0x0805D620 }, + { 0x29D4, 0, 0x0805D724 }, { 0x29D5, 0, 0x0805D824 }, { 0x29D6, 0, 0x0805D864 }, { 0x29D7, 0, 0x0805D8A8 }, + { 0x29D8, 0, 0x0805D9A8 }, { 0x29D9, 0, 0x0805DAA4 }, { 0x29DA, 0, 0x0805DAFC }, { 0x29DB, 0, 0x0805DB3C }, + { 0x29DC, 0, 0x0805DBA0 }, { 0x29DD, 0, 0x0805DBDC }, { 0x29DE, 0, 0x0805DC00 }, { 0x29DF, 0, 0x0805DC68 }, + { 0x29E0, 0, 0x0805DC94 }, { 0x29E1, 0, 0x0805DCC0 }, { 0x29E2, 0, 0x0805DCE8 }, { 0x29E3, 0, 0x0805DE80 }, + { 0x29E4, 0, 0x0805DEC0 }, { 0x29E5, 0, 0x0805DFAC }, { 0x29E6, 0, 0x0805DFC8 }, { 0x29E7, 0, 0x0805E00C }, + { 0x29E8, 0, 0x0805E098 }, { 0x29E9, 0, 0x0805E0DC }, { 0x29EA, 0, 0x0805E1D0 }, { 0x29EB, 0, 0x0805E204 }, + { 0x29EC, 0, 0x0805E234 }, { 0x29ED, 0, 0x0805E258 }, { 0x29EE, 0, 0x0805E2A4 }, { 0x29EF, 0, 0x0805E2D4 }, + { 0x29F0, 0, 0x0805E314 }, { 0x29F1, 0, 0x0805E344 }, { 0x29F2, 0, 0x0805E390 }, { 0x29F3, 0, 0x0805E3EC }, + { 0x29F4, 0, 0x0805E428 }, { 0x29F5, 0, 0x0805E49C }, { 0x29F8, 0, 0x0805E4D8 }, { 0x29F9, 0, 0x0805E530 }, + { 0x29FA, 0, 0x0805E56C }, { 0x29FB, 0, 0x0805E5B8 }, { 0x29FC, 0, 0x0805E608 }, { 0x29FD, 0, 0x0805E654 }, + { 0x29FE, 0, 0x0805E6C8 }, { 0x29FF, 0, 0x0805E700 }, { 0x2A00, 0, 0x0805E7B4 }, { 0x2A01, 0, 0x0805E7D0 }, + { 0x2A02, 0, 0x0805E81C }, { 0x2A30, 0, 0x0805E878 }, { 0x2A31, 0, 0x0805E898 }, { 0x2A32, 0, 0x0805E8DC }, + { 0x2A33, 0, 0x0805E94C }, { 0x2A34, 0, 0x0805EA04 }, { 0x2A35, 0, 0x0805EA90 }, { 0x2A36, 0, 0x0805EB14 }, + { 0x2A37, 0, 0x0805EB4C }, { 0x2A38, 0, 0x0805EBD0 }, { 0x2A39, 0, 0x0805EC28 }, { 0x2A3A, 0, 0x0805EC40 }, + { 0x2A94, 0, 0x0805EC78 }, { 0x2A95, 0, 0x0805ECA4 }, { 0x2A96, 0, 0x0805ECD0 }, { 0x2A97, 0, 0x0805EDEC }, + { 0x2A98, 0, 0x0805EF18 }, { 0x2A99, 0, 0x0805EF50 }, { 0x2A9A, 0, 0x0805EFE0 }, { 0x2A9B, 0, 0x0805F120 }, + { 0x2A9C, 0, 0x0805F254 }, { 0x2A9D, 0, 0x0805F30C }, { 0x2A9E, 0, 0x0805F3CC }, { 0x2A9F, 0, 0x0805F4B4 }, + { 0x2AA0, 0, 0x0805F5D0 }, { 0x2AA1, 0, 0x0805F604 }, { 0x2AA2, 0, 0x0805F63C }, { 0x2AA3, 0, 0x0805F68C }, + { 0x2AA4, 0, 0x0805F6BC }, { 0x2AA5, 0, 0x0805F71C }, { 0x2AA6, 0, 0x0805F760 }, { 0x2AA7, 0, 0x0805F7E4 }, + { 0x2AA8, 0, 0x0805F81C }, { 0x2AA9, 0, 0x0805F834 }, { 0x2AAA, 0, 0x0805F870 }, { 0x2AAB, 0, 0x0805F888 }, + { 0x2AAC, 0, 0x0805F8B0 }, { 0x2AAD, 0, 0x0805F8D4 }, { 0x2AAE, 0, 0x0805F944 }, { 0x2AAF, 0, 0x0805F988 }, + { 0x2AB0, 0, 0x0805F9B0 }, { 0x2AB1, 0, 0x0805FA58 }, { 0x2AB2, 0, 0x0805FA6C }, { 0x2AB3, 0, 0x0805FA80 }, + { 0x2AB4, 0, 0x0805FB0C }, { 0x2AB5, 0, 0x0805FB20 }, { 0x2AB6, 0, 0x0805FB64 }, { 0x2AB7, 0, 0x0805FB80 }, + { 0x2AB8, 0, 0x0805FB9C }, { 0x2AB9, 0, 0x0805FBF4 }, { 0x2ABA, 0, 0x0805FC24 }, { 0x2ABB, 0, 0x0805FC88 }, + { 0x2ABC, 0, 0x0805FCB0 }, { 0x2ABD, 0, 0x0805FCD8 }, { 0x2ABE, 0, 0x0805FDD8 }, { 0x2ABF, 0, 0x0805FDFC }, + { 0x2AC0, 0, 0x0805FF50 }, { 0x2AC1, 0, 0x0805FF7C }, { 0x2AC2, 0, 0x080600D0 }, { 0x2AC3, 0, 0x080600EC }, + { 0x2AC4, 0, 0x080601F8 }, { 0x2AC5, 0, 0x0806022C }, { 0x2AC6, 0, 0x08060250 }, { 0x2AC7, 0, 0x08060260 }, + { 0x2AC8, 0, 0x08060270 }, { 0x2AC9, 0, 0x08060280 }, { 0x2ACA, 0, 0x080602E0 }, { 0x2ACB, 0, 0x0806030C }, + { 0x2ACC, 0, 0x08060340 }, { 0x2ACD, 0, 0x080603A4 }, { 0x2ACE, 0, 0x080603C0 }, { 0x2ACF, 0, 0x0806047C }, + { 0x2AD0, 0, 0x08060494 }, { 0x2AD1, 0, 0x0806053C }, { 0x2AD2, 0, 0x080605B0 }, { 0x2AD3, 0, 0x080605FC }, + { 0x2AD4, 0, 0x0806067C }, { 0x2AD5, 0, 0x080606A0 }, { 0x2AD6, 0, 0x080606BC }, { 0x2AD7, 0, 0x080606EC }, + { 0x2AD8, 0, 0x08060724 }, { 0x2AD9, 0, 0x08060748 }, { 0x2ADA, 0, 0x08060794 }, { 0x2ADB, 0, 0x08060814 }, + { 0x2ADC, 0, 0x08060874 }, { 0x2ADD, 0, 0x080608B4 }, { 0x2ADE, 0, 0x080608D0 }, { 0x2ADF, 0, 0x08060960 }, + { 0x2AE0, 0, 0x08060A00 }, { 0x2AE1, 0, 0x08060AA8 }, { 0x2AE2, 0, 0x08060AD4 }, { 0x2AE3, 0, 0x08060B10 }, + { 0x2AE4, 0, 0x08060B74 }, { 0x2AE5, 0, 0x08060BD0 }, { 0x2AE6, 0, 0x08060C6C }, { 0x2AEA, 0, 0x08060CDC }, + { 0x2AEB, 0, 0x08060D1C }, { 0x2AEC, 0, 0x08060D70 }, { 0x2AED, 0, 0x08060D98 }, { 0x2AEE, 0, 0x08060DB8 }, + { 0x2AF8, 0, 0x08060DC8 }, { 0x2AF9, 0, 0x08060DE4 }, { 0x2AFA, 0, 0x08060EC8 }, { 0x2AFB, 0, 0x08060FC0 }, + { 0x2AFC, 0, 0x080610CC }, { 0x2AFD, 0, 0x080611BC }, { 0x2AFE, 0, 0x080611F4 }, { 0x2AFF, 0, 0x080612EC }, + { 0x2B00, 0, 0x080613FC }, { 0x2B01, 0, 0x08061448 }, { 0x2B02, 0, 0x08061470 }, { 0x2B03, 0, 0x080614D0 }, + { 0x2B04, 0, 0x08061504 }, { 0x2B05, 0, 0x08061578 }, { 0x2B06, 0, 0x080615DC }, { 0x2B07, 0, 0x08061658 }, + { 0x2B08, 0, 0x0806167C }, { 0x2B09, 0, 0x080616C0 }, { 0x2B0A, 0, 0x08061714 }, { 0x2B0B, 0, 0x08061750 }, + { 0x2B0C, 0, 0x080617A8 }, { 0x2B0D, 0, 0x080617D8 }, { 0x2B0E, 0, 0x08061810 }, { 0x2B0F, 0, 0x08061890 }, + { 0x2B10, 0, 0x080619A0 }, { 0x2B11, 0, 0x08061AD8 }, { 0x2B12, 0, 0x08061B44 }, { 0x2B13, 0, 0x08061BA0 }, + { 0x2B14, 0, 0x08061C0C }, { 0x2B15, 0, 0x08061C44 }, { 0x2B16, 0, 0x08061CE0 }, { 0x2B17, 0, 0x08061D4C }, + { 0x2B18, 0, 0x08061D70 }, { 0x2B19, 0, 0x08061DD4 }, { 0x2B1A, 0, 0x08061EB4 }, { 0x2B1B, 0, 0x08061F10 }, + { 0x2B1C, 0, 0x08061F88 }, { 0x2B1D, 0, 0x08061FC4 }, { 0x2B1E, 0, 0x08061FEC }, { 0x2B1F, 0, 0x08062024 }, + { 0x2B20, 0, 0x0806209C }, { 0x2B21, 0, 0x0806212C }, { 0x2B22, 0, 0x08062164 }, { 0x2B23, 0, 0x080621A8 }, + { 0x2B24, 0, 0x0806229C }, { 0x2B25, 0, 0x080622D8 }, { 0x2B26, 0, 0x080622F8 }, { 0x2B27, 0, 0x08062350 }, + { 0x2B28, 0, 0x080623A0 }, { 0x2B29, 0, 0x080623D0 }, { 0x2B2A, 0, 0x08062428 }, { 0x2B2B, 0, 0x08062478 }, + { 0x2B2C, 0, 0x080624AC }, { 0x2B2D, 0, 0x08062500 }, { 0x2B2E, 0, 0x08062550 }, { 0x2B2F, 0, 0x08062580 }, + { 0x2B30, 0, 0x080625D4 }, { 0x2B31, 0, 0x08062624 }, { 0x2B32, 0, 0x08062650 }, { 0x2B33, 0, 0x08062670 }, + { 0x2B34, 0, 0x080626B0 }, { 0x2B35, 0, 0x080626DC }, { 0x2B36, 0, 0x080626FC }, { 0x2B37, 0, 0x0806273C }, + { 0x2B38, 0, 0x080627D8 }, { 0x2B39, 0, 0x08062890 }, { 0x2B3A, 0, 0x08062910 }, { 0x2B3B, 0, 0x08062968 }, + { 0x2B3C, 0, 0x080629A4 }, { 0x2B3D, 0, 0x080629E0 }, { 0x2B3E, 0, 0x08062A90 }, { 0x2B3F, 0, 0x08062AD8 }, + { 0x2B40, 0, 0x08062B34 }, { 0x2B5C, 0, 0x08062B84 }, { 0x2B5D, 0, 0x08062C3C }, { 0x2B5E, 0, 0x08062C68 }, + { 0x2B5F, 0, 0x08062C94 }, { 0x2B60, 0, 0x08062CE8 }, { 0x2B61, 0, 0x08062D8C }, { 0x2B62, 0, 0x08062E34 }, + { 0x2B63, 0, 0x08062E84 }, { 0x2B64, 0, 0x08062F18 }, { 0x2B65, 0, 0x08062F50 }, { 0x2B66, 0, 0x08062F98 }, + { 0x2B67, 0, 0x08062FE0 }, { 0x32C8, 0, 0x08063054 }, { 0x32C9, 0, 0x080630D8 }, { 0x32CA, 0, 0x08063120 }, + { 0x32CB, 0, 0x08063184 }, { 0x32CC, 0, 0x080631E0 }, { 0x32CD, 0, 0x08063210 }, { 0x32CE, 0, 0x0806326C }, + { 0x32CF, 0, 0x08063294 }, { 0x32D0, 0, 0x080632B4 }, { 0x32D1, 0, 0x08063300 }, { 0x32D2, 0, 0x08063338 }, + { 0x32D3, 0, 0x08063384 }, { 0x32D4, 0, 0x080633B4 }, { 0x332C, 0, 0x080633E8 }, { 0x332D, 0, 0x08063408 }, + { 0x332E, 0, 0x080634FC }, { 0x332F, 0, 0x0806356C }, { 0x3330, 0, 0x08063594 }, { 0x3331, 0, 0x080635AC }, + { 0x3332, 0, 0x080635D0 }, { 0x3333, 0, 0x08063618 }, { 0x3334, 0, 0x0806369C }, { 0x3335, 0, 0x08063714 }, + { 0x3336, 0, 0x08063734 }, { 0x3337, 0, 0x08063788 }, { 0x3338, 0, 0x080637AC }, { 0x3339, 0, 0x080637CC }, + { 0x333A, 0, 0x08063838 }, { 0x333B, 0, 0x08063868 }, { 0x333C, 0, 0x08063898 }, { 0x333D, 0, 0x08063948 }, + { 0x333E, 0, 0x08063988 }, { 0x333F, 0, 0x080639AC }, { 0x3340, 0, 0x08063A58 }, { 0x3341, 0, 0x08063AB0 }, + { 0x3342, 0, 0x08063B24 }, { 0x3343, 0, 0x08063BBC }, { 0x3344, 0, 0x08063C28 }, { 0x3345, 0, 0x08063CF0 }, + { 0x3346, 0, 0x08063D24 }, { 0x3347, 0, 0x08063D5C }, { 0x3348, 0, 0x08063D8C }, { 0x3349, 0, 0x08063DEC }, + { 0x334A, 0, 0x08063E70 }, { 0x334B, 0, 0x08063EA8 }, { 0x334C, 0, 0x08063EC4 }, { 0x334D, 0, 0x08063FB4 }, + { 0x334E, 0, 0x08063FDC }, { 0x334F, 0, 0x08064038 }, { 0x3350, 0, 0x08064058 }, { 0x3351, 0, 0x0806408C }, + { 0x3352, 0, 0x080640B0 }, { 0x3353, 0, 0x080640E0 }, { 0x3354, 0, 0x08064168 }, { 0x3355, 0, 0x080641B4 }, + { 0x3356, 0, 0x080641EC }, { 0x3357, 0, 0x08064218 }, { 0x3358, 0, 0x08064230 }, { 0x3359, 0, 0x08064264 }, + { 0x335A, 0, 0x08064298 }, { 0x335B, 0, 0x080642F0 }, { 0x335C, 0, 0x08064354 }, { 0x335D, 0, 0x0806437C }, + { 0x335E, 0, 0x080643B4 }, { 0x335F, 0, 0x080643E4 }, { 0x3360, 0, 0x0806444C }, { 0x3361, 0, 0x08064498 }, + { 0x3362, 0, 0x080644EC }, { 0x3363, 0, 0x0806453C }, { 0x3364, 0, 0x08064564 }, { 0x3365, 0, 0x08064654 }, + { 0x3366, 0, 0x08064718 }, { 0x3367, 0, 0x080647E4 }, { 0x3368, 0, 0x08064860 }, { 0x3369, 0, 0x080648B8 }, + { 0x336A, 0, 0x08064988 }, { 0x336B, 0, 0x080649F4 }, { 0x336C, 0, 0x08064A44 }, { 0x336D, 0, 0x08064AA0 }, + { 0x336E, 0, 0x08064AE8 }, { 0x336F, 0, 0x08064B10 }, { 0x3370, 0, 0x08064B64 }, { 0x3371, 0, 0x08064BBC }, + { 0x3390, 0, 0x08064BEC }, { 0x3391, 0, 0x08064C24 }, { 0x3392, 0, 0x08064CE0 }, { 0x3393, 0, 0x08064D4C }, + { 0x3394, 0, 0x08064DA0 }, { 0x3395, 0, 0x08064E04 }, { 0x3396, 0, 0x08064F10 }, { 0x3397, 0, 0x08064F84 }, + { 0x3398, 0, 0x08064FBC }, { 0x3399, 0, 0x08065070 }, { 0x339A, 0, 0x080650DC }, { 0x339B, 0, 0x08065144 }, + { 0x339C, 0, 0x0806516C }, { 0x339D, 0, 0x0806519C }, { 0x339E, 0, 0x080651D4 }, { 0x339F, 0, 0x080651F0 }, + { 0x33A0, 0, 0x0806524C }, { 0x33A1, 0, 0x08065358 }, { 0x33A2, 0, 0x080653CC }, { 0x33A3, 0, 0x08065408 }, + { 0x33A4, 0, 0x08065438 }, { 0x33A5, 0, 0x08065470 }, { 0x33A6, 0, 0x080654CC }, { 0x33A7, 0, 0x08065510 }, + { 0x33A8, 0, 0x0806555C }, { 0x33A9, 0, 0x080655A0 }, { 0x33AA, 0, 0x080655C0 }, { 0x33AB, 0, 0x08065600 }, + { 0x33AC, 0, 0x08065658 }, { 0x33AD, 0, 0x08065678 }, { 0x33AE, 0, 0x08065710 }, { 0x33AF, 0, 0x080657A8 }, + { 0x33B0, 0, 0x080657D0 }, { 0x33B1, 0, 0x080657E8 }, { 0x33B2, 0, 0x08065860 }, { 0x33B3, 0, 0x080658E4 }, + { 0x33B4, 0, 0x08065930 }, { 0x33B5, 0, 0x0806597C }, { 0x33B6, 0, 0x080659DC }, { 0x33B7, 0, 0x08065A28 }, + { 0x33B8, 0, 0x08065ABC }, { 0x33B9, 0, 0x08065AE0 }, { 0x33BA, 0, 0x08065B08 }, { 0x33BB, 0, 0x08065B7C }, + { 0x33BC, 0, 0x08065BD8 }, { 0x33BD, 0, 0x08065C5C }, { 0x33BE, 0, 0x08065C88 }, { 0x33BF, 0, 0x08065CCC }, + { 0x33C0, 0, 0x08065D30 }, { 0x33C1, 0, 0x08065DD4 }, { 0x33C2, 0, 0x08065E24 }, { 0x33C3, 0, 0x08065E84 }, + { 0x33C4, 0, 0x08065F4C }, { 0x33C5, 0, 0x08066024 }, { 0x33C6, 0, 0x08066120 }, { 0x33C7, 0, 0x08066144 }, + { 0x33C8, 0, 0x08066200 }, { 0x33C9, 0, 0x08066268 }, { 0x33CA, 0, 0x0806629C }, { 0x33CB, 0, 0x080662D0 }, + { 0x33CC, 0, 0x0806630C }, { 0x33CD, 0, 0x08066324 }, { 0x33CE, 0, 0x0806635C }, { 0x33CF, 0, 0x0806637C }, + { 0x33D0, 0, 0x080663AC }, { 0x33D1, 0, 0x08066464 }, { 0x33D2, 0, 0x08066578 }, { 0x33D3, 0, 0x080665F4 }, + { 0x33D4, 0, 0x0806665C }, { 0x33D5, 0, 0x080666D0 }, { 0x33D6, 0, 0x08066708 }, { 0x33D7, 0, 0x08066788 }, + { 0x33D8, 0, 0x080667D4 }, { 0x33D9, 0, 0x08066834 }, { 0x33F4, 0, 0x080668FC }, { 0x33F5, 0, 0x08066934 }, + { 0x33F6, 0, 0x080669DC }, { 0x33F7, 0, 0x08066A3C }, { 0x33F9, 0, 0x08066B00 }, { 0x3458, 0, 0x08066B40 }, + { 0x3459, 0, 0x08066B60 }, { 0x345A, 0, 0x08066BC0 }, { 0x345B, 0, 0x08066C10 }, { 0x345C, 0, 0x08066C7C }, + { 0x345D, 0, 0x08066CB8 }, { 0x345E, 0, 0x08066D20 }, { 0x345F, 0, 0x08066D90 }, { 0x3460, 0, 0x08066E58 }, + { 0x3461, 0, 0x08066E9C }, { 0x3462, 0, 0x08066EE8 }, { 0x3463, 0, 0x08066F38 }, { 0x3464, 0, 0x08066F64 }, + { 0x3465, 0, 0x08066FF8 }, { 0x3466, 0, 0x080670A4 }, { 0x3467, 0, 0x080670F0 }, { 0x3468, 0, 0x08067144 }, + { 0x3469, 0, 0x08067174 }, { 0x346A, 0, 0x080671E8 }, { 0x346B, 0, 0x08067208 }, { 0x346C, 0, 0x08067224 }, + { 0x346D, 0, 0x0806728C }, { 0x346E, 0, 0x0806731C }, { 0x346F, 0, 0x0806739C }, { 0x3470, 0, 0x08067400 }, + { 0x3471, 0, 0x0806743C }, { 0x3472, 0, 0x0806746C }, { 0x3473, 0, 0x080674B0 }, { 0x3474, 0, 0x08067520 }, + { 0x3475, 0, 0x08067594 }, { 0x3476, 0, 0x080675B8 }, { 0x3477, 0, 0x080675E0 }, { 0x3478, 0, 0x08067618 }, + { 0x3479, 0, 0x08067648 }, { 0x347A, 0, 0x08067688 }, { 0x347B, 0, 0x080676B0 }, { 0x347C, 0, 0x080676F0 }, + { 0x347D, 0, 0x08067760 }, { 0x347E, 0, 0x080677A4 }, { 0x347F, 0, 0x080677F4 }, { 0x3480, 0, 0x0806782C }, + { 0x3481, 0, 0x080678A0 }, { 0x3482, 0, 0x080678C8 }, { 0x3483, 0, 0x080678F8 }, { 0x3484, 0, 0x08067934 }, + { 0x3485, 0, 0x08067990 }, { 0x3486, 0, 0x080679E0 }, { 0x3487, 0, 0x08067A18 }, { 0x3488, 0, 0x08067A68 }, + { 0x3489, 0, 0x08067AE8 }, { 0x348A, 0, 0x08067B54 }, { 0x348B, 0, 0x08067BBC }, { 0x348C, 0, 0x08067C0C }, + { 0x348D, 0, 0x08067C5C }, { 0x348E, 0, 0x08067CB8 }, { 0x348F, 0, 0x08067D6C }, { 0x3490, 0, 0x08067DE0 }, + { 0x3491, 0, 0x08067E2C }, { 0x3492, 0, 0x08067E80 }, { 0x3493, 0, 0x08067EDC }, { 0x3494, 0, 0x08067F20 }, + { 0x3495, 0, 0x08067F44 }, { 0x3496, 0, 0x08067F64 }, { 0x3497, 0, 0x08067FEC }, { 0x3498, 0, 0x0806803C }, + { 0x3499, 0, 0x08068094 }, { 0x349A, 0, 0x080680C8 }, { 0x349B, 0, 0x080680FC }, { 0x349C, 0, 0x0806812C }, + { 0x349D, 0, 0x08068158 }, { 0x349E, 0, 0x08068180 }, { 0x349F, 0, 0x080681C0 }, { 0x34A0, 0, 0x08068224 }, + { 0x34A1, 0, 0x08068278 }, { 0x34A2, 0, 0x080682C0 }, { 0x34A3, 0, 0x0806830C }, { 0x34A4, 0, 0x08068394 }, + { 0x34A5, 0, 0x080683F4 }, { 0x34A6, 0, 0x08068430 }, { 0x34A7, 0, 0x08068498 }, { 0x34A8, 0, 0x080684FC }, + { 0x34A9, 0, 0x08068544 }, { 0x34AA, 0, 0x08068564 }, { 0x34AB, 0, 0x08068598 }, { 0x34AC, 0, 0x0806860C }, + { 0x34AD, 0, 0x08068640 }, { 0x34AE, 0, 0x080686F4 }, { 0x34AF, 0, 0x08068768 }, { 0x34B0, 0, 0x08068780 }, + { 0x34B1, 0, 0x080687E0 }, { 0x34B2, 0, 0x080687F8 }, { 0x34B3, 0, 0x08068860 }, { 0x3520, 0, 0x080688F4 }, + { 0x3521, 0, 0x08068958 }, { 0x3522, 0, 0x080689C8 }, { 0x3523, 0, 0x08068A38 }, { 0x3524, 0, 0x08068A88 }, + { 0x3525, 0, 0x08068B04 }, { 0x3526, 0, 0x08068B30 }, { 0x3527, 0, 0x08068B7C }, { 0x3528, 0, 0x08068CA0 }, + { 0x3529, 0, 0x08068CF4 }, { 0x352A, 0, 0x08068D1C }, { 0x352B, 0, 0x08068DB0 }, { 0x352C, 0, 0x08068E28 }, + { 0x352D, 0, 0x08068E78 }, { 0x352E, 0, 0x08068F14 }, { 0x352F, 0, 0x08068F78 }, { 0x3530, 0, 0x08068FA0 }, + { 0x3531, 0, 0x08069020 }, { 0x3532, 0, 0x080690CC }, { 0x3533, 0, 0x0806913C }, { 0x3534, 0, 0x080691B0 }, + { 0x3535, 0, 0x08069224 }, { 0x3536, 0, 0x0806923C }, { 0x3537, 0, 0x08069284 }, { 0x3538, 0, 0x080692D8 }, + { 0x3539, 0, 0x08069314 }, { 0x353A, 0, 0x08069358 }, { 0x353B, 0, 0x08069390 }, { 0x353C, 0, 0x080693E4 }, + { 0x353D, 0, 0x08069434 }, { 0x353E, 0, 0x08069490 }, { 0x353F, 0, 0x080694C4 }, { 0x3540, 0, 0x08069524 }, + { 0x3541, 0, 0x0806957C }, { 0x3542, 0, 0x080695C0 }, { 0x3543, 0, 0x08069608 }, { 0x3544, 0, 0x08069668 }, + { 0x3545, 0, 0x080696DC }, { 0x3546, 0, 0x08069734 }, { 0x3548, 0, 0x08069774 }, { 0x3549, 0, 0x08069814 }, + { 0x354A, 0, 0x080698A0 }, { 0x354B, 0, 0x08069930 }, { 0x354C, 0, 0x08069998 }, { 0xFFFC, 0, 0x080699C8 }, + { 0xFFFD, 0, 0x080699D4 }, { 0xFFFF, 0, NULL }, +}; + +MessageTableEntry D_801CFB08[46] = { + { 0x4E20, 0xB0, 0x07000000 }, { 0x4E21, 0xB0, 0x0700003C }, { 0x4E22, 0xB0, 0x07000094 }, + { 0x4E23, 0xB0, 0x070000F0 }, { 0x4E24, 0xB0, 0x07000140 }, { 0x4E25, 0xB0, 0x0700019C }, + { 0x4E26, 0xB0, 0x070001D8 }, { 0x4E27, 0xB0, 0x07000248 }, { 0x4E28, 0xB0, 0x0700027C }, + { 0x4E29, 0xB0, 0x070002E0 }, { 0x4E2A, 0xB0, 0x0700033C }, { 0x4E2B, 0xB0, 0x07000384 }, + { 0x4E2C, 0xB0, 0x070003C8 }, { 0x4E2D, 0xB0, 0x0700040C }, { 0x4E2E, 0xB0, 0x07000450 }, + { 0x4E2F, 0xB0, 0x070004A8 }, { 0x4E30, 0xB0, 0x07000504 }, { 0x4E31, 0xB0, 0x07000564 }, + { 0x4E32, 0xB0, 0x070005CC }, { 0x4E33, 0xB0, 0x07000610 }, { 0x4E34, 0xB0, 0x07000654 }, + { 0x4E35, 0xB0, 0x07000698 }, { 0x4E36, 0xB0, 0x070006F8 }, { 0x4E37, 0xB0, 0x07000750 }, + { 0x4E38, 0xB0, 0x07000798 }, { 0x4E39, 0xB0, 0x0700081C }, { 0x4E3A, 0xB0, 0x07000888 }, + { 0x4E3B, 0xB0, 0x07000924 }, { 0x4E3C, 0xB0, 0x070009B4 }, { 0x4E3D, 0xB0, 0x070009E8 }, + { 0x4E3E, 0xB0, 0x07000A78 }, { 0x4E3F, 0xB0, 0x07000AB0 }, { 0x4E40, 0xB0, 0x07000B2C }, + { 0x4E41, 0xB0, 0x07000B54 }, { 0x4E42, 0xB0, 0x07000B7C }, { 0x4E43, 0xB0, 0x07000BA4 }, + { 0x4E44, 0xB0, 0x07000BCC }, { 0x4E45, 0xB0, 0x07000BF4 }, { 0x4E46, 0xB0, 0x07000C1C }, + { 0x4E47, 0xB0, 0x07000C44 }, { 0x4E48, 0xB0, 0x07000C6C }, { 0x4E49, 0xB0, 0x07000CEC }, + { 0x4E4A, 0xB0, 0x07000D5C }, { 0x4E4B, 0xB0, 0x07000DC8 }, { 0x4E4C, 0xB0, 0x07000E54 }, + { 0xFFFF, 0, NULL }, +}; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 4fcd31c8b..956bda896 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1709,7 +1709,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { if (CHECK_EVENTINF(EVENTINF_41)) { // Related to swamp boat (non-minigame)? for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { - if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != 0)) { + if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != MSGMODE_NONE)) { if (gSaveContext.buttonStatus[i] == BTN_ENABLED) { restoreHudVisibility = true; } @@ -3657,7 +3657,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME_LENS: // Slowly consume magic while Lens of Truth is active if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -3700,7 +3700,7 @@ void Magic_Update(PlayState* play) { // fallthrough case MAGIC_STATE_CONSUME_GORON_ZORA: if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == 0) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; @@ -3722,7 +3722,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME_GIANTS_MASK: if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && - (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && + (msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; @@ -3932,7 +3932,7 @@ void Interface_DrawItemButtons(PlayState* play) { if ((gSaveContext.hudVisibility == HUD_VISIBILITY_NONE) || (gSaveContext.hudVisibility == HUD_VISIBILITY_NONE_ALT) || (gSaveContext.hudVisibility == HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE) || - (msgCtx->msgMode != 0)) { + (msgCtx->msgMode != MSGMODE_NONE)) { temp = 0; } else if (player->stateFlags1 & PLAYER_STATE1_200000) { temp = 70; @@ -4400,8 +4400,8 @@ void Interface_DrawClock(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((R_TIME_SPEED != 0) && - ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || - (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + ((msgCtx->msgMode == MSGMODE_NONE) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || + (msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && !FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) { /** @@ -5440,31 +5440,31 @@ void Interface_StartMoonCrash(PlayState* play) { play->transitionType = TRANS_TYPE_FADE_WHITE; } -void Interface_GetTimerDigits(u64 timer, s16* timerArr) { - u64 time = timer; +void Interface_GetTimerDigits(OSTime time, s16* timerArr) { + OSTime t = time; // 6 minutes - timerArr[0] = time / SECONDS_TO_TIMER(360); - time -= timerArr[0] * SECONDS_TO_TIMER(360); + timerArr[0] = t / SECONDS_TO_TIMER(360); + t -= timerArr[0] * SECONDS_TO_TIMER(360); // minutes - timerArr[1] = time / SECONDS_TO_TIMER(60); - time -= timerArr[1] * SECONDS_TO_TIMER(60); + timerArr[1] = t / SECONDS_TO_TIMER(60); + t -= timerArr[1] * SECONDS_TO_TIMER(60); // 10 seconds - timerArr[3] = time / SECONDS_TO_TIMER(10); - time -= timerArr[3] * SECONDS_TO_TIMER(10); + timerArr[3] = t / SECONDS_TO_TIMER(10); + t -= timerArr[3] * SECONDS_TO_TIMER(10); // seconds - timerArr[4] = time / SECONDS_TO_TIMER(1); - time -= timerArr[4] * SECONDS_TO_TIMER(1); + timerArr[4] = t / SECONDS_TO_TIMER(1); + t -= timerArr[4] * SECONDS_TO_TIMER(1); // 100 milliseconds - timerArr[6] = time / SECONDS_TO_TIMER_PRECISE(0, 10); - time -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10); + timerArr[6] = t / SECONDS_TO_TIMER_PRECISE(0, 10); + t -= timerArr[6] * SECONDS_TO_TIMER_PRECISE(0, 10); // 10 milliseconds - timerArr[7] = time; + timerArr[7] = t; } #define IS_POSTMAN_TIMER_DRAWN \ @@ -5500,8 +5500,8 @@ void Interface_DrawTimers(PlayState* play) { // Not satisfying any of these conditions will pause the timer if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && - ((msgCtx->msgMode == 0) || - ((msgCtx->msgMode != 0) && (msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) && + ((msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId >= 0x1BB2) && + (msgCtx->currentTextId <= 0x1BB6))) && !(player->stateFlags1 & PLAYER_STATE1_200) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -5950,7 +5950,7 @@ void Interface_UpdateBottleTimers(PlayState* play) { // Not satisfying any of these conditions will pause the bottle timer if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && - ((msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + ((msgCtx->msgMode == MSGMODE_NONE) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { @@ -6870,7 +6870,7 @@ void Interface_Update(PlayState* play) { interfaceCtx->aButtonRoll = -15700.0f; interfaceCtx->aButtonState = A_BTN_STATE_2; - if ((msgCtx->msgMode != 0) && (msgCtx->textboxYTarget == 0x26)) { + if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->textboxYTarget == 38)) { R_A_BTN_Y_OFFSET = -14; } else { R_A_BTN_Y_OFFSET = 0; @@ -7018,8 +7018,9 @@ void Interface_Update(PlayState* play) { // Update Sun Song if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) { // exit out of ocarina mode after suns song finishes playing - if ((msgCtx->ocarinaAction != 0x39) && (gSaveContext.sunsSongState == SUNSSONG_START)) { - play->msgCtx.ocarinaMode = 4; + if ((msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) && + (gSaveContext.sunsSongState == SUNSSONG_START)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } // handle suns song in areas where time moves @@ -7039,7 +7040,7 @@ void Interface_Update(PlayState* play) { // Daytime has been reached. End suns song effect gSaveContext.sunsSongState = SUNSSONG_INACTIVE; R_TIME_SPEED = sPrevTimeSpeed; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } else { // Daytime @@ -7047,7 +7048,7 @@ void Interface_Update(PlayState* play) { // Nighttime has been reached. End suns song effect gSaveContext.sunsSongState = SUNSSONG_INACTIVE; R_TIME_SPEED = sPrevTimeSpeed; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } } else { diff --git a/src/code/z_play.c b/src/code/z_play.c index 41b921125..9a5e6541d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1072,7 +1072,7 @@ void Play_Update(PlayState* this) { this->pauseCtx.bombersNotebookOpen = false; sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; this->msgCtx.msgLength = 0; - this->msgCtx.msgMode = 0; + this->msgCtx.msgMode = MSGMODE_NONE; this->msgCtx.currentTextId = 0; this->msgCtx.stateTimer = 0; Audio_PlaySfx(NA_SE_SY_CANCEL); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c5fe03475..059596909 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -638,7 +638,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { } gSaveContext.save.saveInfo.playerData.rupees = 0; - gSaveContext.save.saveInfo.unk_F41 = 0; + gSaveContext.save.saveInfo.scarecrowSpawnSongSet = false; gSaveContext.powderKegTimer = 0; gSaveContext.unk_1014 = 0; gSaveContext.jinxTimer = 0; @@ -1304,7 +1304,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible; } - if (gSaveContext.save.saveInfo.unk_F41) { + if (gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.saveInfo.scarecrowSpawnSong, sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong)); @@ -1649,7 +1649,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { } else { if (phi_s2) { gSaveContext.options.optionId = 0xA51D; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; @@ -1657,7 +1657,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { Lib_MemCpy(&gSaveContext.options, sramCtx->saveBuf, sizeof(SaveOptions)); if (gSaveContext.options.optionId != 0xA51D) { gSaveContext.options.optionId = 0xA51D; - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; @@ -1671,7 +1671,7 @@ void func_801457CC(GameState* gameState, SramContext* sramCtx) { gSaveContext.flashSaveAvailable = D_801F6AF2; } - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; } #else #pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s") @@ -1853,8 +1853,7 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { */ void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) { if (gSaveContext.flashSaveAvailable) { - // TODO: macros for languages - gSaveContext.options.language = 1; + gSaveContext.options.language = LANGUAGE_ENG; Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions)); } } diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 1d8ca14b0..83edc9548 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -204,7 +204,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) { void ArrowFire_Update(Actor* thisx, PlayState* play) { ArrowFire* this = (ArrowFire*)thisx; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index b3df6c265..8a908a0e3 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -176,7 +176,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) { void ArrowIce_Update(Actor* thisx, PlayState* play) { ArrowIce* this = THIS; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } else { diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index 8b4f8cad9..902443a95 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -172,7 +172,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) { void ArrowLight_Update(Actor* thisx, PlayState* play) { ArrowLight* this = THIS; - if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) { + if ((play->msgCtx.msgMode == MSGMODE_E) || (play->msgCtx.msgMode == MSGMODE_SONG_PLAYED)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index 764b00224..d224694ec 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -176,7 +176,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) { D_80AAAAB4 = false; } - if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_DEKU) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { if ((player2->actor.world.pos.x > -40.0f) && (player2->actor.world.pos.x < 40.0f) && diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 0948b7afc..250abea20 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -266,7 +266,7 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) { } else { sSuccessSoundAlreadyPlayed = false; } - if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE)) { if ((player2->actor.world.pos.x > -5780.0f) && (player2->actor.world.pos.x < -5385.0f)) { if ((player2->actor.world.pos.z > 1120.0f) && (player2->actor.world.pos.z < 2100.0f)) { diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 9b1d0f048..fb45200bc 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1867,7 +1867,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) { // This code is responsible for making in-game time pass while using the telescope in the Astral Observatory. // Skull Kid is always loaded in the scene, even if he isn't visible, hence why time always passes. - if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && + if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == CS_STATE_IDLE)) { diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 0d6ee9380..c7bfb6234 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -457,7 +457,7 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C &= ~0x1; this->unk_32C |= 0x40; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -546,7 +546,7 @@ void func_80BED680(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -650,7 +650,7 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -739,7 +739,7 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -838,7 +838,7 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -922,7 +922,7 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x161A; this->actionFunc = func_80BEF360; @@ -1011,7 +1011,7 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x1629; this->actionFunc = func_80BEF360; @@ -1095,7 +1095,7 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { Audio_PlaySfx_MessageDecide(); this->unk_32C |= 0x40; this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0x15EF; this->actionFunc = func_80BEF360; @@ -1335,7 +1335,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->unk_32C & 1) { this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0; this->actionFunc = func_80BEEE10; @@ -1343,7 +1343,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { this->unk_32C &= ~0x20; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_32C &= ~0x4; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->animIndex = ENAKINDONUTS_ANIM_8; this->unk_33C = 0; @@ -1378,7 +1378,7 @@ void func_80BEEFA8(EnAkindonuts* this, PlayState* play) { void func_80BEF18C(EnAkindonuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_33C = 0; this->actionFunc = func_80BEEE10; @@ -1405,7 +1405,7 @@ void func_80BEF20C(EnAkindonuts* this, PlayState* play) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_32C & 1) { this->unk_32C &= ~0x1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BEF360; } else { diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index eab1c83ce..eea47caa5 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -449,7 +449,7 @@ void EnAob01_BeforeRace_HandleConversation(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_PLAYER_CONFIRMED_CHOICE; Rupees_ChangeBy(-this->rupeesBet); func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnAob01_BeforeRace_StartRace; return; @@ -518,7 +518,7 @@ void EnAob01_BeforeRace_RespondToPlayAgainQuestion(EnAob01* this, PlayState* pla } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->textId = 0; this->actionFunc = EnAob01_BeforeRace_Idle; @@ -672,7 +672,7 @@ void EnAob01_BeforeRace_Talk(EnAob01* this, PlayState* play) { this->stateFlags &= ~ENAOB01_FLAG_LAUGH; if (this->stateFlags & ENAOB01_FLAG_CONVERSATION_OVER) { this->stateFlags &= ~ENAOB01_FLAG_CONVERSATION_OVER; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnAob01_BeforeRace_Idle; } else { @@ -898,7 +898,7 @@ void EnAob01_AfterRace_GiveReward(EnAob01* this, PlayState* play) { if (EnAob01_ProcessIdleAnim(this)) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { this->rupeesBet = 0; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 8b98808e1..17c9dbc50 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -707,7 +707,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { if (SubS_StartCutscene(&brother->actor, brother->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_NORMAL)) { brother->unk_374 |= 0x8000; - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; ret = 0; } } else if (Message_ShouldAdvance(play)) { @@ -832,7 +832,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10DB: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->unk_2FA = 1; ret = 0; } else { @@ -945,7 +945,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10EB: if (play->msgCtx.choiceIndex == 0) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; Audio_PlaySfx_MessageDecide(); switch (this->unk_2FA) { case 4: @@ -1497,7 +1497,7 @@ void func_80A97A28(EnAz* this, PlayState* play) { void func_80A97A40(EnAz* this, PlayState* play) { if (SubS_StartCutscene(&this->actor, 0, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80A97A9C(this, play); } @@ -1525,7 +1525,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { case 0x10D8: if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; func_800FD750(NA_BGM_TIMED_MINI_GAME); func_80A94AB8(this, play, 1); func_80A979DC(this, play); diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index bf93ad365..43cbd2969 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -596,7 +596,7 @@ void EnBaba_FollowSchedule_Talk(EnBaba* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnBaba_FollowSchedule; } @@ -610,7 +610,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { @@ -629,7 +629,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { } } else if (this->stateFlags & BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GIVE_BLAST_MASK; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnBaba_GiveBlastMask; } else { diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index 81e94d78f..a9f290371 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -101,7 +101,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_809CD028(this, play); } else { diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 7e277f4cf..061081bc1 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -393,7 +393,7 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && - ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { + ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { play->nextEntrance = Entrance_CreateFromSpawn(6); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; @@ -511,7 +511,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { if (this->unk_2C2 == 0) { if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && - ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { + ((play->msgCtx.msgMode == MSGMODE_NONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { this->unk_2C2 = 1; func_809C4B6C(this); if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index f96e43cd5..5a234c05e 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -268,7 +268,7 @@ void EnCow_Talk(EnCow* this, PlayState* play) { } void EnCow_Idle(EnCow* this, PlayState* play) { - if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_NONE) || (play->msgCtx.ocarinaMode == OCARINA_MODE_END)) { if (gHorsePlayedEponasSong) { if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) { this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK; diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 6a936636c..d9147aa26 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -429,7 +429,7 @@ void func_80B3EE8C(EnDai* this, PlayState* play) { void func_80B3EEDC(EnDai* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->actionFunc = func_80B3EE8C; diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index 500259dc6..d32f2f3f4 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -372,7 +372,7 @@ void func_80A71C3C(EnDno* this, PlayState* play) { } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80A71E54(this, play); } else if (this->actor.xzDistToPlayer < 60.0f) { @@ -482,7 +482,7 @@ void func_80A71F18(EnDno* this, PlayState* play) { if (Message_ShouldAdvance(play)) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IMPLORE_END, &this->animIndex); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; } break; @@ -688,7 +688,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0x800: case 0x801: if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->unk_452 = 1; this->unk_454 = 0.0f; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_OPEN_PARASOL, diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 08f97aa93..b2a9b75d8 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -5605,7 +5605,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Audio_PlaySfx_AtPos(&sStreamSoundProjectedPos, NA_SE_EV_WATER_WALL - SFX_FLAG); - if (gSaveContext.options.language == 0) { // Added in MM + if (gSaveContext.options.language == LANGUAGE_JPN) { // Added in MM gSaveContext.minigameScore = D_8090CCF8; } else { gSaveContext.minigameScore = (SQ((f32)D_8090CCF8) * 0.0036f) + 0.5f; diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index 917624a64..ec8c09b71 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -410,7 +410,7 @@ void EnFsn_EndInteraction(EnFsn* this, PlayState* play) { this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -995,7 +995,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); @@ -1204,7 +1204,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { item = this->items[this->cursorIndex]; item->buyFanfareFunc(play, item); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -1246,7 +1246,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1327,7 +1327,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1378,7 +1378,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } else { @@ -1433,12 +1433,12 @@ void EnFsn_ConverseBackroom(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->flags & ENFSN_END_CONVERSATION) { this->flags &= ~ENFSN_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnFsn_IdleBackroom; } else if (this->flags & ENFSN_GIVE_ITEM) { this->flags &= ~ENFSN_GIVE_ITEM; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnFsn_GiveItem; } else { diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 36e18e350..b9ef1fe88 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -379,8 +379,8 @@ void func_80B0FE7C(PlayState* play) { } void func_80B0FEBC(EnGb2* this, PlayState* play) { - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { - play->msgCtx.ocarinaMode = 4; + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; SET_EVENTINF(EVENTINF_47); this->unk_26E = 0x14D1; this->unk_288 = 10; @@ -400,7 +400,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26E = 0x14D1; this->unk_288 = 30; @@ -443,7 +443,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { case 0: Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; @@ -568,7 +568,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26C &= ~2; if (this->unk_26E == 0x14DD) { @@ -598,7 +598,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { } else { Audio_PlaySfx_MessageDecide(); Rupees_ChangeBy(-this->unk_288); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = func_80B11344; @@ -771,7 +771,7 @@ void func_80B10E98(EnGb2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { this->unk_26C &= ~2; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); @@ -814,7 +814,7 @@ void func_80B11048(EnGb2* this, PlayState* play) { void func_80B110F8(EnGb2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_26C & 2) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_26C &= ~2; this->actionFunc = func_80B10A48; diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 9183856ab..727b2ff2a 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -598,7 +598,7 @@ void func_80BB26EC(EnGeg* this, PlayState* play) { case 0xD61: CutsceneManager_Stop(this->csId); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; this->actionFunc = func_80BB221C; @@ -617,14 +617,14 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (this->unk_496) { case 0xD63: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB221C; break; case 0xD69: this->nextCsId = this->csIdList[6]; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB2520; break; @@ -632,7 +632,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { case 0xD6D: case 0xD6F: case 0xD8A: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB31B8; break; @@ -640,7 +640,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) { case 0xD72: case 0xD75: case 0xD8B: - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_230 &= ~0x10; this->nextCsId = this->csIdList[7]; @@ -667,7 +667,7 @@ void func_80BB2944(EnGeg* this, PlayState* play) { } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->unk_496 == 0xD67) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->nextCsId = this->csIdList[4]; this->actionFunc = func_80BB2520; @@ -684,7 +684,7 @@ void func_80BB2A54(EnGeg* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->unk_230 &= ~0x10; this->unk_244 = 65; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80BB347C; } else { diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index 1d59139a4..5a0f0f3f2 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -278,7 +278,7 @@ void func_80B35450(EnGg* this, PlayState* play) { void func_80B3556C(EnGg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->animIndex == ENGG_ANIM_4) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_308 = 0; this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; @@ -429,7 +429,7 @@ void func_80B359DC(EnGg* this, PlayState* play) { this->unk_306 = 0; } - if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_19_80); diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index e106c8f88..3b6d62775 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -201,7 +201,7 @@ void func_80B3B05C(EnGg2* this, PlayState* play) { void func_80B3B0A0(EnGg2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_2F0 = 0; this->actionFunc = func_80B3B5D4; diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index 566f35ba0..2a5e6712a 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -223,7 +223,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x464: - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; EnGinkoMan_SetupStamp(this); // stamp player break; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index ad5bc484f..900664e4c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -294,7 +294,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) { this->unk_1E4 &= ~0x40; } - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); this->animIndex = ENGK_ANIM_3; @@ -545,7 +545,7 @@ void func_80B51410(EnGk* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->actor.xzDistToPlayer < 100.0f) { - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY_INTRO)) { this->unk_1E4 |= 0x20; } @@ -906,7 +906,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { } if (this->unk_1E4 & 2) { - if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && + if ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) && (play->msgCtx.ocarinaMode != OCARINA_MODE_EVENT) && (play->csCtx.state == CS_STATE_IDLE)) { Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } @@ -918,7 +918,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { void func_80B5216C(EnGk* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80B51698; } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index f5678eedd..0aecc3233 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -748,7 +748,7 @@ s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 isFallingAsleep = false; - if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && + if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) && (this->actor.xzDistToPlayer < 400.0f)) || (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) && diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 55bd83106..6cc8af5a5 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -277,13 +277,13 @@ void func_80997FF0(EnGs* this, PlayState* play) { } void func_80998040(EnGs* this, PlayState* play) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); this->actionFunc = func_8099807C; } void func_8099807C(EnGs* this, PlayState* play) { switch (play->msgCtx.ocarinaMode) { - case 3: + case OCARINA_MODE_EVENT: switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_HEALING: case OCARINA_SONG_EPONAS: @@ -341,11 +341,11 @@ void func_8099807C(EnGs* this, PlayState* play) { } break; - case 0: - case 4: + case OCARINA_MODE_NONE: + case OCARINA_MODE_END: func_80998300(this, play); - case 26: + case OCARINA_MODE_APPLY_DOUBLE_SOT: func_80997D14(this, play); break; @@ -1030,7 +1030,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) { EnGs* this = THIS; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; this->collider.base.acFlags &= ~AC_HIT; func_80997DEC(this, play); diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index ded070de4..648b63b6b 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -398,7 +398,7 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { sHasSoundPlayed = false; } - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) { this->csIdIndex = HG_CS_SONG_OF_HEALING; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 5d1e0ee24..b10793a56 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -210,8 +210,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { } if (!(this->actor.xzDistToPlayer > 120.0f)) { - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { - play->msgCtx.ocarinaMode = 4; + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA)) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_80BDB788(this); } else if (func_801A5100() == 2) { func_80BDB788(this); diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index f9e51b55c..b0ea746d9 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -417,7 +417,7 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; if (this->skelAnime.animation == &object_skb_Anim_00697C) { - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; this->actor.speed = 2.4f; this->actor.gravity = -1.0f; this->actor.velocity.y = 3.0f; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 137799af3..4573bdcf5 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -365,7 +365,7 @@ void EnJg_GoronShrineTalk(EnJg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if ((this->textId == 0xDCC) || (this->textId == 0xDDD) || (this->textId == 0xDE0)) { // There is nothing more to say after these lines, so end the current conversation. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_GoronShrineIdle; @@ -430,7 +430,7 @@ void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) { } } else if (this->animIndex == EN_JG_ANIM_SURPRISE_LOOP) { if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->animIndex = EN_JG_ANIM_WALK; @@ -488,7 +488,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { temp = this->textId; if ((temp == 0xDB4) || (temp == 0xDB5) || (temp == 0xDC4) || (temp == 0xDC6)) { // There is nothing more to say after these lines, so end the current conversation. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; @@ -500,7 +500,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_80)) { // The player hasn't talked to the Goron Child at least once, so they can't learn // the Lullaby Intro. End the current conversation with the player. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; @@ -514,7 +514,7 @@ void EnJg_Talk(EnJg* this, PlayState* play) { // To get to this point, the player *has* talked to the Goron Child, but doesn't // already have the Lullaby or Lullaby Intro. End the current conversation and // start the cutscene that teaches the Lullaby Intro. - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->csId = EnJg_GetCsIdForTeachingLullabyIntro(this); @@ -605,7 +605,7 @@ void EnJg_FrozenIdle(EnJg* this, PlayState* play) { void EnJg_EndFrozenInteraction(EnJg* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnJg_FrozenIdle; } diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index d2c877ad3..a3d0e4608 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -575,7 +575,7 @@ void EnKakasi_SetupSongTeach(EnKakasi* this, PlayState* play) { */ void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - func_80152434(play, 0x35); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_SCARECROW_SPAWN_RECORDING); this->unkState1A8 = 0; if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -632,7 +632,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { func_8096FAAC(this, play); func_8096FBB8(this, play); - if (play->msgCtx.ocarinaMode == 4) { // song failed + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { // song failed this->unk190 = 0; this->unkCounter1A4 = 0; CutsceneManager_Stop(this->csIdList[0]); @@ -645,7 +645,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); this->actionFunc = EnKakasi_RegularDialogue; - } else if (play->msgCtx.ocarinaMode == 3) { // song success + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { // song success this->postTeachTimer = 30; this->skelAnime.playSpeed = 2.0f; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); @@ -668,7 +668,7 @@ void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) { CutsceneManager_Stop(this->csIdList[0]); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->unk190 = 0; this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_HOPPING_REGULAR); @@ -1054,9 +1054,9 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) { void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) && - ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) { + ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SCARECROW_SPAWN))) { this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = EnKakasi_SetupRiseOutOfGround; } } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index 8e5aa5802..4a95c525d 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -824,13 +824,14 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { switch (this->ocarinaFlag) { case 0: - if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { this->ocarinaFlag = 1; } break; case 1: - if ((play->msgCtx.ocarinaMode == 4) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_END) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { this->actionState = ENKANBAN_REPAIR; this->bounceX = 1; Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR); diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 43f9a3d99..0c9f545f1 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -412,7 +412,7 @@ void func_80959E18(EnMk* this, PlayState* play) { } if (func_800B8718(&this->actor, &play->state)) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = func_80959D28; if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { this->actor.csId = this->csIdList[0]; diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index 8113526f2..bf6c611f6 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -1318,7 +1318,7 @@ void EnMnk_MonkeyTiedUp_ReactToWrongInstrument(EnMnk* this, PlayState* play) { case 0x8DB: Message_CloseTextbox(play); this->actionFunc = EnMnk_MonkeyTiedUp_WaitForInstrument; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; EnMnk_MonkeyTiedUp_SetAnim(this, MONKEY_TIEDUP_ANIM_WAIT); if (this->csId != CS_ID_NONE) { CutsceneManager_Stop(this->csId); @@ -1489,7 +1489,7 @@ void EnMnk_MonkeyTiedUp_WaitForInstrument(EnMnk* this, PlayState* play) { this->csId = 2; SET_EVENTINF(EVENTINF_24); this->picto.actor.csId = this->csIdList[2]; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; CutsceneManager_Queue(this->csIdList[2]); return; @@ -1577,7 +1577,7 @@ void EnMnk_MonkeyTiedUp_Wait(EnMnk* this, PlayState* play) { this->csId = 2; SET_EVENTINF(EVENTINF_24); this->picto.actor.csId = this->csIdList[2]; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; CutsceneManager_Queue(this->csIdList[2]); } else if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) { if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index c65ca03ba..b07a5d58c 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -81,7 +81,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { var_v1 = this->unk14A; if (var_v1 == 6) { var_v1 = 0xA; - if (gSaveContext.save.saveInfo.unk_F41 == 0) { + if (!gSaveContext.save.saveInfo.scarecrowSpawnSongSet) { return; } } @@ -89,7 +89,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { var_v1 = 0; } if (func_800B8718(&this->actor, &play->state)) { - func_80152434(play, var_v1 + 0x29); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_CHECK_HEALING + var_v1); this->actionFunc = func_8093E68C; } else { yDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y)); @@ -111,14 +111,17 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { } void func_8093E68C(EnOkarinaTag* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { this->actionFunc = func_8093E518; } else { - if ((play->msgCtx.ocarinaMode == 3) || - ((this->unk14A == -1) && - ((play->msgCtx.ocarinaMode == 5) || (play->msgCtx.ocarinaMode == 6) || (play->msgCtx.ocarinaMode == 7) || - (play->msgCtx.ocarinaMode == 8) || (play->msgCtx.ocarinaMode == 0xA) || (play->msgCtx.ocarinaMode == 9) || - (play->msgCtx.ocarinaMode == 0xF)))) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + ((this->unk14A == -1) && ((play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_TIME) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_HEALING) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_EPONAS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SOARING) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) { if (this->switchFlags >= 0) { switch (this->unk148) { case 0: @@ -136,7 +139,7 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { break; } } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); this->actionFunc = func_8093E518; } diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c index 4bac34933..4e666ed5c 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -84,14 +84,14 @@ Actor* func_80B11F44(PlayState* play) { } void func_80B11F78(EnOnpuman* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { this->actionFunc = func_80B121D8; if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Stop(this->actor.csId); } - } else if (play->msgCtx.ocarinaMode == 3) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; if (this->actor.csId != CS_ID_NONE) { CutsceneManager_Stop(this->actor.csId); } @@ -118,7 +118,7 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) { case 0x8D6: this->actionFunc = func_80B11F78; - func_80152434(play, 0x3A); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_3A); if (this->unk_2A0 != NULL) { this->unk_2A0->home.rot.x = 0; } diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index 9046f613a..eb0936ef9 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -888,7 +888,7 @@ void EnOsn_Talk(EnOsn* this, PlayState* play) { if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) { if (this->stateFlags & OSN_STATE_END_CONVERSATION) { this->stateFlags &= ~OSN_STATE_END_CONVERSATION; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnOsn_Idle; } else { diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index fe7333cf7..096b8ff38 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -304,7 +304,7 @@ void EnOssan_EndInteraction(PlayState* play, EnOssan* this) { Player* player = GET_PLAYER(play); Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -994,7 +994,7 @@ void EnOssan_SetupBuyItemWithFanfare(PlayState* play, EnOssan* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -1124,7 +1124,7 @@ void EnOssan_BuyItemWithFanfare(EnOssan* this, PlayState* play) { void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnOssan_SetupAction(this, EnOssan_ItemPurchased); if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) { diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index f22a78ec2..27f95af01 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -368,7 +368,7 @@ void EnRuppecrow_UpdatePosition(EnRuppecrow* this, PlayState* play) { s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { Player* player = GET_PLAYER(play); - if (play->msgCtx.ocarinaMode == 0x3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { switch (player->transformation) { case PLAYER_FORM_DEKU: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) { diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 3e3ecc621..a89ec608e 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -811,7 +811,7 @@ s32 EnSGoro_CheckLullaby(EnSGoro* this, PlayState* play) { s32 actorType; Player* player = GET_PLAYER(play); - if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3)) { + if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT)) { if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) { this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); @@ -1157,7 +1157,7 @@ void EnSGoro_SpringShrineGoron_Talk(EnSGoro* this, PlayState* play) { if (this->actionFlags & EN_S_GORO_ACTIONFLAG_LASTMESSAGE) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_LASTMESSAGE; this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_ENGAGED; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnSGoro_SpringShrineGoron_Idle; return; @@ -1243,7 +1243,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_BombshopGoron_NextTextId(this, play); if ((this->textId == 0x675) || (this->textId == 0x676)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Actor_OfferGetItem(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f); this->actionFunc = EnSGoro_ShopGoron_TakePayment; @@ -1288,7 +1288,7 @@ void EnSGoro_Sleep(EnSGoro* this, PlayState* play) { void EnSGoro_SleepTalk(EnSGoro* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) { if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnSGoro_Sleep; } diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index c8bc7d660..a280a94c6 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -318,7 +318,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (this->unk_328 & 1) { this->unk_328 &= ~1; - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk_328 &= ~4; @@ -341,7 +341,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { Message_StartTextbox(play, this->unk_33C, &this->actor); } else { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Rupees_ChangeBy(-this->unk_358); this->actionFunc = func_80BCB90C; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index fbd757bd5..597c2c392 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -470,7 +470,7 @@ void func_80ADBAB8(EnSellnuts* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = func_80ADBBEC; func_800B7298(play, NULL, PLAYER_CSMODE_19); @@ -516,7 +516,7 @@ void func_80ADBD64(EnSellnuts* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_338 &= ~2; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; @@ -558,7 +558,7 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) { void func_80ADBFA0(EnSellnuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->unk_34C == 0) { this->actionFunc = func_80ADB544; @@ -721,7 +721,7 @@ void func_80ADC6D0(EnSellnuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { @@ -751,7 +751,7 @@ void func_80ADC7B4(EnSellnuts* this, PlayState* play) { CutsceneManager_Queue(this->csId); } } else if ((this->unk_366 == 1) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_366 = 0; CutsceneManager_Stop(this->csId); diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 90a625c88..e5ab7dbad 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -466,7 +466,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) { this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -957,7 +957,7 @@ void EnSob1_SetupBuyItemWithFanfare(PlayState* play, EnSob1* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -1110,7 +1110,7 @@ void EnSob1_BuyItemWithFanfare(EnSob1* this, PlayState* play) { void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnSob1_SetupAction(this, EnSob1_ItemPurchased); if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) { diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index 29f53ae7c..bc0099298 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1201,7 +1201,7 @@ void func_80BAD130(EnSuttari* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->flags1 & 8) { this->actionFunc = func_80BAD004; @@ -1238,7 +1238,7 @@ void func_80BAD2B4(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD230; } else { CutsceneManager_Stop(this->csIdList[1]); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; this->actionFunc = func_80BAD380; @@ -1262,7 +1262,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_10000000; this->flags1 &= ~0x4000; CutsceneManager_Stop(this->csIdList[1]); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->flags1 |= 0x40; } @@ -1403,7 +1403,7 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { ((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 0x10; this->flags2 &= ~1; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->textId = 0; if (this->flags1 & 1) { diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index 52c6d42f9..28eeafc09 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -362,7 +362,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { Rupees_ChangeBy(-20); SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; player->stateFlags1 |= PLAYER_STATE1_20; @@ -415,7 +415,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0xA2B: // The rules of the game are a piece of cake! case 0xA2C: // I keep saying - you have to aim with [Control Stick]! case 0xA35: // You almost had it! Well...just this once...here you go! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; Interface_InitMinigame(play); @@ -450,7 +450,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) break; case 0xA34: // Perfect! Take this! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; gSaveContext.minigameStatus = MINIGAME_STATUS_END; @@ -485,7 +485,7 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags1 &= ~PLAYER_STATE1_20; CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); @@ -764,7 +764,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) this->prevTextId = 0x400; } } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; @@ -777,7 +777,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0x3FE: // Our highest score is [score]. If you break the record, you'll win a prize! case 0x400: // Our highest score is [score]. Good luck! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; this->flagsIndex = 0; @@ -827,7 +827,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) case 0x405: // No way! That was perfect! case 0x406: // That was perfect! case 0x407: // You got a new record! - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; gSaveContext.minigameStatus = MINIGAME_STATUS_END; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index e897ffefb..062f76230 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -359,7 +359,7 @@ s32 func_80A3EA30(EnTest3* this, PlayState* play) { if (this->unk_D78->unk_1 != 0) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); CutsceneManager_Queue(this->csId); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; } return false; } @@ -391,7 +391,7 @@ s32 func_80A3EB8C(EnTest3* this, PlayState* play) { if (hideoutObject != NULL) { this->player.lockOnActor = hideoutObject; } - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; return 1; } return 0; diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 3c1a5958d..e726408a5 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -48,12 +48,12 @@ static s16 sCurCsId; void func_80A41D70(EnTest4* this, PlayState* play) { if (this->csIdIndex != 0) { - func_80151A68(play, sNightMessages1[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sNightMessages1[CURRENT_DAY - 1]); } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { if (play->actorCtx.flags & ACTORCTX_FLAG_1) { Sram_IncrementDay(); gSaveContext.save.time = CLOCK_TIME(6, 0); - func_80151A68(play, sDayMessages1[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sDayMessages1[CURRENT_DAY - 1]); } else { this->csIdIndex = 0; this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; @@ -91,12 +91,12 @@ void func_80A41D70(EnTest4* this, PlayState* play) { void func_80A41FA4(EnTest4* this, PlayState* play) { if (this->csIdIndex != 0) { - func_80151A68(play, sNightMessages2[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sNightMessages2[CURRENT_DAY - 1]); } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { Sram_IncrementDay(); gSaveContext.save.time = CLOCK_TIME(6, 0); Interface_NewDay(play, CURRENT_DAY); - func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]); + Message_DisplaySceneTitleCard(play, sDayMessages2[CURRENT_DAY - 1]); D_801BDBC8 = 0xFE; func_800FB758(play); func_800FEAF4(&play->envCtx); diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index 462e1e784..bee7c94e7 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -685,7 +685,7 @@ void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play) { if (DECR(this->timer) == 0) { EnTest6_StopInvertedSoTCutscene(this, play); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } @@ -1091,7 +1091,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) { } else { gSaveContext.respawnFlag = 2; } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; return; } } else { @@ -1168,7 +1168,7 @@ void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) { play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.respawnFlag = 2; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } return; } diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index ded290262..a76d9ed47 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -116,13 +116,13 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { Actor* thisx = &this->actor; - if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { - if (thisx->csId != CS_ID_NONE) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { + if (this->actor.csId != CS_ID_NONE) { this->actionFunc = EnTimeTag_RooftopOath_Cutscene; CutsceneManager_Queue(thisx->csId); gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; } - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } @@ -186,11 +186,11 @@ void EnTimeTag_Diary_AfterOcarina(EnTimeTag* this, PlayState* play) { } void EnTimeTag_Diary_TeachEvanSongSnippets(EnTimeTag* this, PlayState* play) { - if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == 0x1B)) { + if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == MSGMODE_SONG_DEMONSTRATION_DONE)) { TIMETAG_DIARY_TIMER(&this->actor) = 5; this->actionFunc = EnTimeTag_Diary_AfterOcarina; play->msgCtx.msgLength = 0; - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; } } @@ -217,13 +217,13 @@ void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) { break; case 0x122B: // Mikau diary part 1 - func_80152434(play, 0x3F); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_SECOND_HALF); this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets; TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART1; break; case 0x122E: // Mikau diary part 3 - func_80152434(play, 0x40); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_SECOND_HALF); this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets; TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART2; break; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 61540eec0..8afe73e5e 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -290,7 +290,7 @@ void func_80AECA3C(EnTk* this, PlayState* play) { void func_80AECA90(EnTk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AEDE10(this, play); } else if (this->actor.xzDistToPlayer < 100.0f) { @@ -317,7 +317,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { this->actor.textId = 0; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AED4F8(this, play); return; @@ -691,7 +691,7 @@ void func_80AED940(EnTk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_2CA &= ~0x80; this->actor.flags &= ~ACTOR_FLAG_10000; - play->msgCtx.msgMode = 0; + play->msgCtx.msgMode = MSGMODE_NONE; play->msgCtx.msgLength = 0; func_80AEDE10(this, play); } else if (!(this->unk_2CA & 0x80)) { @@ -874,7 +874,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) { this->unk_2CA |= 2; if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x44; + play->msgCtx.msgMode = MSGMODE_PAUSED; func_80AEE2A8(this, play); } else { Audio_PlaySfx_MessageCancel(); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index d167e51fd..ce02cd835 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -151,7 +151,12 @@ static Vec3s D_80BA510C[] = { { 0xFF64, 0x0016, 0xFE7E }, }; -static u16 D_80BA5120[] = { 67, 68, 69, 70 }; +static u16 sOcarinaActionWindFishPrompts[] = { + OCARINA_ACTION_PROMPT_WIND_FISH_HUMAN, + OCARINA_ACTION_PROMPT_WIND_FISH_GORON, + OCARINA_ACTION_PROMPT_WIND_FISH_ZORA, + OCARINA_ACTION_PROMPT_WIND_FISH_DEKU, +}; static u8 D_80BA5128[] = { 8, 4, 2, 1 }; @@ -542,12 +547,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) { s32 func_80BA46D8(EnToto* this, PlayState* play) { func_800B7298(play, NULL, PLAYER_CSMODE_68); - func_80152434(play, D_80BA5120[CUR_FORM]); + Message_DisplayOcarinaStaff(play, sOcarinaActionWindFishPrompts[CUR_FORM]); return 0; } s32 func_80BA4740(EnToto* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN) { SET_WEEKEVENTREG(WEEKEVENTREG_56_10); } diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index 0eb54ed34..499a3a748 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -217,7 +217,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) { this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } Actor_ProcessTalkRequest(&this->actor, &play->state); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); this->drawCursor = 0; @@ -362,7 +362,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_PayForMushroom; break; @@ -412,7 +412,7 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_GiveRedPotionForKoume; } else { @@ -660,7 +660,7 @@ void EnTrt_SetupBuyItemWithFanfare(PlayState* play, EnTrt* this) { Player* player = GET_PLAYER(play); Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; player->stateFlags2 &= ~PLAYER_STATE2_20000000; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); @@ -999,7 +999,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) { CutsceneManager_Stop(this->csId); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; } - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_GiveRedPotionForKoume; } else { diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 40d1946fc..8bc8e2541 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -347,7 +347,7 @@ void func_80AD3CEC(EnTrt2* this, PlayState* play) { Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3D8 = false; } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); this->unk_3B2 = 4; @@ -375,7 +375,7 @@ void func_80AD3DA4(EnTrt2* this, PlayState* play) { void func_80AD3E34(EnTrt2* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (Inventory_HasEmptyBottle()) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } else { @@ -403,7 +403,7 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } @@ -447,7 +447,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) { func_80AD349C(this); func_80AD3DA4(this, play); } else { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; if (this->unk_3A8 == 0x84C) { EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); @@ -529,7 +529,7 @@ void func_80AD4550(EnTrt2* this, PlayState* play) { } if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; } } diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index cbb095279..bae88696f 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -37,8 +37,10 @@ ActorInit En_Warp_tag_InitVars = { }; // this appears to be unused, as the code never accesses it in known vanilla cases -// these unknown values get passed to a unknown z_message function -u8 D_809C1000[] = { 0x28, 0x29, 0x2A, 0x2B, 0x2D, 0x2C, 0, 0 }; +u8 D_809C1000[] = { + OCARINA_ACTION_CHECK_TIME, OCARINA_ACTION_CHECK_HEALING, OCARINA_ACTION_CHECK_EPONAS, + OCARINA_ACTION_CHECK_SOARING, OCARINA_ACTION_CHECK_SUNS, OCARINA_ACTION_CHECK_STORMS, +}; static InitChainEntry sInitChain[] = { ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE), @@ -113,7 +115,7 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { // and I doubt its set externally by another actor, so I believe this is unused // might be a bug, they might have meant to set actor flag (0x2000 0000) up above but mistyped (0x200 0000) // also WARPTAG_GET_3C0 should always return 2C0 -> 0xF for all known in-game uses, which is OOB - func_80152434(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]); // unk message function + Message_DisplayOcarinaStaff(play, D_809C1000[WARPTAG_GET_3C0(&this->dyna.actor)]); this->actionFunc = EnWarpTag_Unused809C0A20; } else { @@ -125,13 +127,13 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { * Unused ActionFunc: assigned by EnWarpTag_Unused809C09A0, no known variants use. */ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) { - if (play->msgCtx.ocarinaMode == 9) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) { func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); this->actionFunc = EnWarpTag_RespawnPlayer; CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); - } else if (play->msgCtx.ocarinaMode >= 2) { - play->msgCtx.ocarinaMode = 4; + } else if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = EnWarpTag_Unused809C09A0; } } diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index 97c381beb..fb34c3b64 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -497,7 +497,7 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) { EnWeatherTag* this = THIS; this->actionFunc(this, play); - if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) && + if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != MSGMODE_NONE) && (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (play->csCtx.state == CS_STATE_IDLE)) { diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index c9881a5e0..42bc9ffb4 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -358,7 +358,7 @@ void EnYb_Idle(EnYb* this, PlayState* play) { EnYb_UpdateAnimation(this, play); if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) && - (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && + (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { this->actionFunc = EnYb_TeachingDance; this->teachingCutsceneTimer = 200; diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index b54986829..9e6310a71 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -268,7 +268,7 @@ void func_80B9FC70(EnZob* this, s16 csIdIndex) { void func_80B9FCA0(EnZob* this, PlayState* play) { Message_CloseTextbox(play); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_80B9FC0C(this); this->unk_2F4 &= ~1; this->actionFunc = func_80BA0728; @@ -315,7 +315,7 @@ void func_80B9FE1C(EnZob* this, PlayState* play) { void func_80B9FE5C(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { play->msgCtx.msgLength = 0; this->actionFunc = func_80B9FDDC; func_80B9FC70(this, 0); @@ -331,7 +331,7 @@ void func_80B9FE5C(EnZob* this, PlayState* play) { void func_80B9FF20(EnZob* this, PlayState* play) { func_80B9F86C(this); if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) { - func_80152434(play, 0x42); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART2_SECOND_HALF); this->actionFunc = func_80B9FE5C; func_80B9FC70(this, 2); } @@ -339,11 +339,11 @@ void func_80B9FF20(EnZob* this, PlayState* play) { void func_80B9FF80(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { this->actionFunc = func_80B9FF20; this->unk_304 = 6; func_80B9F7E4(this, 1, ANIMMODE_LOOP); - func_80152434(play, 0x3E); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART2_FIRST_HALF); func_80B9FC70(this, 1); } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_11) { play->msgCtx.msgLength = 0; @@ -357,7 +357,7 @@ void func_80B9FF80(EnZob* this, PlayState* play) { void func_80BA005C(EnZob* this, PlayState* play) { func_80B9F86C(this); if (Message_GetState(&play->msgCtx) == TEXT_STATE_7) { - func_80152434(play, 0x41); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_PROMPT_EVAN_PART1_SECOND_HALF); this->actionFunc = func_80B9FF80; func_80B9FC70(this, 2); } @@ -426,7 +426,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) { break; case 0x1209: - func_80152434(play, 0x3D); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF); this->unk_304 = 4; func_80B9F7E4(this, 0, ANIMMODE_LOOP); this->actionFunc = func_80BA005C; @@ -439,7 +439,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) { } void func_80BA0318(EnZob* this, PlayState* play) { - func_80152434(play, 0x3D); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_DEMONSTRATE_EVAN_PART1_FIRST_HALF); this->unk_304 = 4; func_80B9F7E4(this, 0, ANIMMODE_LOOP); this->actionFunc = func_80BA005C; diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 2e99ccb7b..92fa313a6 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -627,7 +627,7 @@ void func_80B9451C(EnZog* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_300 = 2; this->actionFunc = func_80B94470; - } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; @@ -715,7 +715,7 @@ void func_80B948A8(EnZog* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_300 = 2; this->actionFunc = func_80B946FC; - } else if ((play->msgCtx.ocarinaMode == 3) && (this->actor.xzDistToPlayer < 120.0f)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (this->actor.xzDistToPlayer < 120.0f)) { if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { func_80B93BA8(this, 2); this->actionFunc = func_80B943C0; diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 0e3262869..8a942ce17 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -555,8 +555,8 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { func_80BBB0D4(this, play); - if (play->msgCtx.ocarinaMode == 0x2A) { - play->msgCtx.ocarinaMode = 4; + if (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_FULL_EVAN_SONG) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; this->actionFunc = func_80BBBB84; this->actor.flags |= ACTOR_FLAG_10000; Actor_OfferTalk(&this->actor, play, 120.0f); diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index e9e86668a..e17f6dc94 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1146,7 +1146,7 @@ void func_80B98BF4(EnZot* this, PlayState* play) { void func_80B98CA8(EnZot* this, PlayState* play) { if (func_800B8718(&this->actor, &play->state)) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; AudioOcarina_StartDefault(0xFFFF); this->actionFunc = func_80B98BF4; this->actor.flags |= ACTOR_FLAG_10000; diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index 5668021e3..92479cc4a 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -99,7 +99,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) { if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_80B3C260(this); } @@ -120,7 +120,7 @@ void func_80B3C4E0(ObjGhaka* this, PlayState* play) { case 2: Audio_PlaySfx_MessageCancel(); - play->msgCtx.msgMode = 0x43; + play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.stateTimer = 4; func_80B3C260(this); break; diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c index 17a277e82..b5ba51418 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -203,7 +203,7 @@ void func_80AC9AB8(ObjOcarinalift* this) { void func_80AC9AE0(ObjOcarinalift* this, PlayState* play) { if (func_800B8718(&this->dyna.actor, &play->state)) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); func_80AC9B48(this); } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_800B8804(&this->dyna.actor, play, 40.0f); @@ -216,7 +216,7 @@ void func_80AC9B48(ObjOcarinalift* this) { void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { if (func_800B886C(&this->dyna.actor, play)) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { if (play->msgCtx.lastPlayedSong == 0) { if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) { Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)); @@ -225,8 +225,8 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { func_80AC9C20(this); } } else { - if (play->msgCtx.ocarinaMode >= 2) { - play->msgCtx.ocarinaMode = 4; + if (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP) { + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } func_80AC9AB8(this); } diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index 09b95d3a0..3f556d640 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -897,7 +897,7 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) { case TEXT_STATE_CHOICE: case TEXT_STATE_5: if (Message_ShouldAdvance(play) && func_80B795A0(play, this, arg2)) { - msgCtx->msgMode = 0x43; + msgCtx->msgMode = MSGMODE_TEXT_CLOSING; ret = true; } break; diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index e3d11f2fc..62ec8f0f7 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -141,7 +141,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) { } else if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex != 0) { Audio_PlaySfx_MessageDecide(); - play->msgCtx.msgMode = 0x4D; + play->msgCtx.msgMode = MSGMODE_OWL_SAVE_0; play->msgCtx.unk120D6 = 0; play->msgCtx.unk120D4 = 0; gSaveContext.save.owlSaveLocation = OBJ_WARPSTONE_GET_ID(&this->dyna.actor); 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 6f361294e..00b4e9acf 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -39,7 +39,8 @@ void func_808A7954(ObjWturn* this) { } void func_808A7968(ObjWturn* this, PlayState* play) { - if (play->msgCtx.ocarinaMode >= 28 && play->msgCtx.ocarinaMode < 39) { + if ((play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && + (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE)) { Flags_UnsetSwitch(play, this->actor.params); Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 406e4ba0f..be5374519 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -81,11 +81,12 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) { } else { Actor_Kill(&this->actor); if ((R_TIME_SPEED != 400) && !play->msgCtx.blockSunsSong) { - if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) { + if ((play->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOTIME_DONE) || + (play->msgCtx.ocarinaMode != OCARINA_MODE_PLAYED_SUNS)) { gSaveContext.sunsSongState = SUNSSONG_START; } } else { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } } } diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index 4130dcb74..7a5cc209d 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -129,18 +129,18 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) { void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play) { s32 type = SHOTSUN_GET_TYPE(&this->actor); - if (play->msgCtx.ocarinaMode == 3) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) { switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_STORMS: if (type == SHOTSUN_FAIRY_SPAWNER_STORMS) { this->actionFunc = ShotSun_TriggerFairy; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } break; case OCARINA_SONG_SUNS: if (type == SHOTSUN_FAIRY_SPAWNER_SUNS) { this->actionFunc = ShotSun_TriggerFairy; - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; } break; } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 07e691591..57322fb0f 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -16630,10 +16630,12 @@ void Player_Action_62(Player* this, PlayState* play) { s32 func_80851C40(PlayState* play, Player* this) { return ((play->sceneId == SCENE_MILK_BAR) && Audio_IsSequencePlaying(NA_BGM_BALLAD_OF_THE_WIND_FISH)) || (((play->sceneId != SCENE_MILK_BAR) && (this->csMode == PLAYER_CSMODE_68)) || - ((play->msgCtx.msgMode == 0x12) || (play->msgCtx.msgMode == 0x13) || (play->msgCtx.msgMode == 0x14) || - ((play->msgCtx.ocarinaMode != 1) && - ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == 3) || - play->msgCtx.ocarinaAction == 0x32)))); + ((play->msgCtx.msgMode == MSGMODE_SONG_PLAYED) || + (play->msgCtx.msgMode == MSGMODE_SETUP_DISPLAY_SONG_PLAYED) || + (play->msgCtx.msgMode == MSGMODE_DISPLAY_SONG_PLAYED) || + ((play->msgCtx.ocarinaMode != OCARINA_MODE_ACTIVE) && + ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) || + play->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE)))); } // Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z @@ -16653,7 +16655,7 @@ void func_80851D30(PlayState* play, Player* this) { *var_s0 = sp50.x; var_s0++; } - } else if (play->msgCtx.ocarinaMode == 1) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { var_s0[play->msgCtx.ocarinaButtonIndex] = 1.2f; func_8082DB90(play, this, D_8085D190[this->transformation]); @@ -16738,7 +16740,7 @@ void func_808521E0(PlayState* play, Player* this) { } func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); - } else if (play->msgCtx.ocarinaMode == 1) { + } else if (play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) { if (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID) { func_80851EC8(play, this); } @@ -16760,7 +16762,8 @@ void func_80852290(PlayState* play, Player* this) { s16 var_a1_3; s16 sp38; - if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { + if ((play->msgCtx.ocarinaMode == OCARINA_MODE_ACTIVE) && + (play->msgCtx.ocarinaButtonIndex != OCARINA_BTN_INVALID)) { if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { this->unk_A90->flags |= ACTOR_FLAG_20000000; this->unk_A94 = 0.0f; @@ -16841,10 +16844,10 @@ void Player_Action_63(Player* this, PlayState* play) { ((this->skelAnime.mode == 0) && (this->actionVar2 == 0)))) { func_808525C4(play, this); if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) { - func_80152434(play, 1); + Message_DisplayOcarinaStaff(play, OCARINA_ACTION_FREE_PLAY); } } else if (this->actionVar2 != 0) { - if (play->msgCtx.ocarinaMode == 4) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_END) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); this->actor.flags &= ~ACTOR_FLAG_20000000; @@ -16860,12 +16863,15 @@ void Player_Action_63(Player* this, PlayState* play) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } } else { - s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27); + s32 var_v1 = (play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && + (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE); s32 pad[2]; - if (var_v1 || (play->msgCtx.ocarinaMode == 0x16) || (play->msgCtx.ocarinaMode == 0x1A) || - (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) { - if (play->msgCtx.ocarinaMode == 0x16) { + if (var_v1 || (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_DOUBLE_SOT) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_FAST) || + (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_INV_SOT_SLOW)) { + if (play->msgCtx.ocarinaMode == OCARINA_MODE_APPLY_SOT) { if (!func_8082DA90(play)) { if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) { play->nextEntrance = ENTRANCE(CUTSCENE, 1); @@ -16896,7 +16902,8 @@ void Player_Action_63(Player* this, PlayState* play) { Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); } } - } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { + } else if ((play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { play->interfaceCtx.unk_222 = 0; CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); @@ -18114,7 +18121,7 @@ void Player_Action_87(Player* this, PlayState* play) { void Player_Action_88(Player* this, PlayState* play) { if (this->actionVar2++ > 90) { - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; func_8085B384(this, play); } else if (this->actionVar2 == 10) { func_80848640(play, this); @@ -19814,7 +19821,7 @@ void Player_CsAction_4(PlayState* play, Player* this, CsCmdActorCue* cue) { PlayerAnimation_Update(play, &this->skelAnime); if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; - Message_BombersNotebookQueueEvent(play, 0x1B); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT); Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 6b451b506..c99e6d718 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -2799,10 +2799,14 @@ void KaleidoScope_UpdateOpening(PlayState* play) { } } +u16 sCursorPointsToOcarinaModes[] = { + OCARINA_MODE_WARP_TO_GREAT_BAY_COAST, OCARINA_MODE_WARP_TO_ZORA_CAPE, OCARINA_MODE_WARP_TO_SNOWHEAD, + OCARINA_MODE_WARP_TO_MOUNTAIN_VILLAGE, OCARINA_MODE_WARP_TO_SOUTH_CLOCK_TOWN, OCARINA_MODE_WARP_TO_MILK_ROAD, + OCARINA_MODE_WARP_TO_WOODFALL, OCARINA_MODE_WARP_TO_SOUTHERN_SWAMP, OCARINA_MODE_WARP_TO_IKANA_CANYON, + OCARINA_MODE_WARP_TO_STONE_TOWER, +}; + void KaleidoScope_Update(PlayState* play) { - static u16 sCursorPointsToOcarinaModes[] = { - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - }; static s16 sUnpausedHudVisibility = HUD_VISIBILITY_IDLE; static s16 sNextMainState = PAUSE_MAIN_STATE_IDLE; static s16 sDelayTimer = 10; @@ -3484,7 +3488,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) { Audio_PlaySfx(NA_SE_SY_DECIDE); @@ -3498,7 +3502,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_OWLWARP_CONFIRM: if (CHECK_BTN_ALL(input->press.button, BTN_A)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; if (msgCtx->choiceIndex == 0) { func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; @@ -3513,17 +3517,17 @@ void KaleidoScope_Update(PlayState* play) { } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT; Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS); } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) { msgCtx->msgLength = 0; - msgCtx->msgMode = 0; + msgCtx->msgMode = MSGMODE_NONE; func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_CLOSE); - play->msgCtx.ocarinaMode = 4; + play->msgCtx.ocarinaMode = OCARINA_MODE_END; gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; } break; @@ -3598,7 +3602,7 @@ void KaleidoScope_Update(PlayState* play) { MsgEvent_SendNullTask(); func_80143324(play, &play->skyboxCtx, play->skyboxId); - if ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF)) { + if ((msgCtx->msgMode != MSGMODE_NONE) && (msgCtx->currentTextId == 0xFF)) { func_80115844(play, DO_ACTION_STOP); func_8011552C(play, DO_ACTION_STOP); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 8a60d1f66..79ab56b45 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2820,15 +2820,15 @@ 0x80147314:("func_80147314",), 0x80147414:("func_80147414",), 0x8014750C:("Sram_nop8014750C",), - 0x80147520:("func_80147520",), - 0x80147564:("func_80147564",), + 0x80147520:("Message_ResetOcarinaButtonAlphas",), + 0x80147564:("Message_ResetOcarinaButtonState",), 0x80147624:("Message_ShouldAdvance",), 0x80147734:("Message_ShouldAdvanceSilent",), 0x801477B4:("Message_CloseTextbox",), - 0x80147818:("func_80147818",), + 0x80147818:("Message_DrawTextboxIcon",), 0x80147F18:("func_80147F18",), 0x80148558:("func_80148558",), - 0x80148B98:("func_80148B98",), + 0x80148B98:("Message_HandleChoiceSelection",), 0x80148CBC:("func_80148CBC",), 0x80148D64:("func_80148D64",), 0x80149048:("func_80149048",), @@ -2836,43 +2836,43 @@ 0x80149454:("func_80149454",), 0x801496C8:("func_801496C8",), 0x8014995C:("Message_DrawTextChar",), - 0x80149C18:("func_80149C18",), + 0x80149C18:("Message_GrowTextbox",), 0x80149EBC:("Message_FindMessage",), 0x80149F74:("Message_DrawItemIcon",), 0x8014AAD0:("Message_HandleOcarina",), - 0x8014ADBC:("func_8014ADBC",), + 0x8014ADBC:("Message_DrawTextDefault",), 0x8014C70C:("Message_LoadItemIcon",), 0x8014CC14:("Message_LoadChar",), 0x8014CCB4:("func_8014CCB4",), - 0x8014CDF0:("func_8014CDF0",), + 0x8014CDF0:("Message_GetTimerDigits",), 0x8014CFDC:("Message_SetupLoadItemIcon",), - 0x8014D304:("func_8014D304",), - 0x8014D62C:("func_8014D62C",), - 0x8014D7B4:("func_8014D7B4",), + 0x8014D304:("Message_LoadTime",), + 0x8014D62C:("Message_LoadOwlWarpText",), + 0x8014D7B4:("Message_Decode",), 0x80150A84:("func_80150A84",), - 0x80150D08:("func_80150D08",), + 0x80150D08:("Message_OpenText",), 0x801514B0:("func_801514B0",), 0x801518B0:("Message_StartTextbox",), 0x80151938:("Message_ContinueTextbox",), - 0x80151A68:("func_80151A68",), + 0x80151A68:("Message_DisplaySceneTitleCard",), 0x80151BB4:("Message_BombersNotebookQueueEvent",), - 0x80151C9C:("func_80151C9C",), - 0x80151DA4:("func_80151DA4",), - 0x80152434:("func_80152434",), - 0x80152464:("func_80152464",), + 0x80151C9C:("Message_BombersNotebookProcessEventQueue",), + 0x80151DA4:("Message_DisplayOcarinaStaffImpl",), + 0x80152434:("Message_DisplayOcarinaStaff",), + 0x80152464:("Message_DisplayOcarinaStaffBlockSunsSong",), 0x80152498:("Message_GetState",), - 0x8015268C:("func_8015268C",), - 0x80152C64:("func_80152C64",), + 0x8015268C:("Message_DrawTextBox",), + 0x80152C64:("Message_SetView",), 0x80152CAC:("func_80152CAC",), - 0x80152EC0:("func_80152EC0",), - 0x80152FB8:("func_80152FB8",), - 0x80153750:("func_80153750",), - 0x80153E7C:("func_80153E7C",), - 0x80153EF0:("func_80153EF0",), - 0x801541D4:("func_801541D4",), + 0x80152EC0:("Message_SpawnSongEffect",), + 0x80152FB8:("Message_FlashOcarinaButtons",), + 0x80153750:("Message_DrawOcarinaButtons",), + 0x80153E7C:("Message_DrawText",), + 0x80153EF0:("Message_DrawSceneTitleCard",), + 0x801541D4:("Message_DrawMain",), 0x80156758:("Message_Draw",), 0x8015680C:("Message_Update",), - 0x801586A4:("func_801586A4",), + 0x801586A4:("Message_SetTables",), 0x801586D4:("Message_Init",), 0x801588D0:("Message_FindMessageNES",), 0x80158988:("Message_LoadCharNES",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 5aaa2f1d0..6f243b124 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1941,44 +1941,34 @@ 0x801C6A50:("D_801C6A50","UNK_TYPE1","",0x1), 0x801C6A58:("D_801C6A58","UNK_TYPE1","",0x1), 0x801C6A70:("D_801C6A70","UNK_TYPE1","",0x1), - 0x801C6A74:("D_801C6A74","UNK_TYPE2","",0x2), - 0x801C6A78:("D_801C6A78","UNK_TYPE2","",0x2), - 0x801C6A7C:("D_801C6A7C","UNK_TYPE2","",0x2), - 0x801C6A80:("D_801C6A80","UNK_TYPE2","",0x2), - 0x801C6A84:("D_801C6A84","UNK_TYPE2","",0x2), - 0x801C6A88:("D_801C6A88","UNK_TYPE2","",0x2), - 0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2), - 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), + 0x801C6A74:("sOcarinaButtonIndexBufPos","UNK_TYPE2","",0x2), + 0x801C6A78:("sOcarinaButtonIndexBufLen","UNK_TYPE2","",0x2), + 0x801C6A7C:("sLastPlayedSong","UNK_TYPE2","",0x2), + 0x801C6A80:("sOcarinaButtonStepR","UNK_TYPE2","",0x2), + 0x801C6A84:("sOcarinaButtonStepG","UNK_TYPE2","",0x2), + 0x801C6A88:("sOcarinaButtonStepB","UNK_TYPE2","",0x2), + 0x801C6A8C:("sOcarinaButtonFlashTimer","UNK_TYPE2","",0x2), + 0x801C6A90:("sOcarinaButtonFlashColorIndex","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), 0x801C6AB8:("sBombersNotebookEventMessages","UNK_TYPE1","",0x1), 0x801C6B28:("gBombersNotebookWeekEventFlags","UNK_TYPE1","",0x1), 0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1), - 0x801CED40:("D_801CED40","UNK_TYPE1","",0x1), 0x801CFB08:("D_801CFB08","UNK_TYPE1","",0x1), - 0x801CFC78:("D_801CFC78","UNK_TYPE2","",0x2), - 0x801CFC7A:("D_801CFC7A","UNK_TYPE1","",0x1), - 0x801CFC7C:("D_801CFC7C","UNK_TYPE1","",0x1), - 0x801CFC7E:("D_801CFC7E","UNK_TYPE1","",0x1), - 0x801CFC84:("D_801CFC84","UNK_TYPE1","",0x1), - 0x801CFC88:("D_801CFC88","UNK_TYPE1","",0x1), - 0x801CFC8C:("D_801CFC8C","UNK_TYPE1","",0x1), - 0x801CFC8E:("D_801CFC8E","UNK_TYPE1","",0x1), - 0x801CFC92:("D_801CFC92","UNK_TYPE1","",0x1), - 0x801CFC98:("D_801CFC98","UNK_TYPE1","",0x1), - 0x801CFCA4:("D_801CFCA4","UNK_TYPE2","",0x2), - 0x801CFCAC:("D_801CFCAC","UNK_TYPE2","",0x2), + 0x801CFC78:("D_801CFC78","s16","[15]",0x1E), + 0x801CFC98:("sOcarinaButtonIndexBuf","UNK_TYPE1","",0x1), + 0x801CFCA4:("sOcarinaButtonAlphaValues","UNK_TYPE2","",0x2), 0x801CFCB8:("gOcarinaSongItemMap","UNK_TYPE1","",0x1), - 0x801CFCD8:("D_801CFCD8","UNK_TYPE2","",0x2), - 0x801CFCE4:("D_801CFCE4","UNK_TYPE2","",0x2), - 0x801CFCF0:("D_801CFCF0","UNK_TYPE2","",0x2), - 0x801CFCF4:("D_801CFCF4","UNK_TYPE2","",0x2), - 0x801CFCF8:("D_801CFCF8","UNK_TYPE2","",0x2), - 0x801CFCFC:("D_801CFCFC","UNK_TYPE2","",0x2), - 0x801CFD00:("D_801CFD00","UNK_TYPE2","",0x2), - 0x801CFD04:("D_801CFD04","UNK_TYPE2","",0x2), - 0x801CFD08:("D_801CFD08","UNK_TYPE2","",0x2), - 0x801CFD0C:("D_801CFD0C","UNK_TYPE2","",0x2), + 0x801CFCD8:("sIconPrimColors","UNK_TYPE2","",0x2), + 0x801CFCE4:("sIconEnvColors","UNK_TYPE2","",0x2), + 0x801CFCF0:("sIconPrimR","UNK_TYPE2","",0x2), + 0x801CFCF4:("sIconPrimG","UNK_TYPE2","",0x2), + 0x801CFCF8:("sIconPrimB","UNK_TYPE2","",0x2), + 0x801CFCFC:("sIconFlashTimer","UNK_TYPE2","",0x2), + 0x801CFD00:("sIconFlashColorIndex","UNK_TYPE2","",0x2), + 0x801CFD04:("sIconEnvR","UNK_TYPE2","",0x2), + 0x801CFD08:("sIconEnvG","UNK_TYPE2","",0x2), + 0x801CFD0C:("sIconEnvB","UNK_TYPE2","",0x2), 0x801CFD10:("D_801CFD10","UNK_TYPE2","",0x2), 0x801CFD1C:("D_801CFD1C","UNK_TYPE2","",0x2), 0x801CFD28:("D_801CFD28","UNK_TYPE2","",0x2), @@ -1999,24 +1989,24 @@ 0x801CFD74:("D_801CFD74","UNK_TYPE2","",0x2), 0x801CFD78:("D_801CFD78","UNK_TYPE2","",0x2), 0x801CFD7C:("D_801CFD7C","UNK_TYPE2","",0x2), - 0x801CFD80:("D_801CFD80","UNK_TYPE2","",0x2), - 0x801CFD84:("D_801CFD84","UNK_TYPE2","",0x2), - 0x801CFD88:("D_801CFD88","UNK_TYPE2","",0x2), - 0x801CFD8C:("D_801CFD8C","UNK_TYPE2","",0x2), - 0x801CFD90:("D_801CFD90","UNK_TYPE2","",0x2), - 0x801CFD94:("D_801CFD94","UNK_PTR","",0x4), - 0x801CFD98:("D_801CFD98","UNK_TYPE2","",0x2), - 0x801CFD9C:("D_801CFD9C","UNK_TYPE2","",0x2), - 0x801CFDA0:("D_801CFDA0","UNK_TYPE2","",0x2), + 0x801CFD80:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD84:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD88:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD8C:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD90:("sAnalogStickHeld","UNK_TYPE2","",0x2), + 0x801CFD94:("sTextboxWidth","UNK_PTR","",0x4), + 0x801CFD98:("sTextboxHeight","UNK_TYPE2","",0x2), + 0x801CFD9C:("sTextboxTexWidth","UNK_TYPE2","",0x2), + 0x801CFDA0:("sTextboxTexHeight","UNK_TYPE2","",0x2), 0x801CFDA4:("D_801CFDA4","UNK_TYPE1","",0x1), 0x801CFDC8:("D_801CFDC8","UNK_TYPE1","",0x1), 0x801CFDEC:("D_801CFDEC","UNK_TYPE1","",0x1), 0x801CFE04:("D_801CFE04","UNK_TYPE1","",0x1), 0x801CFE1C:("D_801CFE1C","UNK_TYPE1","",0x1), 0x801CFE34:("D_801CFE34","UNK_TYPE1","",0x1), - 0x801CFE4C:("D_801CFE4C","UNK_TYPE1","",0x1), - 0x801CFE5C:("D_801CFE5C","UNK_TYPE1","",0x1), - 0x801CFE68:("D_801CFE68","UNK_TYPE1","",0x1), + 0x801CFE4C:("sStrayFairyIconTextures","UNK_TYPE1","",0x1), + 0x801CFE5C:("sStrayFairyIconPrimColors","UNK_TYPE1","",0x1), + 0x801CFE68:("sStrayFairyIconEnvColors","UNK_TYPE1","",0x1), 0x801CFE74:("D_801CFE74","UNK_TYPE1","",0x1), 0x801CFEA4:("D_801CFEA4","UNK_TYPE1","",0x1), 0x801CFED4:("D_801CFED4","UNK_TYPE1","",0x1), @@ -2027,59 +2017,38 @@ 0x801CFF7C:("D_801CFF7C","UNK_TYPE1","",0x1), 0x801CFF88:("D_801CFF88","UNK_TYPE1","",0x1), 0x801CFF94:("D_801CFF94","UNK_TYPE1","",0x1), - 0x801D0000:("D_801D0000","UNK_TYPE1","",0x1), - 0x801D0001:("D_801D0001","UNK_TYPE1","",0x1), - 0x801D001F:("D_801D001F","UNK_TYPE1","",0x1), - 0x801D0188:("D_801D0188","UNK_TYPE1","",0x1), - 0x801D023A:("D_801D023A","UNK_TYPE1","",0x1), - 0x801D0250:("D_801D0250","UNK_TYPE1","",0x1), + 0x801D0188:("sOwlWarpTextJPN","UNK_TYPE1","",0x1), + 0x801D0250:("sOwlWarpTextLengthJPN","UNK_TYPE1","",0x1), 0x801D0268:("D_801D0268","UNK_TYPE2","",0x2), 0x801D027C:("D_801D027C","UNK_TYPE1","",0x1), 0x801D0284:("D_801D0284","UNK_TYPE1","",0x1), 0x801D028C:("D_801D028C","UNK_TYPE1","",0x1), - 0x801D02C0:("D_801D02C0","UNK_TYPE1","",0x1), - 0x801D02D8:("D_801D02D8","UNK_TYPE1","",0x1), - 0x801D02F8:("D_801D02F8","UNK_TYPE1","",0x1), + 0x801D02C0:("sOcarinaSongFlagsMap","UNK_TYPE1","",0x1), + 0x801D02D8:("sOcarinaEffectActorIds","UNK_TYPE1","",0x1), + 0x801D02F8:("sOcarinaEffectActorParams","UNK_TYPE1","",0x1), 0x801D0330:("D_801D0330","UNK_TYPE1","",0x1), - 0x801D0334:("D_801D0334","UNK_TYPE1","",0x1), - 0x801D0340:("D_801D0340","UNK_TYPE1","",0x1), - 0x801D034C:("D_801D034C","UNK_TYPE1","",0x1), - 0x801D0358:("D_801D0358","UNK_TYPE1","",0x1), - 0x801D0364:("D_801D0364","UNK_TYPE1","",0x1), - 0x801D0378:("D_801D0378","UNK_TYPE1","",0x1), - 0x801D039C:("D_801D039C","UNK_TYPE1","",0x8), - 0x801D03A4:("D_801D03A4","UNK_TYPE1","",0x1), + 0x801D0334:("sOcarinaButtonAPrimColors","UNK_TYPE1","",0x1), + 0x801D0340:("sOcarinaButtonAEnvColors","UNK_TYPE1","",0x1), + 0x801D034C:("sOcarinaButtonCPrimColors","UNK_TYPE1","",0x1), + 0x801D0358:("sOcarinaButtonCEnvColors","UNK_TYPE1","",0x1), + 0x801D0364:("sOcarinaButtonTextures","UNK_TYPE1","",0x1), + 0x801D0378:("sOcarinaSongFanfares","UNK_TYPE1","",0x1), + 0x801D039C:("sOcarinaSongFanfareIoData","UNK_TYPE1","",0x8), + 0x801D03A4:("sPlayerFormOcarinaInstruments","UNK_TYPE1","",0x1), 0x801D03A8:("D_801D03A8","UNK_TYPE1","",0x1), - 0x801D03C8:("D_801D03C8","UNK_TYPE1","",0x1), - 0x801D03E8:("D_801D03E8","UNK_TYPE1","",0x1), - 0x801D03F0:("D_801D03F0","UNK_TYPE1","",0x1), - 0x801D0408:("D_801D0408","UNK_TYPE1","",0x1), - 0x801D0428:("D_801D0428","UNK_TYPE1","",0x1), - 0x801D045A:("D_801D045A","UNK_TYPE1","",0x1), - 0x801D0462:("D_801D0462","UNK_TYPE1","",0x1), + 0x801D03C8:("sTextboxXPositions","UNK_TYPE1","",0x20), + 0x801D03E8:("sTextboxLowerYPositions","UNK_TYPE1","",0x20), + 0x801D0408:("sTextboxUpperYPositions","UNK_TYPE1","",0x1), + 0x801D0428:("sTextboxMidYPositions","UNK_TYPE1","",0x1), + 0x801D0448:("D_801D0448","s16","[10]",0x14), + 0x801D045C:("D_801D045C","s16","[3]",0x8), + 0x801D0464:("D_801D0464","s16","[2]",0x4), 0x801D0468:("D_801D0468","UNK_TYPE1","",0x1), 0x801D0470:("sNESFontWidths","UNK_TYPE1","",0x1), 0x801D06F0:("sRupeesTextLocalization","char","[]",0x18), - 0x801D0708:("D_801D0708","char","[]",1), 0x801D0710:("sRupeesTextLength","UNK_TYPE1","",0x1), - 0x801D0714:("D_801D0714","char","[]",0x1), - 0x801D0724:("D_801D0724","char","[]",0x1), - 0x801D0730:("D_801D0730","char","[]",0x1), - 0x801D0734:("D_801D0734","char","[]",0x1), - 0x801D0740:("D_801D0740","char","[]",0x1), - 0x801D0744:("D_801D0744","char","[]",0x1), - 0x801D0760:("D_801D0760","char","[]",0x1), - 0x801D0764:("D_801D0764","char","[]",0x1), - 0x801D0770:("D_801D0770","char","[]",0x1), - 0x801D0774:("D_801D0774","char","[]",0x1), - 0x801D0780:("D_801D0780","char","[]",0x1), - 0x801D0784:("D_801D0784","char","[]",0x1), - 0x801D0794:("D_801D0794","char","[]",0x1), - 0x801D07A4:("D_801D07A4","char","[]",0x1), - 0x801D07B0:("D_801D07B0","char","[]",0x1), - 0x801D07B4:("D_801D07B4","char","[]",0x1), - 0x801D07C0:("D_801D07C0","char","[]",0x1), - 0x801D07C4:("D_801D07C4","UNK_TYPE1","",0x1), + 0x801D0714:("sOwlWarpTextENG","char","[]",0xB0), + 0x801D07C4:("sOwlWarpTextLengthENG","UNK_TYPE1","",0x16), 0x801D07DC:("D_801D07DC","UNK_TYPE1","",0x1), 0x801D080C:("D_801D080C","UNK_TYPE1","",0x1), 0x801D083C:("D_801D083C","UNK_TYPE1","",0x1), @@ -2090,6 +2059,7 @@ 0x801D08E4:("D_801D08E4","UNK_TYPE1","",0x1), 0x801D08E8:("sMaskCodeTextENG","UNK_TYPE1","",0x1), 0x801D0900:("sMaskCodeTextLengthENG","UNK_TYPE1","",0x1), + 0x801D0910:("sCreditsFontWidths","f32","[]",0x1), 0x801D0B50:("Player_InitVars","ActorInit","",0x20), 0x801D0B70:("gKaleidoMgrOverlayTable","KaleidoMgrOverlay","",0x38), 0x801D0BA8:("sKaleidoAreaPtr","void*","",0x4), @@ -3982,21 +3952,21 @@ 0x801F6AE0:("sSkyboxDrawMatrix","Mtx*","",0x4), 0x801F6AF0:("D_801F6AF0","UNK_TYPE1","",0x1), 0x801F6AF2:("D_801F6AF2","UNK_TYPE1","",0x1), - 0x801F6B00:("D_801F6B00","UNK_TYPE4","",0x4), - 0x801F6B04:("D_801F6B04","UNK_TYPE4","",0x4), + 0x801F6B00:("sCharTexSize","UNK_TYPE4","",0x4), + 0x801F6B04:("sCharTexScale","UNK_TYPE4","",0x4), 0x801F6B08:("D_801F6B08","UNK_TYPE4","",0x4), - 0x801F6B0C:("D_801F6B0C","UNK_TYPE1","",0x1), - 0x801F6B0E:("D_801F6B0E","UNK_TYPE1","",0x1), - 0x801F6B10:("D_801F6B10","UNK_TYPE1","",0x1), - 0x801F6B12:("D_801F6B12","UNK_TYPE1","",0x1), - 0x801F6B14:("D_801F6B14","UNK_TYPE1","",0x1), - 0x801F6B16:("D_801F6B16","UNK_TYPE1","",0x1), - 0x801F6B18:("D_801F6B18","UNK_TYPE1","",0x1), - 0x801F6B1A:("D_801F6B1A","UNK_TYPE1","",0x1), - 0x801F6B1C:("D_801F6B1C","UNK_TYPE1","",0x1), - 0x801F6B1E:("D_801F6B1E","UNK_TYPE1","",0x1), - 0x801F6B20:("D_801F6B20","UNK_TYPE1","",0x1), - 0x801F6B22:("D_801F6B22","UNK_TYPE1","",0x1), + 0x801F6B0C:("sOcarinaButtonAPrimR","UNK_TYPE1","",0x1), + 0x801F6B0E:("sOcarinaButtonAPrimB","UNK_TYPE1","",0x1), + 0x801F6B10:("sOcarinaButtonAPrimG","UNK_TYPE1","",0x1), + 0x801F6B12:("sOcarinaButtonAEnvR","UNK_TYPE1","",0x1), + 0x801F6B14:("sOcarinaButtonAEnvB","UNK_TYPE1","",0x1), + 0x801F6B16:("sOcarinaButtonAEnvG","UNK_TYPE1","",0x1), + 0x801F6B18:("sOcarinaButtonCPrimR","UNK_TYPE1","",0x1), + 0x801F6B1A:("sOcarinaButtonCPrimB","UNK_TYPE1","",0x1), + 0x801F6B1C:("sOcarinaButtonCPrimG","UNK_TYPE1","",0x1), + 0x801F6B1E:("sOcarinaButtonCEnvR","UNK_TYPE1","",0x1), + 0x801F6B20:("sOcarinaButtonCEnvB","UNK_TYPE1","",0x1), + 0x801F6B22:("sOcarinaButtonCEnvG","UNK_TYPE1","",0x1), 0x801F6B30:("sPlayerCallInitFunc","UNK_TYPE1","",0x1), 0x801F6B34:("sPlayerCallDestroyFunc","UNK_TYPE1","",0x1), 0x801F6B38:("sPlayerCallUpdateFunc","UNK_TYPE1","",0x1), @@ -15291,7 +15261,7 @@ 0x80BA50BC:("D_80BA50BC","UNK_TYPE1","",0x1), 0x80BA50DC:("D_80BA50DC","UNK_TYPE1","",0x1), 0x80BA510C:("D_80BA510C","UNK_TYPE1","",0x1), - 0x80BA5120:("D_80BA5120","UNK_TYPE2","",0x2), + 0x80BA5120:("sOcarinaActionWindFishPrompts","UNK_TYPE2","",0x2), 0x80BA5128:("D_80BA5128","UNK_TYPE1","",0x1), 0x80BA512C:("D_80BA512C","UNK_PTR","",0x4), 0x80BA5174:("D_80BA5174","UNK_PTR","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index 7fb2fe912..43e554975 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1104,7 +1104,7 @@ wordReplace = { "play->msgCtx.unk12023": "play->msgCtx.stateTimer", "play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode", "play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction", - "play->msgCtx.unk12048": "play->msgCtx.lastOcarinaButtonIndex", + "play->msgCtx.unk12048": "play->msgCtx.ocarinaButtonIndex", "play->msgCtx.unk120B0": "play->msgCtx.ocarinaSongEffectActive", "play->msgCtx.unk12046": "play->msgCtx.blockSunsSong", "play->msgCtx.unk12090": "play->msgCtx.textIsCredits", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 3e6042f03..762334814 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2334,59 +2334,59 @@ asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWr asm/non_matchings/code/z_sram_NES/func_80147314.s,func_80147314,0x80147314,0x40 asm/non_matchings/code/z_sram_NES/func_80147414.s,func_80147414,0x80147414,0x3E asm/non_matchings/code/z_sram_NES/Sram_nop8014750C.s,Sram_nop8014750C,0x8014750C,0x5 -asm/non_matchings/code/z_message/func_80147520.s,func_80147520,0x80147520,0x11 -asm/non_matchings/code/z_message/func_80147564.s,func_80147564,0x80147564,0x30 +asm/non_matchings/code/z_message/Message_ResetOcarinaButtonAlphas.s,Message_ResetOcarinaButtonAlphas,0x80147520,0x11 +asm/non_matchings/code/z_message/Message_ResetOcarinaButtonState.s,Message_ResetOcarinaButtonState,0x80147564,0x30 asm/non_matchings/code/z_message/Message_ShouldAdvance.s,Message_ShouldAdvance,0x80147624,0x44 asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s,Message_ShouldAdvanceSilent,0x80147734,0x20 asm/non_matchings/code/z_message/Message_CloseTextbox.s,Message_CloseTextbox,0x801477B4,0x19 -asm/non_matchings/code/z_message/func_80147818.s,func_80147818,0x80147818,0x1C0 +asm/non_matchings/code/z_message/Message_DrawTextboxIcon.s,Message_DrawTextboxIcon,0x80147818,0x1C0 asm/non_matchings/code/z_message/func_80147F18.s,func_80147F18,0x80147F18,0x190 asm/non_matchings/code/z_message/func_80148558.s,func_80148558,0x80148558,0x190 -asm/non_matchings/code/z_message/func_80148B98.s,func_80148B98,0x80148B98,0x49 +asm/non_matchings/code/z_message/Message_HandleChoiceSelection.s,Message_HandleChoiceSelection,0x80148B98,0x49 asm/non_matchings/code/z_message/func_80148CBC.s,func_80148CBC,0x80148CBC,0x2A asm/non_matchings/code/z_message/func_80148D64.s,func_80148D64,0x80148D64,0xB9 asm/non_matchings/code/z_message/func_80149048.s,func_80149048,0x80149048,0x65 asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5 -asm/non_matchings/code/z_message/func_8014995C.s,func_8014995C,0x8014995C,0xAF -asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149C18,0xA9 +asm/non_matchings/code/z_message/Message_DrawTextChar.s,Message_DrawTextChar,0x8014995C,0xAF +asm/non_matchings/code/z_message/Message_GrowTextbox.s,Message_GrowTextbox,0x80149C18,0xA9 asm/non_matchings/code/z_message/Message_FindMessage.s,Message_FindMessage,0x80149EBC,0x2E asm/non_matchings/code/z_message/Message_DrawItemIcon.s,Message_DrawItemIcon,0x80149F74,0x2D7 -asm/non_matchings/code/z_message/func_8014AAD0.s,func_8014AAD0,0x8014AAD0,0xBB -asm/non_matchings/code/z_message/func_8014ADBC.s,func_8014ADBC,0x8014ADBC,0x654 -asm/non_matchings/code/z_message/func_8014C70C.s,func_8014C70C,0x8014C70C,0x142 +asm/non_matchings/code/z_message/Message_HandleOcarina.s,Message_HandleOcarina,0x8014AAD0,0xBB +asm/non_matchings/code/z_message/Message_DrawTextDefault.s,Message_DrawTextDefault,0x8014ADBC,0x654 +asm/non_matchings/code/z_message/Message_LoadItemIcon.s,Message_LoadItemIcon,0x8014C70C,0x142 asm/non_matchings/code/z_message/Message_LoadChar.s,Message_LoadChar,0x8014CC14,0x28 asm/non_matchings/code/z_message/func_8014CCB4.s,func_8014CCB4,0x8014CCB4,0x4F -asm/non_matchings/code/z_message/func_8014CDF0.s,func_8014CDF0,0x8014CDF0,0x7B +asm/non_matchings/code/z_message/Message_GetTimerDigits.s,Message_GetTimerDigits,0x8014CDF0,0x7B asm/non_matchings/code/z_message/Message_SetupLoadItemIcon.s,Message_SetupLoadItemIcon,0x8014CFDC,0xCA -asm/non_matchings/code/z_message/func_8014D304.s,func_8014D304,0x8014D304,0xCA -asm/non_matchings/code/z_message/func_8014D62C.s,func_8014D62C,0x8014D62C,0x62 -asm/non_matchings/code/z_message/func_8014D7B4.s,func_8014D7B4,0x8014D7B4,0xCB4 +asm/non_matchings/code/z_message/Message_LoadTime.s,Message_LoadTime,0x8014D304,0xCA +asm/non_matchings/code/z_message/Message_LoadOwlWarpText.s,Message_LoadOwlWarpText,0x8014D62C,0x62 +asm/non_matchings/code/z_message/Message_Decode.s,Message_Decode,0x8014D7B4,0xCB4 asm/non_matchings/code/z_message/func_80150A84.s,func_80150A84,0x80150A84,0xA1 -asm/non_matchings/code/z_message/func_80150D08.s,func_80150D08,0x80150D08,0x1EA +asm/non_matchings/code/z_message/Message_OpenText.s,Message_OpenText,0x80150D08,0x1EA asm/non_matchings/code/z_message/func_801514B0.s,func_801514B0,0x801514B0,0x100 asm/non_matchings/code/z_message/Message_StartTextbox.s,Message_StartTextbox,0x801518B0,0x22 asm/non_matchings/code/z_message/Message_ContinueTextbox.s,Message_ContinueTextbox,0x80151938,0x4C -asm/non_matchings/code/z_message/func_80151A68.s,func_80151A68,0x80151A68,0x53 +asm/non_matchings/code/z_message/Message_DisplaySceneTitleCard.s,Message_DisplaySceneTitleCard,0x80151A68,0x53 asm/non_matchings/code/z_message/Message_BombersNotebookQueueEvent.s,Message_BombersNotebookQueueEvent,0x80151BB4,0x3A -asm/non_matchings/code/z_message/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42 -asm/non_matchings/code/z_message/func_80151DA4.s,func_80151DA4,0x80151DA4,0x1A4 -asm/non_matchings/code/z_message/func_80152434.s,func_80152434,0x80152434,0xC -asm/non_matchings/code/z_message/func_80152464.s,func_80152464,0x80152464,0xD +asm/non_matchings/code/z_message/Message_BombersNotebookProcessEventQueue.s,func_80151C9C,0x80151C9C,0x42 +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffImpl.s,Message_DisplayOcarinaStaffImpl,0x80151DA4,0x1A4 +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaff.s,Message_DisplayOcarinaStaff,0x80152434,0xC +asm/non_matchings/code/z_message/Message_DisplayOcarinaStaffBlockSunsSong.s,Message_DisplayOcarinaStaffBlockSunsSong,0x80152464,0xD asm/non_matchings/code/z_message/Message_GetState.s,Message_GetState,0x80152498,0x7D -asm/non_matchings/code/z_message/func_8015268C.s,func_8015268C,0x8015268C,0x176 -asm/non_matchings/code/z_message/func_80152C64.s,func_80152C64,0x80152C64,0x12 +asm/non_matchings/code/z_message/Message_DrawTextBox.s,Message_DrawTextBox,0x8015268C,0x176 +asm/non_matchings/code/z_message/Message_SetView.s,Message_SetView,0x80152C64,0x12 asm/non_matchings/code/z_message/func_80152CAC.s,func_80152CAC,0x80152CAC,0x85 -asm/non_matchings/code/z_message/func_80152EC0.s,func_80152EC0,0x80152EC0,0x3E -asm/non_matchings/code/z_message/func_80152FB8.s,func_80152FB8,0x80152FB8,0x1E6 -asm/non_matchings/code/z_message/func_80153750.s,func_80153750,0x80153750,0x1CB -asm/non_matchings/code/z_message/func_80153E7C.s,func_80153E7C,0x80153E7C,0x1D -asm/non_matchings/code/z_message/func_80153EF0.s,func_80153EF0,0x80153EF0,0xB9 -asm/non_matchings/code/z_message/func_801541D4.s,func_801541D4,0x801541D4,0x961 +asm/non_matchings/code/z_message/Message_SpawnSongEffect.s,Message_SpawnSongEffect,0x80152EC0,0x3E +asm/non_matchings/code/z_message/Message_FlashOcarinaButtons.s,Message_FlashOcarinaButtons,0x80152FB8,0x1E6 +asm/non_matchings/code/z_message/Message_DrawOcarinaButtons.s,Message_DrawOcarinaButtons,0x80153750,0x1CB +asm/non_matchings/code/z_message/Message_DrawText.s,Message_DrawText,0x80153E7C,0x1D +asm/non_matchings/code/z_message/Message_DrawSceneTitleCard.s,Message_DrawSceneTitleCard,0x80153EF0,0xB9 +asm/non_matchings/code/z_message/Message_DrawMain.s,Message_DrawMain,0x801541D4,0x961 asm/non_matchings/code/z_message/Message_Draw.s,Message_Draw,0x80156758,0x2D asm/non_matchings/code/z_message/Message_Update.s,Message_Update,0x8015680C,0x7A6 -asm/non_matchings/code/z_message/func_801586A4.s,func_801586A4,0x801586A4,0xC +asm/non_matchings/code/z_message/Message_SetTables.s,Message_SetTables,0x801586A4,0xC asm/non_matchings/code/z_message/Message_Init.s,Message_Init,0x801586D4,0x7F asm/non_matchings/code/z_message_nes/Message_FindMessageNES.s,Message_FindMessageNES,0x801588D0,0x2E asm/non_matchings/code/z_message_nes/Message_LoadCharNES.s,Message_LoadCharNES,0x80158988,0x27 @@ -2395,12 +2395,12 @@ asm/non_matchings/code/z_message_nes/Message_LoadLocalizedRupeesNES.s,Message_Lo asm/non_matchings/code/z_message_nes/Message_LoadRupeesNES.s,Message_LoadRupeesNES,0x80158D98,0x86 asm/non_matchings/code/z_message_nes/Message_LoadTimeNES.s,Message_LoadTimeNES,0x80158FB0,0xAF asm/non_matchings/code/z_message_nes/Message_LoadOwlWarpTextNES.s,Message_LoadOwlWarpTextNES,0x8015926C,0x73 -asm/non_matchings/code/z_message_nes/func_80159438.s,func_80159438,0x80159438,0x8D -asm/non_matchings/code/z_message_nes/func_8015966C.s,func_8015966C,0x8015966C,0x6CB -asm/non_matchings/code/z_message_nes/func_8015B198.s,func_8015B198,0x8015B198,0xD6E +asm/non_matchings/code/z_message_nes/Message_GetTimerDigitsNES.s,Message_GetTimerDigitsNES,0x80159438,0x8D +asm/non_matchings/code/z_message_nes/Message_DrawTextNES.s,Message_DrawTextNES,0x8015966C,0x6CB +asm/non_matchings/code/z_message_nes/Message_DecodeNES.s,Message_DecodeNES,0x8015B198,0xD6E asm/non_matchings/code/z_message_staff/Message_FindCreditsMessage.s,Message_FindCreditsMessage,0x8015E750,0x27 -asm/non_matchings/code/z_message_staff/func_8015E7EC.s,func_8015E7EC,0x8015E7EC,0x42F -asm/non_matchings/code/z_message_staff/func_8015F8A8.s,func_8015F8A8,0x8015F8A8,0x47A +asm/non_matchings/code/z_message_staff/Message_DrawTextCredits.s,Message_DrawTextCredits,0x8015E7EC,0x42F +asm/non_matchings/code/z_message_staff/Message_DecodeCredits.s,Message_DecodeCredits,0x8015F8A8,0x47A asm/non_matchings/code/z_player_call/PlayerCall_InitFuncPtrs.s,PlayerCall_InitFuncPtrs,0x80160A90,0x1A asm/non_matchings/code/z_player_call/PlayerCall_Init.s,PlayerCall_Init,0x80160AF8,0x12 asm/non_matchings/code/z_player_call/PlayerCall_Destroy.s,PlayerCall_Destroy,0x80160B40,0x10 From d635b81ee6f952fd8ec5c997912d5f0fb69e8a43 Mon Sep 17 00:00:00 2001 From: MegaIDK <125525714+MegaIDK@users.noreply.github.com> Date: Tue, 3 Oct 2023 23:31:06 -0300 Subject: [PATCH 45/74] document object_kanban (cuttable sign) (#1364) * initial commit of doc * comment * model and material * indeed c file exists * renamed confusing stuff * space Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_kanban.xml | 29 ++++---- .../actors/ovl_En_Kanban/z_en_kanban.c | 73 +++++++++++-------- .../actors/ovl_En_Kanban/z_en_kanban.h | 42 +++++------ 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml index c52be1022..e5baa90ee 100644 --- a/assets/xml/objects/object_kanban.xml +++ b/assets/xml/objects/object_kanban.xml @@ -1,18 +1,19 @@  + - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index 4a95c525d..cd34383be 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -50,8 +50,9 @@ static ColliderCylinderInit sCylinderInit = { }; static u16 sPartFlags[] = { - PART_UPPER_LEFT, PART_LEFT_UPPER, PART_LEFT_LOWER, PART_RIGHT_UPPER, PART_RIGHT_LOWER, PART_LOWER_LEFT, - PART_UPPER_RIGHT, PART_LOWER_RIGHT, PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND, + PART_UPPER_SIDE_LEFT, PART_LEFT_SIDE_UPPER, PART_LEFT_SIDE_LOWER, PART_RIGHT_SIDE_UPPER, + PART_RIGHT_SIDE_LOWER, PART_LOWER_SIDE_LEFT, PART_UPPER_SIDE_RIGHT, PART_LOWER_SIDE_RIGHT, + PART_POST_UPPER, PART_POST_LOWER, PART_POST_STAND, }; static Vec3f sPieceOffsets[] = { @@ -289,40 +290,48 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->zTargetTimer = 10; } - if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_RIGHT)) { + if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_WHOLE_SIGN; - } else if ((piece->partFlags & PART_LEFT_UPPER) && (piece->partFlags & PART_RIGHT_UPPER)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_UPPER) && + (piece->partFlags & PART_RIGHT_SIDE_UPPER)) { piece->pieceType = PIECE_UPPER_HALF; - } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_RIGHT_LOWER)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) && + (piece->partFlags & PART_RIGHT_SIDE_LOWER)) { piece->pieceType = PIECE_LOWER_HALF; - } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_LOWER_RIGHT)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) && + (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_RIGHT_HALF; - } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LOWER_LEFT)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && + (piece->partFlags & PART_LOWER_SIDE_LEFT)) { piece->pieceType = PIECE_LEFT_HALF; - } else if ((piece->partFlags & PART_UPPER_LEFT) && (piece->partFlags & PART_LEFT_UPPER)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_LEFT) && + (piece->partFlags & PART_LEFT_SIDE_UPPER)) { piece->pieceType = PIECE_2ND_QUAD; - } else if ((piece->partFlags & PART_UPPER_RIGHT) && (piece->partFlags & PART_RIGHT_UPPER)) { + } else if ((piece->partFlags & PART_UPPER_SIDE_RIGHT) && + (piece->partFlags & PART_RIGHT_SIDE_UPPER)) { piece->pieceType = PIECE_1ST_QUAD; - } else if ((piece->partFlags & PART_LEFT_LOWER) && (piece->partFlags & PART_LOWER_LEFT)) { + } else if ((piece->partFlags & PART_LEFT_SIDE_LOWER) && + (piece->partFlags & PART_LOWER_SIDE_LEFT)) { piece->pieceType = PIECE_3RD_QUAD; - } else if ((piece->partFlags & PART_RIGHT_LOWER) && (piece->partFlags & PART_LOWER_RIGHT)) { + } else if ((piece->partFlags & PART_RIGHT_SIDE_LOWER) && + (piece->partFlags & PART_LOWER_SIDE_RIGHT)) { piece->pieceType = PIECE_4TH_QUAD; - } else if (piece->partFlags & PART_UPPER_LEFT) { - piece->pieceType = PIECE_UPPER_LEFT; - } else if (piece->partFlags & PART_LEFT_UPPER) { - piece->pieceType = PIECE_LEFT_UPPER; - } else if (piece->partFlags & PART_LEFT_LOWER) { - piece->pieceType = PIECE_LEFT_LOWER; - } else if (piece->partFlags & PART_LOWER_LEFT) { - piece->pieceType = PIECE_LOWER_LEFT; - } else if (piece->partFlags & PART_UPPER_RIGHT) { - piece->pieceType = PIECE_UPPER_RIGHT; - } else if (piece->partFlags & PART_RIGHT_UPPER) { - piece->pieceType = PIECE_RIGHT_UPPER; - } else if (piece->partFlags & PART_RIGHT_LOWER) { - piece->pieceType = PIECE_RIGHT_LOWER; - } else if (piece->partFlags & PART_LOWER_RIGHT) { - piece->pieceType = PIECE_LOWER_RIGHT; + } else if (piece->partFlags & PART_UPPER_SIDE_LEFT) { + piece->pieceType = PIECE_UPPER_SIDE_LEFT; + } else if (piece->partFlags & PART_LEFT_SIDE_UPPER) { + piece->pieceType = PIECE_LEFT_SIDE_UPPER; + } else if (piece->partFlags & PART_LEFT_SIDE_LOWER) { + piece->pieceType = PIECE_LEFT_SIDE_LOWER; + } else if (piece->partFlags & PART_LOWER_SIDE_LEFT) { + piece->pieceType = PIECE_LOWER_SIDE_LEFT; + } else if (piece->partFlags & PART_UPPER_SIDE_RIGHT) { + piece->pieceType = PIECE_UPPER_SIDE_RIGHT; + } else if (piece->partFlags & PART_RIGHT_SIDE_UPPER) { + piece->pieceType = PIECE_RIGHT_SIDE_UPPER; + } else if (piece->partFlags & PART_RIGHT_SIDE_LOWER) { + piece->pieceType = PIECE_RIGHT_SIDE_LOWER; + } else if (piece->partFlags & PART_LOWER_SIDE_RIGHT) { + piece->pieceType = PIECE_LOWER_SIDE_RIGHT; } else if (piece->partFlags & PART_POST_UPPER) { piece->pieceType = PIECE_POST_UPPER; } else if (piece->partFlags & PART_POST_LOWER) { @@ -891,9 +900,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } static Gfx* sDisplayLists[] = { - object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38, - object_kanban_DL_000FF8, object_kanban_DL_0010B8, object_kanban_DL_0011C0, object_kanban_DL_0012C8, - object_kanban_DL_0013D0, object_kanban_DL_001488, object_kanban_DL_001540, + gSignUpperSideLeftModelDL, gSignLeftSideUpperModelDL, gSignLeftSideLowerModelDL, gSignRightSideUpperModelDL, + gSignRightSideLowerModelDL, gSignLowerSideLeftModelDL, gSignUpperSideRightModelDL, gSignLowerSideRightModelDL, + gSignPostUpperModelDL, gSignPostLowerModelDL, gSignPostStandModelDL, }; #include "z_en_kanban_gfx.c" @@ -924,7 +933,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30); + gSPDisplayList(POLY_OPA_DISP++, gSignMaterialDL); if (this->actionState != ENKANBAN_SIGN) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); @@ -983,7 +992,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 255, 255, 255, this->cutMarkAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 150, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, object_kanban_DL_001630); + gSPDisplayList(POLY_XLU_DISP++, gSignParticleDL); } } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h index e54bb3fad..43b3b61fb 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h @@ -5,22 +5,22 @@ struct EnKanban; -#define PART_UPPER_LEFT (1 << 0) -#define PART_LEFT_UPPER (1 << 1) -#define PART_LEFT_LOWER (1 << 2) -#define PART_RIGHT_UPPER (1 << 3) -#define PART_RIGHT_LOWER (1 << 4) -#define PART_LOWER_LEFT (1 << 5) -#define PART_UPPER_RIGHT (1 << 6) -#define PART_LOWER_RIGHT (1 << 7) +#define PART_UPPER_SIDE_LEFT (1 << 0) +#define PART_LEFT_SIDE_UPPER (1 << 1) +#define PART_LEFT_SIDE_LOWER (1 << 2) +#define PART_RIGHT_SIDE_UPPER (1 << 3) +#define PART_RIGHT_SIDE_LOWER (1 << 4) +#define PART_LOWER_SIDE_LEFT (1 << 5) +#define PART_UPPER_SIDE_RIGHT (1 << 6) +#define PART_LOWER_SIDE_RIGHT (1 << 7) #define PART_POST_UPPER (1 << 8) #define PART_POST_LOWER (1 << 9) #define PART_POST_STAND (1 << 10) -#define LEFT_HALF (PART_UPPER_LEFT | PART_LEFT_UPPER | PART_LEFT_LOWER | PART_LOWER_LEFT) -#define RIGHT_HALF (PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_RIGHT_LOWER | PART_LOWER_RIGHT) -#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_LEFT_UPPER) -#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_LEFT_LOWER | PART_UPPER_LEFT | PART_LEFT_UPPER) -#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_RIGHT | PART_RIGHT_UPPER | PART_UPPER_LEFT | PART_RIGHT_LOWER) +#define LEFT_HALF (PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER | PART_LEFT_SIDE_LOWER | PART_LOWER_SIDE_LEFT) +#define RIGHT_HALF (PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_RIGHT_SIDE_LOWER | PART_LOWER_SIDE_RIGHT) +#define UPPER_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER) +#define UPPERLEFT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_LEFT_SIDE_LOWER | PART_UPPER_SIDE_LEFT | PART_LEFT_SIDE_UPPER) +#define UPPERRIGHT_HALF (PART_POST_UPPER | PART_UPPER_SIDE_RIGHT | PART_RIGHT_SIDE_UPPER | PART_UPPER_SIDE_LEFT | PART_RIGHT_SIDE_LOWER) #define ALL_PARTS (LEFT_HALF | RIGHT_HALF | PART_POST_UPPER | PART_POST_LOWER) typedef enum { @@ -42,14 +42,14 @@ typedef enum { /* 6 */ PIECE_1ST_QUAD, /* 7 */ PIECE_3RD_QUAD, /* 8 */ PIECE_4TH_QUAD, - /* 9 */ PIECE_UPPER_LEFT, - /* 10 */ PIECE_LEFT_UPPER, - /* 11 */ PIECE_LEFT_LOWER, - /* 12 */ PIECE_LOWER_LEFT, - /* 13 */ PIECE_UPPER_RIGHT, - /* 14 */ PIECE_RIGHT_UPPER, - /* 15 */ PIECE_RIGHT_LOWER, - /* 16 */ PIECE_LOWER_RIGHT, + /* 9 */ PIECE_UPPER_SIDE_LEFT, + /* 10 */ PIECE_LEFT_SIDE_UPPER, + /* 11 */ PIECE_LEFT_SIDE_LOWER, + /* 12 */ PIECE_LOWER_SIDE_LEFT, + /* 13 */ PIECE_UPPER_SIDE_RIGHT, + /* 14 */ PIECE_RIGHT_SIDE_UPPER, + /* 15 */ PIECE_RIGHT_SIDE_LOWER, + /* 16 */ PIECE_LOWER_SIDE_RIGHT, /* 17 */ PIECE_POST_UPPER, /* 18 */ PIECE_POST_LOWER, /* 100 */ PIECE_OTHER = 100 From f4a490bb6a2e4d1564ed06b0ee98be274dda7b91 Mon Sep 17 00:00:00 2001 From: fig02 Date: Tue, 3 Oct 2023 23:01:04 -0400 Subject: [PATCH 46/74] Port Proposed OoT Object Docs (#1361) * port docs in z_scene * undo accidental ctrl-f * another fix * expose Object_SpawnPersistent --------- Co-authored-by: engineer124 --- include/z64object.h | 7 - include/z64scene.h | 26 +-- src/code/z_actor.c | 8 +- src/code/z_draw.c | 4 +- src/code/z_effect_soft_sprite_old_init.c | 2 +- src/code/z_en_hy_code.c | 6 +- src/code/z_en_item00.c | 12 +- src/code/z_play.c | 24 +-- src/code/z_player_lib.c | 6 +- src/code/z_scene.c | 157 ++++++++++-------- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 4 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 8 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 2 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 12 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 10 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 12 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 18 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 10 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 10 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 4 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 6 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 4 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 4 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 8 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 12 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 8 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 8 +- .../z_en_invadepoh_demo.c | 8 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 2 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 6 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 12 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 12 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 8 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 2 +- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 2 +- .../ovl_Item_Etcetera/z_item_etcetera.c | 2 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 2 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 2 +- .../actors/ovl_Obj_Purify/z_obj_purify.c | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 2 +- .../actors/ovl_player_actor/z_player.c | 4 +- .../z_eff_en_ice_block.c | 4 +- .../ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c | 4 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 6 +- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c | 6 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 6 +- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 4 +- tools/disasm/functions.txt | 8 +- tools/namefixer.py | 4 + tools/sizes/code_functions.csv | 8 +- 68 files changed, 279 insertions(+), 269 deletions(-) diff --git a/include/z64object.h b/include/z64object.h index 712826815..d547d4a9e 100644 --- a/include/z64object.h +++ b/include/z64object.h @@ -1,13 +1,6 @@ #ifndef Z64OBJECT_H #define Z64OBJECT_H -#define OBJECT_SPACE_SIZE_DEFAULT 1413120 -#define OBJECT_SPACE_SIZE_CLOCK_TOWN 1566720 -#define OBJECT_SPACE_SIZE_MILK_BAR 1617920 -#define OBJECT_SPACE_SIZE_TERMINA_FIELD 1505280 - -#define OBJECT_EXCHANGE_BANK_MAX 35 - #define DEFINE_OBJECT(_name, enumValue) enumValue, #define DEFINE_OBJECT_UNSET(enumValue) enumValue, #define DEFINE_OBJECT_SIZE_ZERO(_name, enumValue) enumValue, diff --git a/include/z64scene.h b/include/z64scene.h index e0f186cd8..b66ad4e41 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -74,7 +74,7 @@ typedef struct { typedef struct { /* 0x0 */ u8 code; /* 0x1 */ u8 naviQuestHintFileId; - /* 0x4 */ u32 subKeepIndex; + /* 0x4 */ u32 subKeepId; } SCmdSpecialFiles; // size = 0x8 typedef struct { @@ -415,7 +415,7 @@ typedef struct { /* 0x08 */ DmaRequest dmaReq; /* 0x28 */ OSMesgQueue loadQueue; /* 0x40 */ OSMesg loadMsg; -} ObjectStatus; // size = 0x44 +} ObjectEntry; // size = 0x44 typedef struct { /* 0x0 */ RomFile segment; @@ -475,11 +475,11 @@ typedef RoomShapeCullable PolygonType2; typedef struct { /* 0x000 */ void* spaceStart; /* 0x004 */ void* spaceEnd; - /* 0x008 */ u8 num; - /* 0x009 */ u8 spawnedObjectCount; - /* 0x00A */ u8 mainKeepIndex; - /* 0x00B */ u8 subKeepIndex; - /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; + /* 0x008 */ u8 numEntries; // total amount of used entries + /* 0x009 */ u8 numPersistentEntries; // amount of entries that won't be reused when loading a new object list (when loading a new room) + /* 0x00A */ u8 mainKeepSlot; // "gameplay_keep" slot + /* 0x00B */ u8 subKeepSlot; // "gameplay_field_keep" or "gameplay_dangeon_keep" slot + /* 0x00C */ ObjectEntry slots[35]; } ObjectContext; // size = 0x958 #define PATH_INDEX_NONE -1 @@ -899,13 +899,13 @@ typedef enum { #define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED #define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST -s32 Object_Spawn(ObjectContext* objectCtx, s16 id); -void Object_InitBank(struct GameState* gameState, ObjectContext* objectCtx); -void Object_UpdateBank(ObjectContext* objectCtx); -s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId); -s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index); +s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id); +void Object_InitContext(struct GameState* gameState, ObjectContext* objectCtx); +void Object_UpdateEntries(ObjectContext* objectCtx); +s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId); +s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot); void Object_LoadAll(ObjectContext* objectCtx); -void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id); +void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id); void Scene_CommandSpawnList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandActorList(struct PlayState* play, SceneCmd* cmd); void Scene_CommandActorCutsceneCamList(struct PlayState* play, SceneCmd* cmd); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 10f782e25..7c741ae85 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1096,7 +1096,7 @@ void Actor_SetScale(Actor* actor, f32 scale) { } void Actor_SetObjectDependency(PlayState* play, Actor* actor) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[actor->objBankIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[actor->objBankIndex].segment); } void Actor_Init(Actor* actor, PlayState* play) { @@ -2700,8 +2700,8 @@ void Actor_Draw(PlayState* play, Actor* actor) { Matrix_Scale(actor->scale.x, actor->scale.y, actor->scale.z, MTXMODE_APPLY); Actor_SetObjectDependency(play, actor); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); if (actor->colorFilterTimer != 0) { s32 colorFlag = COLORFILTER_GET_COLORFLAG(actor->colorFilterParams); @@ -3299,7 +3299,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 return NULL; } - objBankIndex = Object_GetIndex(&play->objectCtx, actorInit->objectId); + objBankIndex = Object_GetSlot(&play->objectCtx, actorInit->objectId); if ((objBankIndex < 0) || ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) && (actorInit->id != ACTOR_BOSS_05))) { Actor_FreeOverlay(&gActorOverlayTable[index]); diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 2a56e0ba5..3f1d1dc47 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -827,9 +827,9 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_BSMASK); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_BSMASK); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index 63b6861a7..d71a18674 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -41,7 +41,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { MtxF mfTrans11DA0; s32 pad1; Mtx* mtx; - void* object = play->objectCtx.status[this->rgObjBankIndex].segment; + void* object = play->objectCtx.slots[this->rgObjBankIndex].segment; OPEN_DISPS(gfxCtx); diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index e2f31c404..d64308bff 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -133,7 +133,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { } void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); EnHy_ChangeAnim(&enHy->skelAnime, animIndex); } @@ -141,7 +141,7 @@ s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play) { s32 isUpdated = false; if (enHy->actor.draw != NULL) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); SkelAnime_Update(&enHy->skelAnime); isUpdated = true; } @@ -168,7 +168,7 @@ s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg enHy->actor.objBankIndex = enHy->skelLowerObjIndex; isInitialized = true; ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->actor.objBankIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->actor.objBankIndex].segment); SkelAnime_InitFlex(play, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable, ENHY_LIMB_MAX); EnHy_ChangeObjectAndAnim(enHy, play, animIndex); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index f9f5df5a8..c6b52e476 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -184,17 +184,17 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; case ITEM00_SHIELD_HERO: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_SHIELD_2); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_MAP: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_MAP); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_COMPASS: - thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS); + thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_COMPASS); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; @@ -317,7 +317,7 @@ void EnItem00_Destroy(Actor* thisx, PlayState* play) { } void EnItem00_WaitForHeartObject(EnItem00* this, PlayState* play) { - s32 objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { this->actor.objBankIndex = objBankIndex; @@ -725,7 +725,7 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) { case ITEM00_RECOVERY_HEART: if (this->unk152 < 0) { if (this->unk152 == -1) { - s8 bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEART); + s8 bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEART); if (Object_IsLoaded(&play->objectCtx, bankIndex)) { this->actor.objBankIndex = bankIndex; @@ -852,7 +852,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) { s32 pad[2]; - if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { + if (Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/code/z_play.c b/src/code/z_play.c index 9a5e6541d..f71cf0c0d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -921,8 +921,8 @@ void Play_UpdateMain(PlayState* this) { u8 freezeFlashTimer; s32 sp5C = false; - gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_PROCESS) { @@ -972,7 +972,7 @@ void Play_UpdateMain(PlayState* this) { sp5C = (this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE); AnimationContext_Reset(&this->animationCtx); - Object_UpdateBank(&this->objectCtx); + Object_UpdateEntries(&this->objectCtx); if (!sp5C && (IREG(72) == 0)) { this->gameplayFrames++; @@ -1153,17 +1153,17 @@ void Play_DrawMain(PlayState* this) { OPEN_DISPS(gfxCtx); - gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); - gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); - gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); + gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.slots[this->objectCtx.mainKeepSlot].segment); - gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); - gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); + gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.slots[this->objectCtx.subKeepSlot].segment); gSPSegment(POLY_OPA_DISP++, 0x02, this->sceneSegment); gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment); @@ -1585,7 +1585,7 @@ void Play_InitScene(PlayState* this, s32 spawn) { this->sceneMaterialAnims = NULL; this->roomCtx.unk74 = NULL; this->numSetupActors = 0; - Object_InitBank(&this->state, &this->objectCtx); + Object_InitContext(&this->state, &this->objectCtx); LightContext_Init(this, &this->lightCtx); Door_InitContext(&this->state, &this->doorCtx); Room_Init(this, &this->roomCtx); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 24b55cfea..f288b31de 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -396,9 +396,9 @@ void func_8012301C(Actor* thisx, PlayState* play2) { gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); - this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->actor.objBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); } else if (this->actionVar1 >= 3) { - s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { this->actor.objBankIndex = objBankIndex; @@ -1869,7 +1869,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.status[player->actor.objBankIndex].segment); + gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.slots[player->actor.objBankIndex].segment); gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 811853f07..d26156d58 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -1,28 +1,41 @@ #include "global.h" -s32 Object_Spawn(ObjectContext* objectCtx, s16 id) { +/** + * Spawn an object file of a specified ID that will persist through room changes. + * + * This waits for the file to be fully loaded, the data is available when the function returns. + * + * @return The new object slot corresponding to the requested object ID. + * + * @note This function is not meant to be called externally to spawn object files on the fly. + * When an object is spawned with this function, all objects that come before it in the entry list will be treated as + * persistent, which will likely cause either the amount of free slots or object space memory to run out. + * This function is only meant to be called internally on scene load, before the object list from any room is processed. + */ +s32 Object_SpawnPersistent(ObjectContext* objectCtx, s16 id) { size_t size; - objectCtx->status[objectCtx->num].id = id; + objectCtx->slots[objectCtx->numEntries].id = id; size = gObjectTable[id].vromEnd - gObjectTable[id].vromStart; if (1) {} if (size != 0) { - DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, gObjectTable[id].vromStart, size); + DmaMgr_SendRequest0(objectCtx->slots[objectCtx->numEntries].segment, gObjectTable[id].vromStart, size); } - if (objectCtx->num < OBJECT_EXCHANGE_BANK_MAX - 1) { - objectCtx->status[objectCtx->num + 1].segment = ALIGN16((u32)objectCtx->status[objectCtx->num].segment + size); + if (objectCtx->numEntries < ARRAY_COUNT(objectCtx->slots) - 1) { + objectCtx->slots[objectCtx->numEntries + 1].segment = + ALIGN16((u32)objectCtx->slots[objectCtx->numEntries].segment + size); } - objectCtx->num++; - objectCtx->spawnedObjectCount = objectCtx->num; + objectCtx->numEntries++; + objectCtx->numPersistentEntries = objectCtx->numEntries; - return objectCtx->num - 1; + return objectCtx->numEntries - 1; } -void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { +void Object_InitContext(GameState* gameState, ObjectContext* objectCtx) { PlayState* play = (PlayState*)gameState; s32 pad; u32 spaceSize; @@ -30,66 +43,66 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) { if (play->sceneId == SCENE_CLOCKTOWER || play->sceneId == SCENE_TOWN || play->sceneId == SCENE_BACKTOWN || play->sceneId == SCENE_ICHIBA) { - spaceSize = OBJECT_SPACE_SIZE_CLOCK_TOWN; + spaceSize = 1530 * 1024; } else if (play->sceneId == SCENE_MILK_BAR) { - spaceSize = OBJECT_SPACE_SIZE_MILK_BAR; + spaceSize = 1580 * 1024; } else if (play->sceneId == SCENE_00KEIKOKU) { - spaceSize = OBJECT_SPACE_SIZE_TERMINA_FIELD; + spaceSize = 1470 * 1024; } else { - spaceSize = OBJECT_SPACE_SIZE_DEFAULT; + spaceSize = 1380 * 1024; } - objectCtx->num = 0; - objectCtx->spawnedObjectCount = 0; - objectCtx->mainKeepIndex = 0; - objectCtx->subKeepIndex = 0; + objectCtx->numEntries = 0; + objectCtx->numPersistentEntries = 0; + objectCtx->mainKeepSlot = 0; + objectCtx->subKeepSlot = 0; // clang-format off - for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; } + for (i = 0; i < ARRAY_COUNT(objectCtx->slots); i++) { objectCtx->slots[i].id = 0; } // clang-format on - objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); + objectCtx->spaceStart = objectCtx->slots[0].segment = THA_AllocTailAlign16(&gameState->tha, spaceSize); objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize); - objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP); + objectCtx->mainKeepSlot = Object_SpawnPersistent(objectCtx, GAMEPLAY_KEEP); - gSegments[0x04] = VIRTUAL_TO_PHYSICAL(objectCtx->status[objectCtx->mainKeepIndex].segment); + gSegments[4] = VIRTUAL_TO_PHYSICAL(objectCtx->slots[objectCtx->mainKeepSlot].segment); } -void Object_UpdateBank(ObjectContext* objectCtx) { +void Object_UpdateEntries(ObjectContext* objectCtx) { s32 i; - ObjectStatus* status = &objectCtx->status[0]; + ObjectEntry* entry = &objectCtx->slots[0]; RomFile* objectFile; size_t size; - for (i = 0; i < objectCtx->num; i++) { - if (status->id < 0) { - s32 id = -status->id; + for (i = 0; i < objectCtx->numEntries; i++) { + if (entry->id < 0) { + s32 id = -entry->id; - if (status->dmaReq.vromAddr == 0) { + if (entry->dmaReq.vromAddr == 0) { objectFile = &gObjectTable[id]; size = objectFile->vromEnd - objectFile->vromStart; if (size == 0) { - status->id = 0; + entry->id = 0; } else { - osCreateMesgQueue(&status->loadQueue, &status->loadMsg, 1); - DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart, size, 0, - &status->loadQueue, NULL); + osCreateMesgQueue(&entry->loadQueue, &entry->loadMsg, 1); + DmaMgr_SendRequestImpl(&entry->dmaReq, entry->segment, objectFile->vromStart, size, 0, + &entry->loadQueue, NULL); } - } else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) { - status->id = id; + } else if (!osRecvMesg(&entry->loadQueue, NULL, OS_MESG_NOBLOCK)) { + entry->id = id; } } - status++; + entry++; } } -s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { +s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId) { s32 i; - for (i = 0; i < objectCtx->num; i++) { - if (ABS_ALT(objectCtx->status[i].id) == objectId) { + for (i = 0; i < objectCtx->numEntries; i++) { + if (ABS_ALT(objectCtx->slots[i].id) == objectId) { return i; } } @@ -97,8 +110,8 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { return -1; } -s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index) { - if (objectCtx->status[index].id > 0) { +s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot) { + if (objectCtx->slots[slot].id > 0) { return true; } else { return false; @@ -110,31 +123,31 @@ void Object_LoadAll(ObjectContext* objectCtx) { s32 id; uintptr_t vromSize; - for (i = 0; i < objectCtx->num; i++) { - id = objectCtx->status[i].id; + for (i = 0; i < objectCtx->numEntries; i++) { + id = objectCtx->slots[i].id; vromSize = gObjectTable[id].vromEnd - gObjectTable[id].vromStart; if (vromSize == 0) { continue; } - DmaMgr_SendRequest0(objectCtx->status[i].segment, gObjectTable[id].vromStart, vromSize); + DmaMgr_SendRequest0(objectCtx->slots[i].segment, gObjectTable[id].vromStart, vromSize); } } -void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) { +void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id) { u32 addr; uintptr_t vromSize; RomFile* fileTableEntry; - objectCtx->status[iParm2].id = -id; - objectCtx->status[iParm2].dmaReq.vromAddr = 0; + objectCtx->slots[slot].id = -id; + objectCtx->slots[slot].dmaReq.vromAddr = 0; fileTableEntry = &gObjectTable[id]; vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart; // TODO: UB to cast void to u32 - addr = ((u32)objectCtx->status[iParm2].segment) + vromSize; + addr = ((u32)objectCtx->slots[slot].segment) + vromSize; addr = ALIGN16(addr); return (void*)addr; @@ -152,19 +165,19 @@ void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { ((gSaveContext.respawnFlag == 2) && (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { // Skull Kid Object - Object_Spawn(&play->objectCtx, OBJECT_STK); + Object_SpawnPersistent(&play->objectCtx, OBJECT_STK); return; } - loadedCount = Object_Spawn(&play->objectCtx, OBJECT_LINK_CHILD); - nextObject = play->objectCtx.status[play->objectCtx.num].segment; - play->objectCtx.num = loadedCount; - play->objectCtx.spawnedObjectCount = loadedCount; + loadedCount = Object_SpawnPersistent(&play->objectCtx, OBJECT_LINK_CHILD); + nextObject = play->objectCtx.slots[play->objectCtx.numEntries].segment; + play->objectCtx.numEntries = loadedCount; + play->objectCtx.numPersistentEntries = loadedCount; playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[0].initInfo->objectId = playerObjectId; - Object_Spawn(&play->objectCtx, playerObjectId); + Object_SpawnPersistent(&play->objectCtx, playerObjectId); - play->objectCtx.status[play->objectCtx.num].segment = nextObject; + play->objectCtx.slots[play->objectCtx.numEntries].segment = nextObject; } // SceneTableEntry Header Command 0x01: Actor List @@ -224,10 +237,10 @@ void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) { { SEGMENT_ROM_START(elf_message_ydan), SEGMENT_ROM_END(elf_message_ydan) }, }; - if (cmd->specialFiles.subKeepIndex != 0) { - play->objectCtx.subKeepIndex = Object_Spawn(&play->objectCtx, cmd->specialFiles.subKeepIndex); + if (cmd->specialFiles.subKeepId != 0) { + play->objectCtx.subKeepSlot = Object_SpawnPersistent(&play->objectCtx, cmd->specialFiles.subKeepId); // TODO: Segment number enum? - gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment); + gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[play->objectCtx.subKeepSlot].segment); } if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) { @@ -255,28 +268,28 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { s32 i; s32 j; s32 k; - ObjectStatus* firstObject; - ObjectStatus* status; - ObjectStatus* status2; + ObjectEntry* firstObject; + ObjectEntry* entry; + ObjectEntry* invalidatedEntry; s16* objectEntry; void* nextPtr; objectEntry = Lib_SegmentedToVirtual(cmd->objectList.segment); k = 0; - i = play->objectCtx.spawnedObjectCount; - status = &play->objectCtx.status[i]; - firstObject = play->objectCtx.status; + i = play->objectCtx.numPersistentEntries; + entry = &play->objectCtx.slots[i]; + firstObject = &play->objectCtx.slots[0]; - while (i < play->objectCtx.num) { - if (status->id != *objectEntry) { - status2 = &play->objectCtx.status[i]; + while (i < play->objectCtx.numEntries) { + if (entry->id != *objectEntry) { + invalidatedEntry = &play->objectCtx.slots[i]; - for (j = i; j < play->objectCtx.num; j++) { - status2->id = 0; - status2++; + for (j = i; j < play->objectCtx.numEntries; j++) { + invalidatedEntry->id = 0; + invalidatedEntry++; } - play->objectCtx.num = i; + play->objectCtx.numEntries = i; Actor_KillAllWithMissingObject(play, &play->actorCtx); continue; @@ -285,13 +298,13 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { i++; k++; objectEntry++; - status++; + entry++; } while (k < cmd->objectList.num) { nextPtr = func_8012F73C(&play->objectCtx, i, *objectEntry); - if (i < OBJECT_EXCHANGE_BANK_MAX - 1) { + if (i < ARRAY_COUNT(play->objectCtx.slots) - 1) { firstObject[i + 1].segment = nextPtr; } @@ -300,7 +313,7 @@ void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) { objectEntry++; } - play->objectCtx.num = i; + play->objectCtx.numEntries = i; } // SceneTableEntry Header Command 0x0C: Light List diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 4baff41ce..3dc02ba7d 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -1174,7 +1174,7 @@ s8 SubS_IsObjectLoaded(s8 index, PlayState* play) { } s8 SubS_GetObjectIndex(s16 id, PlayState* play) { - return Object_GetIndex(&play->objectCtx, id); + return Object_GetSlot(&play->objectCtx, id); } /** diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index ea2fe2c90..dae692c89 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -212,7 +212,7 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) { BgBreakwallStruct* sp24 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)]; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - this->unk_15C = Object_GetIndex(&play->objectCtx, sp24->unk_00); + this->unk_15C = Object_GetSlot(&play->objectCtx, sp24->unk_00); if ((this->unk_15C < 0) || !sp24->unk_14(this, play)) { Actor_Kill(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index 8e96cae50..91ea969e2 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -404,13 +404,13 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gWoodenFlowerOuterPetalDL); } - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_SYOKUDAI); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_SYOKUDAI); if ((objectIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objectIndex))) { Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y - 64.5f, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(1.5f, 1.5f, 1.5f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); gSPDisplayList(POLY_OPA_DISP++, gObjectSyokudaiTypeNoSwitchDL); } diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index 16e068156..63cedff5a 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -103,7 +103,7 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { thisx->update = Actor_Noop; } } else { - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UMAJUMP); if (this->objectIndex < 0) { Actor_Kill(thisx); diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index e9a3e79c7..e9394f783 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2152,14 +2152,14 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { /* Start of Gyorg's Draw section */ void Boss03_SetObject(PlayState* play, s16 objectId) { - s32 objectIndex = Object_GetIndex(&play->objectCtx, objectId); + s32 objectIndex = Object_GetSlot(&play->objectCtx, objectId); OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index ff88a61db..8f3b401da 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -57,7 +57,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) { objectIndex = 0; } else { - objectIndex = Object_GetIndex(&play->objectCtx, sEffectTypeObjects[type]); + objectIndex = Object_GetSlot(&play->objectCtx, sEffectTypeObjects[type]); } if (objectIndex < 0) { diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c index 63228436f..b52787f36 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -57,7 +57,7 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { this->getItemDrawId = sGetItemDraws[itemIndex]; this->cueType = sCueTypes[itemIndex]; - objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectBankIndices[itemIndex]); if (objectIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 1ee2b1c9d..badd4bc12 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -461,7 +461,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) { case DEMO_KANKYO_TYPE_GIANTS: this->isSafeToDrawGiants = false; - objId = Object_GetIndex(&play->objectCtx, sObjectBubbleIndex); + objId = Object_GetSlot(&play->objectCtx, sObjectBubbleIndex); DemoKankyo_SetupAction(this, DemoKakyo_GiantObjectCheck); break; diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index dfcb610c8..a55f2cc1f 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -81,9 +81,9 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { } if (objectIndex2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return isAnimFinished; @@ -101,10 +101,10 @@ s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { } if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return didAnimChange; @@ -312,9 +312,9 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Matrix_TranslateRotateZYX(&D_80C1D2C8, &D_80C1D2D4); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index 9f30d4343..3c499aa7a 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -72,7 +72,7 @@ void DmChar03_Destroy(Actor* thisx, PlayState* play) { } void func_80AAB5F8(DmChar03* this, PlayState* play) { - s32 index = Object_GetIndex(&play->objectCtx, OBJECT_GI_NUTSMASK); + s32 index = Object_GetSlot(&play->objectCtx, OBJECT_GI_NUTSMASK); if (index >= 0) { this->objectIndex = index; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index 192e040a9..f2f8980a0 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -178,7 +178,7 @@ void DmChar05_Destroy(Actor* thisx, PlayState* play) { } void func_80AAC990(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_GOLONMASK); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_GOLONMASK); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -200,7 +200,7 @@ void func_80AAC9DC(DmChar05* this, PlayState* play) { } void func_80AACA98(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK13); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK13); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -232,7 +232,7 @@ void func_80AACBE4(DmChar05* this, PlayState* play) { OBJECT_GI_MASK11, OBJECT_GI_MASK20, OBJECT_GI_RABIT_MASK, OBJECT_GI_MASK12, }; s32 params = DMCHAR05_GET(&this->actor) - DMCHAR05_5; - s32 objectIdx = Object_GetIndex(&play->objectCtx, D_80AAE2F0[params]); + s32 objectIdx = Object_GetSlot(&play->objectCtx, D_80AAE2F0[params]); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -278,7 +278,7 @@ void func_80AACD0C(DmChar05* this, PlayState* play) { } void func_80AACD1C(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_ZORAMASK); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_ZORAMASK); if (objectIdx >= 0) { this->unk_18F = objectIdx; @@ -298,7 +298,7 @@ void func_80AACD68(DmChar05* this, PlayState* play) { } void func_80AACE10(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_GI_MASK15); + s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK15); if (objectIdx >= 0) { this->unk_18F = objectIdx; diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 2f7435053..ec5a83095 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -81,9 +81,9 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { } if (objectIndex2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return isAnimFinished; @@ -101,10 +101,10 @@ s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { } if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } return didAnimChange; @@ -312,9 +312,9 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_TranslateRotateZYX(&D_80C25218, &D_80C25224); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index fb45200bc..cf8ed15e1 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -320,7 +320,7 @@ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) { } if (objectIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); } } @@ -1062,9 +1062,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->shouldDraw = true; if (DM_STK_GET_TYPE(&this->actor) != DM_STK_TYPE_MAJORAS_MASK) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_NOT_READY; - this->objectStkObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK); - this->objectStk2ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK2); - this->objectStk3ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK3); + this->objectStkObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK); + this->objectStk2ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK2); + this->objectStk3ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK3); if (this->objectStkObjectIndex < 0) { Actor_Kill(&this->actor); } @@ -1968,15 +1968,15 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot (this->objectStk2ObjectIndex >= 0)) { Matrix_Push(); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStk2ObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStk2ObjectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStk2ObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStk2ObjectIndex].segment); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gSkullKidMajorasMaskCurseOverlayTexAnim)); Gfx_DrawDListOpa(play, gSkullKidMajorasMaskCurseOverlayDL); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStkObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStkObjectIndex].segment); Matrix_Pop(); } @@ -2095,7 +2095,7 @@ void DmStk_Draw(Actor* thisx, PlayState* play) { return; } - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index c6e0e4269..b9b53a081 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -234,7 +234,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->slidingDoor.dyna.actor.room = -1; } - if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { + if ((this->requiredObjBankIndex = Object_GetSlot(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { Actor_Kill(&this->slidingDoor.dyna.actor); return; } diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 7b9355305..46fd9d5b2 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -264,9 +264,9 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -303,8 +303,8 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == BBA_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index daa07db44..09d67ac24 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -254,10 +254,10 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == CNE_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); *dList = gCneHeadBrownHairDL; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -294,8 +294,8 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == CNE_LIMB_RIGHT_FOOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index 5282697a4..31e904bcf 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -588,10 +588,10 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA); + objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_BOMBIWA); if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) { gDPPipeSync(POLY_OPA_DISP++); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIdx].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIdx].segment); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 2dfc36daa..61170a5d0 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -210,7 +210,7 @@ s32 func_80A515C4(EnDnk* this) { void func_80A51648(EnDnk* this, PlayState* play) { if (SubS_IsObjectLoaded(this->unk_28E, play) == true) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_28E].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_28E].segment); this->actor.draw = func_80A52018; this->actor.objBankIndex = this->unk_28E; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 289b1403d..a63766b70 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -440,16 +440,16 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { break; } } - if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { objectInfo++; } } this->knobDoor.dlIndex = objectInfo->dListIndex; - objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectBankIndex < 0) { objectInfo = &sObjInfo[15]; - objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectBankIndex != 0) { Actor_Kill(&this->knobDoor.dyna.actor); return; diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index dfa0e4934..fe09aa1fe 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -101,10 +101,10 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { break; } } - if ((i >= 15) && (Object_GetIndex(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= 15) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { objectInfo++; } - objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); + objectIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); if (objectIndex < 0) { Actor_Kill(&this->knobDoor.dyna.actor); } else { diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index da2f0571d..a521abaa0 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -118,9 +118,9 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp].segment); gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[temp2].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 8f6551e84..64b7ea1c2 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -172,7 +172,7 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectIndex].segment); switch (this->type) { case ENDING_HERO6_TYPE_DAIKU_RED: diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 8468c3e54..e902baa2d 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -165,19 +165,19 @@ void EnFall_Init(Actor* thisx, PlayState* play) { case EN_FALL_TYPE_LODMOON_NO_LERP: case EN_FALL_TYPE_LODMOON: case EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_LODMOON); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_LODMOON); break; case EN_FALL_TYPE_MOONS_TEAR: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MOONSTON); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MOONSTON); break; case EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL2); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL2); break; default: - objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_FALL); + objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL); break; } diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 727b2ff2a..938874266 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -416,12 +416,12 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { } void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); SkelAnime_Update(&this->skelAnime); } void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -550,7 +550,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) { break; case 0xD66: - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_19; EnGeg_ChangeAnim(this, play); @@ -568,7 +568,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD72: case 0xD75: case 0xD8B: - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_4; EnGeg_ChangeAnim(this, play); @@ -713,7 +713,7 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->unk_496 = 0xD68; Message_ContinueTextbox(play, this->unk_496); - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); if (this->unk_248 >= 0) { this->animIndex = ENGEG_ANIM_13; EnGeg_ChangeAnim(this, play); @@ -926,7 +926,7 @@ void EnGeg_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->unk_248 < 0) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 495f4712c..299ab5c4b 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -165,7 +165,7 @@ void EnGirlA_InitObjIndex(EnGirlA* this, PlayState* play) { return; } - this->objIndex = Object_GetIndex(&play->objectCtx, sShopItemEntries[params].objectId); + this->objIndex = Object_GetSlot(&play->objectCtx, sShopItemEntries[params].objectId); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 0aecc3233..2f6217411 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -991,10 +991,10 @@ s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) { } if (extraObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment); this->skelAnime.playSpeed = this->animPlaySpeed; isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); } return isAnimFinished; @@ -1051,11 +1051,11 @@ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { } if (extraObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); this->animPlaySpeed = this->skelAnime.playSpeed; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); } return didAnimChange; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 088e3fae0..df5718605 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -738,7 +738,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_DONKEY; this->unk_528 = 80.0f; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { Actor_Kill(&this->actor); return; } @@ -748,8 +748,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_2; this->unk_528 = 64.8f; this->boostSpeed = 15; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) { - thisx->objBankIndex = Object_Spawn(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) { + thisx->objBankIndex = Object_SpawnPersistent(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); Actor_SetObjectDependency(play, &this->actor); Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); Animation_PlayOnce(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex]); @@ -760,7 +760,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { } else if (ENHORSE_IS_BANDIT_TYPE(&this->actor)) { this->type = HORSE_TYPE_BANDIT; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index cb5d73093..801ad428c 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -209,7 +209,7 @@ void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sAlienInitChain); this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000; - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UCH); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -220,7 +220,7 @@ void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sRomaniInitChain); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MA1); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -233,7 +233,7 @@ void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowInitChain); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0, EN_INVADEPOH_DEMO_TYPE_COW_TAIL); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; @@ -250,7 +250,7 @@ void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowTailInitChain); - this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW); + this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); if (this->objectIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 23e19bba2..10dc7bcdf 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -425,7 +425,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { this->unk_197 |= 1; } - this->unk_196 = Object_GetIndex(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]); + this->unk_196 = Object_GetSlot(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]); if (this->unk_196 < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 890fafd37..0b246b4df 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -393,7 +393,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) { this->isInWater |= 1; } - this->objIndex = Object_GetIndex(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]); + this->objIndex = Object_GetSlot(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 215c2146c..856c13c0d 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -707,7 +707,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { s16 step; // Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default. - gSPSegment(gfx++, 0x06, play->objectCtx.status[this->actor.objBankIndex].segment); + gSPSegment(gfx++, 0x06, play->objectCtx.slots[this->actor.objBankIndex].segment); Gfx_SetupDL39_Ptr(&gfx); diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index 2a6a7ea1b..6ee4a5f80 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -61,7 +61,7 @@ void EnNwc_Init(Actor* thisx, PlayState* play) { s32 niwObjectIndex; EnNwc* this = THIS; - niwObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_NIW); + niwObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_NIW); if (niwObjectIndex < 0) { // niw object does not exist, we need it for tranformation, despawn Actor_Kill(&this->actor); @@ -248,14 +248,14 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) { void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->niwObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectIndex].segment); SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Animation_Change(&this->niwSkeleton, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, 0.0f); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->nwcObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->nwcObjectIndex].segment); this->state = NWC_STATE_NIW_LOADED; EnNwc_ToggleState(this); } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 096b8ff38..45f2b485c 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -275,7 +275,7 @@ void EnOssan_Init(Actor* thisx, PlayState* play) { return; } id = sObjectIds[this->actor.params]; - this->objIndex = Object_GetIndex(&play->objectCtx, id); + this->objIndex = Object_GetSlot(&play->objectCtx, id); if (this->objIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index a89ec608e..33f79d4f2 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -786,18 +786,18 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) { if (this->animInfoIndex == EN_S_GORO_ANIM_IDLE_STAND) { if (((EnJg*)this->otherGoron)->flags & 1) { - this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU); + this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); this->animInfoIndex = EN_S_GORO_ANIM_TAISOU_CHEER; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); return true; } } } else if ((this->animInfoIndex == EN_S_GORO_ANIM_TAISOU_CHEER) && !(((EnJg*)this->otherGoron)->flags & 1)) { - this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); this->animInfoIndex = EN_S_GORO_ANIM_IDLE_STAND; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); this->skelAnime.curFrame = this->skelAnime.endFrame; @@ -1307,7 +1307,7 @@ void EnSGoro_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - s32 objIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP); + s32 objIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); this->loadedObjIndex = objIndex; if (objIndex < 0) { @@ -1329,7 +1329,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); SkelAnime_Update(&this->skelAnime); if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { EnSGoro_UpdateAttentionTarget(this, play); diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index 2e05f0f57..92b88e462 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -69,7 +69,7 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN); } - objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); if (objectIndex >= 0) { this->objectIndex = objectIndex; } diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index e5ab7dbad..8a8be15c4 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -381,7 +381,7 @@ void EnSob1_SpawnShopItems(EnSob1* this, PlayState* play, ShopItem* shopItem) { s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { if (objIds[1] != OBJECT_ID_MAX) { - this->unusedObjIndex = Object_GetIndex(&play->objectCtx, objIds[1]); + this->unusedObjIndex = Object_GetSlot(&play->objectCtx, objIds[1]); if (this->unusedObjIndex < 0) { return false; } @@ -389,7 +389,7 @@ s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { this->unusedObjIndex = -1; } if (objIds[2] != OBJECT_ID_MAX) { - this->shopkeeperAnimObjIndex = Object_GetIndex(&play->objectCtx, objIds[2]); + this->shopkeeperAnimObjIndex = Object_GetSlot(&play->objectCtx, objIds[2]); if (this->shopkeeperAnimObjIndex < 0) { return false; } @@ -427,7 +427,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { } objIds = sObjectIds[this->shopType]; - this->mainObjIndex = Object_GetIndex(&play->objectCtx, objIds[0]); + this->mainObjIndex = Object_GetSlot(&play->objectCtx, objIds[0]); if (this->mainObjIndex < 0) { Actor_Kill(&this->actor); return; @@ -1345,7 +1345,7 @@ void EnSob1_Blink(EnSob1* this) { } void EnSob1_ChangeObject(EnSob1* this, PlayState* play) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); } s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { @@ -1363,7 +1363,7 @@ s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gZoraSkel, NULL, this->jointTable, this->morphTable, ZORA_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); Animation_Change(&this->skelAnime, &gZoraShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gZoraShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_ZoraShopkeeper_Draw; @@ -1372,7 +1372,7 @@ void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { void EnSob1_GoronShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); Animation_Change(&this->skelAnime, &gGoronShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGoronShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_GoronShopkeeper_Draw; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index 2491ec4ed..e4240de0a 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -245,9 +245,9 @@ void func_808A54B0(EnSt* this, PlayState* play) { if ((this->unk_18C & 1) && (this->actor.colChkInfo.health != 0)) { OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_2C0].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_2C0].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->unk_2C0].segment); Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); @@ -842,7 +842,7 @@ void func_808A701C(EnSt* this, PlayState* play) { void EnSt_Init(Actor* thisx, PlayState* play) { EnSt* this = THIS; - this->unk_2C0 = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->unk_2C0 = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); if (((ENST_GET_3F(&this->actor) != ENST_3F_63) && Flags_GetSwitch(play, ENST_GET_3F(&this->actor))) || (this->unk_2C0 < 0)) { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 97aa3ed7b..daf58065f 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -112,12 +112,12 @@ void EnSth_Init(Actor* thisx, PlayState* play) { // this actor can draw two separate bodies that use different objects if (STH_GET_SWAMP_BODY(&this->actor)) { - objectId = Object_GetIndex(&play->objectCtx, OBJECT_AHG); + objectId = Object_GetSlot(&play->objectCtx, OBJECT_AHG); } else { - objectId = Object_GetIndex(&play->objectCtx, OBJECT_STH); + objectId = Object_GetSlot(&play->objectCtx, OBJECT_STH); } this->mainObjectId = objectId; - this->maskOfTruthObjectId = Object_GetIndex(&play->objectCtx, OBJECT_MASK_TRUTH); + this->maskOfTruthObjectId = Object_GetSlot(&play->objectCtx, OBJECT_MASK_TRUTH); Actor_SetScale(&this->actor, 0.01f); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -740,7 +740,7 @@ void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.status[this->maskOfTruthObjectId].segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[this->maskOfTruthObjectId].segment); gSPDisplayList(POLY_OPA_DISP++, object_mask_truth_DL_0001A0); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index 66b87c998..be0821580 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -35,7 +35,7 @@ ActorInit En_Sth2_InitVars = { void EnSth2_Init(Actor* thisx, PlayState* play) { EnSth2* this = THIS; - this->objIndex = Object_GetIndex(&play->objectCtx, OBJECT_STH); + this->objIndex = Object_GetSlot(&play->objectCtx, OBJECT_STH); Actor_SetScale(&this->actor, 0.01f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); this->unused = 0; 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 e853570f4..d909826bb 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -83,7 +83,7 @@ void EnTest2_Update(Actor* thisx, PlayState* play) { EnTest2ModelInfo* modelInfo; EnTest2* this = THIS; - objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[this->actor.params]); + objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[this->actor.params]); if (objectIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index bae88696f..4ae591302 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -60,7 +60,7 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnWarpTag_WaitForPlayer; } else { - if ((this->dangeonKeepObject = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) { + if ((this->dangeonKeepObject = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index c5b218815..ba4507b71 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -55,7 +55,7 @@ void ItemEtcetera_Init(Actor* thisx, PlayState* play) { s32 pad; ItemEtcetera* this = THIS; s32 type = ITEMETCETERA_GET_FF(&this->actor); - s32 objBankIndex = Object_GetIndex(&play->objectCtx, sObjectIds[type]); + s32 objBankIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); if (objBankIndex < 0) { // assert on debug diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index 12afce508..3846ecfd0 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -80,7 +80,7 @@ void ObjEtcetera_Init(Actor* thisx, PlayState* play) { type = DEKU_FLOWER_TYPE_PINK; } - objectIndex = Object_GetIndex(&play->objectCtx, objectIds[type]); + objectIndex = Object_GetSlot(&play->objectCtx, objectIds[type]); if (objectIndex >= 0) { this->objIndex = objectIndex; } diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index e33f62f8b..93c79efa6 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -149,7 +149,7 @@ void ObjKibako_Init(Actor* thisx, PlayState* play2) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collider); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->bankIndex = Object_GetIndex(&play->objectCtx, sObjectIdList[whichBankIndex]); + this->bankIndex = Object_GetSlot(&play->objectCtx, sObjectIdList[whichBankIndex]); if (this->bankIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index d783c88e8..770f2131d 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -93,7 +93,7 @@ void ObjNozoki_Destroy(Actor* thisx, PlayState* play) { } void func_80BA2514(ObjNozoki* this, PlayState* play) { - s32 sp24 = Object_GetIndex(&play->objectCtx, D_80BA34B8[this->unk_15C]); + s32 sp24 = Object_GetSlot(&play->objectCtx, D_80BA34B8[this->unk_15C]); if (sp24 < 0) { Actor_Kill(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c index 649343554..d8b04684b 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -130,7 +130,7 @@ void ObjPurify_Init(Actor* thisx, PlayState* play) { if (sp20 == 1) { DynaPolyActor_Init(&this->dyna, 0); } - this->objIndex = Object_GetIndex(&play->objectCtx, info->objectId); + this->objIndex = Object_GetSlot(&play->objectCtx, info->objectId); if (this->objIndex < 0) { Actor_Kill(&this->dyna.actor); } else if (sp20 == 0) { diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index 3bedc3ea4..9a0c9d1c3 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -207,7 +207,7 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - this->unk_17A = Object_GetIndex(&play->objectCtx, sp24->unk_00); + this->unk_17A = Object_GetSlot(&play->objectCtx, sp24->unk_00); if (sp28 == 0) { func_809A3D1C(this); diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c index d6f8b468b..1a316dfab 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -186,7 +186,7 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) { this->cylinderCollider.dim.radius = sPotTypeData[type].radius; this->cylinderCollider.dim.height = sPotTypeData[type].height; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->objBankIndex = Object_GetIndex(&play->objectCtx, sPotTypeData[type].objId); + this->objBankIndex = Object_GetSlot(&play->objectCtx, sPotTypeData[type].objId); if (this->objBankIndex < 0) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 57322fb0f..d04907e50 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -10661,7 +10661,7 @@ void Player_Init(Actor* thisx, PlayState* play) { if (this->actor.shape.rot.x != 0) { this->transformation = this->actor.shape.rot.x - 1; - objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); + objBankIndex = Object_GetSlot(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); this->actor.objBankIndex = objBankIndex; if (objBankIndex < 0) { Actor_Kill(&this->actor); @@ -12380,7 +12380,7 @@ void Player_Update(Actor* thisx, PlayState* play) { // This block is a leftover dog-following mechanic from OoT if (gSaveContext.dogParams < 0) { - if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) { + if (Object_GetSlot(&play->objectCtx, OBJECT_DOG) < 0) { gSaveContext.dogParams = 0; } else { Actor* dog; diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c index e63d414d9..a7161d37e 100644 --- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c +++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c @@ -25,7 +25,7 @@ EffectSsInit Effect_En_Ice_Block_InitVars = { #define rRotVel regs[3] u32 EffectEnIceBlock_CheckIceBlockObject(EffectSs* this, PlayState* play) { - if (((this->rObjId = Object_GetIndex(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) || + if (((this->rObjId = Object_GetSlot(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjId))) { this->life = -1; this->draw = NULL; @@ -63,7 +63,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x06, - play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK + play->objectCtx.slots[this->rObjId].segment); // object: OBJECT_ICE_BLOCK Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index 87e50fb5f..5febef413 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -29,7 +29,7 @@ EffectSsInit Effect_Ss_D_Fire_InitVars = { static TexturePtr sFireTextures[] = { gDodongoFire0Tex, gDodongoFire1Tex, gDodongoFire2Tex, gDodongoFire3Tex }; s32 EffectSsDFire_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_DODONGO)) < 0) || + if (((this->rObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_DODONGO)) < 0) || !Object_IsLoaded(&play->objectCtx, this->rObjectIndex)) { this->life = -1; this->draw = NULL; @@ -69,7 +69,7 @@ void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) { f32 scale; if (EffectSsDFire_CheckForObject(this, play)) { - object = play->objectCtx.status[this->rObjectIndex].segment; + object = play->objectCtx.slots[this->rObjectIndex].segment; OPEN_DISPS(gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index e3daa2530..e15e58f25 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -33,11 +33,11 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar EffectSsExtraInitParams* params = PARAMS; s32 objIndex; - objIndex = Object_GetIndex(&play->objectCtx, OBJECT_YABUSAME_POINT); + objIndex = Object_GetSlot(&play->objectCtx, OBJECT_YABUSAME_POINT); if ((objIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objIndex))) { void* segBackup = gSegments[6]; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); this->pos = params->pos; this->velocity = params->velocity; @@ -62,7 +62,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) { void* storedSegment; scale = this->rScale / 100.0f; - storedSegment = play->objectCtx.status[this->rObjId].segment; + storedSegment = play->objectCtx.slots[this->rObjId].segment; OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c index 15444ad47..828570685 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c @@ -27,7 +27,7 @@ EffectSsInit Effect_Ss_Hahen_InitVars = { }; void EffectSsHahen_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId)) < 0) || + if (((this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId)) < 0) || !Object_IsLoaded(&play->objectCtx, this->rObjBankIndex)) { this->life = -1; this->draw = NULL; @@ -69,7 +69,7 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != HAHEN_OBJECT_DEFAULT) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -85,7 +85,7 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != -1) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index c552e7c50..bde2227d2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -95,9 +95,9 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); if (this->rObjId != KAKERA_OBJECT_DEFAULT) { if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } else { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); } } @@ -127,7 +127,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { } void EffectSsKakera_CheckForObject(EffectSs* this, PlayState* play) { - this->rObjBankIndex = Object_GetIndex(&play->objectCtx, this->rObjId); + this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId); if ((this->rObjBankIndex < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjBankIndex))) { this->life = 0; this->draw = NULL; diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index c1615e2bf..fcdca875f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -25,7 +25,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar EffectSsStickInitParams* initParams = PARAMS; Vec3f pos; - this->rObjBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + this->rObjBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); pos = initParams->pos; this->pos = pos; this->vec = pos; @@ -51,7 +51,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 79ab56b45..0d5c950c6 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2415,10 +2415,10 @@ 0x8012F1BC:("Inventory_IncrementSkullTokenCount",), 0x8012F22C:("Inventory_GetSkullTokenCount",), 0x8012F278:("Inventory_SaveLotteryCodeGuess",), - 0x8012F2E0:("Object_Spawn",), - 0x8012F3D0:("Object_InitBank",), - 0x8012F4FC:("Object_UpdateBank",), - 0x8012F608:("Object_GetIndex",), + 0x8012F2E0:("Object_SpawnPersistent",), + 0x8012F3D0:("Object_InitContext",), + 0x8012F4FC:("Object_UpdateEntries",), + 0x8012F608:("Object_GetSlot",), 0x8012F668:("Object_IsLoaded",), 0x8012F698:("Object_LoadAll",), 0x8012F73C:("func_8012F73C",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 43e554975..1fe4ce07f 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -774,6 +774,9 @@ wordReplace = { "func_80133038": "Schedule_RunScript", + "Object_GetIndex": "Object_GetSlot", + "Object_Spawn": "Object_SpawnPersistent", + "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", "EffectSsKiraKira_SpawnSmall": "EffectSsKirakira_SpawnSmall", "EffectSsKiraKira_SpawnDispersed": "EffectSsKirakira_SpawnDispersed", @@ -1156,6 +1159,7 @@ wordReplace = { "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1", "play->roomCtx.curRoom.unk2": "play->roomCtx.curRoom.behaviorType2", "play->roomCtx.unk31": "play->roomCtx.status", + "play->objectCtx.status": "play->objectCtx.slots", "actorCtx.unkC": "actorCtx.halfDaysBit", "actorCtx.unk1F4": "actorCtx.playerImpact.type", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 762334814..02e1bf9cd 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1929,10 +1929,10 @@ asm/non_matchings/code/code_8012EC80/Inventory_SaveDekuPlaygroundHighScore.s,Inv asm/non_matchings/code/code_8012EC80/Inventory_IncrementSkullTokenCount.s,Inventory_IncrementSkullTokenCount,0x8012F1BC,0x1C asm/non_matchings/code/code_8012EC80/Inventory_GetSkullTokenCount.s,Inventory_GetSkullTokenCount,0x8012F22C,0x13 asm/non_matchings/code/code_8012EC80/Inventory_SaveLotteryCodeGuess.s,Inventory_SaveLotteryCodeGuess,0x8012F278,0x16 -asm/non_matchings/code/z_scene/Object_Spawn.s,Object_Spawn,0x8012F2E0,0x3C -asm/non_matchings/code/z_scene/Object_InitBank.s,Object_InitBank,0x8012F3D0,0x4B -asm/non_matchings/code/z_scene/Object_UpdateBank.s,Object_UpdateBank,0x8012F4FC,0x43 -asm/non_matchings/code/z_scene/Object_GetIndex.s,Object_GetIndex,0x8012F608,0x18 +asm/non_matchings/code/z_scene/Object_SpawnPersistent.s,Object_SpawnPersistent,0x8012F2E0,0x3C +asm/non_matchings/code/z_scene/Object_InitContext.s,Object_InitContext,0x8012F3D0,0x4B +asm/non_matchings/code/z_scene/Object_UpdateEntries.s,Object_UpdateEntries,0x8012F4FC,0x43 +asm/non_matchings/code/z_scene/Object_GetSlot.s,Object_GetSlot,0x8012F608,0x18 asm/non_matchings/code/z_scene/Object_IsLoaded.s,Object_IsLoaded,0x8012F668,0xC asm/non_matchings/code/z_scene/Object_LoadAll.s,Object_LoadAll,0x8012F698,0x29 asm/non_matchings/code/z_scene/func_8012F73C.s,func_8012F73C,0x8012F73C,0x18 From d3104be63caa4060a87ff169f42bf255d6a2a08c Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 5 Oct 2023 15:44:51 +1100 Subject: [PATCH 47/74] Switch Flag Cleanup (#1406) * cleanup switchFlag * more cleanup * switchFlags --- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 +- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 6 +-- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.h | 2 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 30 ++++++----- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h | 6 +-- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 52 +++++++++---------- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h | 4 +- .../z_bg_dblue_waterfall.c | 20 +++---- .../z_bg_dblue_waterfall.h | 2 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 17 +++--- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h | 2 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 10 ++-- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.h | 2 +- .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 8 +-- .../ovl_Bg_F40_Switch/z_bg_f40_switch.h | 2 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 2 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.h | 2 +- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c | 15 +++--- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h | 2 +- .../z_bg_hakugin_bombwall.c | 4 +- .../z_bg_hakugin_bombwall.h | 2 +- .../z_bg_hakugin_elvpole.c | 10 ++-- .../z_bg_hakugin_elvpole.h | 2 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 36 ++++++------- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h | 5 +- .../z_bg_hakugin_switch.c | 18 +++---- .../z_bg_hakugin_switch.h | 2 +- .../z_bg_ikana_bombwall.c | 4 +- .../z_bg_ikana_bombwall.h | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h | 2 +- .../z_bg_ikana_rotaryroom.c | 22 ++++---- .../z_bg_ikana_rotaryroom.h | 4 +- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c | 10 ++-- .../ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h | 3 ++ .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 4 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h | 2 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 4 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.h | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h | 2 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c | 4 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h | 2 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 4 +- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h | 2 + .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.h | 2 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.c | 4 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.h | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.h | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 11 ++-- .../actors/ovl_Door_Shutter/z_door_shutter.h | 2 +- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h | 2 +- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h | 2 +- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h | 2 +- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c | 16 +++--- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h | 2 +- src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c | 12 ++--- src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h | 2 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 22 ++++---- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.h | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 7 +-- .../actors/ovl_En_Bigokuta/z_en_bigokuta.h | 2 + src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 13 ++--- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 18 +++---- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 10 +--- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.h | 2 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 4 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.h | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 4 +- .../actors/ovl_En_Elfbub/z_en_elfbub.h | 2 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 2 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 10 ++-- .../actors/ovl_En_Elforg/z_en_elforg.h | 2 +- src/overlays/actors/ovl_En_Fr/z_en_fr.c | 4 +- src/overlays/actors/ovl_En_Fr/z_en_fr.h | 2 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 10 ++-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 8 +-- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 10 ++-- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 4 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 2 +- .../actors/ovl_En_Hit_Tag/z_en_hit_tag.c | 2 +- .../actors/ovl_En_Hit_Tag/z_en_hit_tag.h | 2 +- .../z_en_invisible_ruppe.c | 12 ++--- .../z_en_invisible_ruppe.h | 4 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +-- src/overlays/actors/ovl_En_Ishi/z_en_ishi.h | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 8 +-- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 2 +- src/overlays/actors/ovl_En_Light/z_en_light.c | 6 +-- src/overlays/actors/ovl_En_Light/z_en_light.h | 2 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 24 ++++----- .../ovl_En_Okarina_Tag/z_en_okarina_tag.h | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 8 +-- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 4 +- src/overlays/actors/ovl_En_Owl/z_en_owl.h | 2 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 4 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.h | 2 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 16 +++--- .../actors/ovl_En_Recepgirl/z_en_recepgirl.h | 2 + .../actors/ovl_En_S_Goro/z_en_s_goro.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.h | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +-- src/overlays/actors/ovl_En_St/z_en_st.h | 3 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.h | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 2 +- .../actors/ovl_En_Time_Tag/z_en_time_tag.h | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 6 +-- src/overlays/actors/ovl_En_Tk/z_en_tk.h | 4 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 16 +++--- src/overlays/actors/ovl_En_Toto/z_en_toto.h | 4 ++ .../ovl_En_Water_Effect/z_en_water_effect.c | 3 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 6 +-- src/overlays/actors/ovl_En_Zot/z_en_zot.h | 1 + src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c | 4 +- src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h | 2 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 4 +- .../actors/ovl_Obj_Armos/z_obj_armos.h | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 34 ++++++------ src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h | 4 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 6 +-- .../ovl_Obj_Bigicicle/z_obj_bigicicle.h | 2 + .../ovl_Obj_Blockstop/z_obj_blockstop.c | 4 +- .../ovl_Obj_Blockstop/z_obj_blockstop.h | 2 + .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 4 +- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h | 2 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 6 +-- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h | 2 + src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c | 11 ++-- src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h | 5 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 4 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.h | 2 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 22 ++++---- .../ovl_Obj_Fireshield/z_obj_fireshield.h | 4 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 2 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h | 2 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.c | 4 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.h | 2 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.c | 4 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.h | 2 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.c | 4 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.h | 2 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 10 ++-- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 47 +++++++++-------- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.h | 4 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 10 ++-- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h | 6 +-- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h | 2 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c | 4 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 4 +- .../ovl_Obj_Lightblock/z_obj_lightblock.h | 2 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 8 +-- .../ovl_Obj_Lightswitch/z_obj_lightswitch.h | 2 +- .../ovl_Obj_Makekinsuta/z_obj_makekinsuta.c | 6 +-- .../ovl_Obj_Makekinsuta/z_obj_makekinsuta.h | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c | 8 +-- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h | 4 +- .../actors/ovl_Obj_Mure3/z_obj_mure3.c | 4 +- .../actors/ovl_Obj_Mure3/z_obj_mure3.h | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 20 +++---- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.h | 4 +- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 20 ++++--- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 4 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 6 +-- .../actors/ovl_Obj_Raillift/z_obj_raillift.h | 2 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.c | 2 +- .../ovl_Obj_Roomtimer/z_obj_roomtimer.h | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 6 +-- .../actors/ovl_Obj_Snowball/z_obj_snowball.h | 2 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 4 +- .../ovl_Obj_Spidertent/z_obj_spidertent.h | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 8 +-- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 4 +- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h | 2 +- .../actors/ovl_Obj_Wturn/z_obj_wturn.c | 6 +-- .../actors/ovl_Obj_Wturn/z_obj_wturn.h | 2 + .../ovl_Obj_Y2shutter/z_obj_y2shutter.c | 10 ++-- .../ovl_Obj_Y2shutter/z_obj_y2shutter.h | 2 +- 203 files changed, 616 insertions(+), 581 deletions(-) diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c index 0391925ae..da688a81b 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c @@ -103,7 +103,7 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_astr_obj_Colheader_002498); Collider_InitTris(play, &this->collider); - if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(thisx))) { + if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); return; } @@ -163,7 +163,7 @@ void func_80C0A378(BgAstrBombwall* this) { void func_80C0A38C(BgAstrBombwall* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; - Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGASTRBOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); func_80C0A400(this, play); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h index 224d94d7a..698ccfda1 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h @@ -5,7 +5,7 @@ struct BgAstrBombwall; -#define BGASTRBOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGASTRBOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*BgAstrBombwallActionFunc)(struct BgAstrBombwall*, PlayState*); typedef struct BgAstrBombwall { diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index dae692c89..45a29260f 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -191,8 +191,8 @@ s32 func_808B74D8(BgBreakwall* this, PlayState* play) { s32 func_808B751C(BgBreakwall* this, PlayState* play) { Actor_SetScale(&this->dyna.actor, 0.1f); - if ((BGBREAKWALL_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - !Flags_GetSwitch(play, BGBREAKWALL_SWITCHFLAG(&this->dyna.actor))) { + if ((BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + !Flags_GetSwitch(play, BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor))) { return false; } @@ -220,7 +220,7 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) { } BgBreakwall_SetupAction(this, func_808B76CC); - this->switchFlag = BGBREAKWALL_SWITCHFLAG(&this->dyna.actor); + this->switchFlag = BGBREAKWALL_SWITCH_FLAG(&this->dyna.actor); } void BgBreakwall_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h index c332fe82c..5baa97232 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h @@ -10,7 +10,7 @@ typedef s32 (*BgBreakwallUnkFunc)(struct BgBreakwall*, PlayState*); typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*); #define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF) -#define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) +#define BGBREAKWALL_SWITCH_FLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) typedef enum { /* 7 */ BGBREAKWALL_F_7 = 7, diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c index 5d0ac3bc5..52c0f046f 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c @@ -198,7 +198,7 @@ void func_80B8264C(BgDblueBalance* this) { f32 temp_f0; s16 phi_s2; - if (this->unk_170 != 0) { + if (this->isSwitchFlagSet) { if (this->unk_183 < 8) { this->unk_183 = 0; } else { @@ -247,7 +247,7 @@ void func_80B8264C(BgDblueBalance* this) { } void func_80B828E4(BgDblueBalance* this, PlayState* play) { - if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)) && (this->unk_17D <= 0)) { + if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)) && (this->unk_17D <= 0)) { if (this->unk_183 >= 252) { this->unk_183 = 255; } else { @@ -306,7 +306,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { BgDblueBalance* this = THIS; s32 sp2C = BGDBLUEBALANCE_GET_300(&this->dyna.actor); s32 pad2; - s32 sp24 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)); + s32 isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_ProcessInitChain(&this->dyna.actor, sInitChain); @@ -326,7 +326,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { } if (sp2C == 0) { - if (sp24 != 0) { + if (isSwitchFlagSet) { this->dyna.actor.shape.rot.z = -0x1C72; this->unk_174 = -0x1C72; } else { @@ -337,9 +337,9 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { func_80B8259C(this, play); func_80B82DC4(this); } else if (sp2C == 3) { - this->unk_16C = sp24; - this->unk_170 = sp24; - if (sp24 != 0) { + this->isSwitchFlagSet2 = isSwitchFlagSet; + this->isSwitchFlagSet = isSwitchFlagSet; + if (isSwitchFlagSet) { func_80B83344(this); } else { this->unk_178 = 0x1F4; @@ -396,7 +396,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) { BgDblueBalance* sp3C; Vec3f sp30; - if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) { if (this->unk_17D > 0) { this->unk_17D--; } else { @@ -555,7 +555,7 @@ void func_80B83344(BgDblueBalance* this) { } void func_80B8335C(BgDblueBalance* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_178 = -0x14; func_80B833A8(this); } @@ -573,8 +573,8 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { s16 sp26; s16 sp24; - if (this->unk_170 != 0) { - if ((this->unk_16C == 0) && (this->unk_17F == 0)) { + if (this->isSwitchFlagSet) { + if (!this->isSwitchFlagSet2 && (this->unk_17F == 0)) { this->unk_17F = 1; } @@ -590,9 +590,11 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { sp26 = this->dyna.actor.shape.rot.x; this->dyna.actor.shape.rot.x += this->unk_178; sp24 = this->dyna.actor.shape.rot.x; + + //! FAKE: if (sp24) {} - if (this->unk_170 != 0) { + if (this->isSwitchFlagSet) { if (this->unk_186 != 0) { if (func_80B82B00(sp26, sp24, this->unk_184)) { sp28 = true; @@ -619,7 +621,7 @@ void func_80B833C4(BgDblueBalance* this, PlayState* play) { void func_80B83518(Actor* thisx, PlayState* play) { BgDblueBalance* this = THIS; - this->unk_170 = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_7F(&this->dyna.actor)); + this->isSwitchFlagSet = Flags_GetSwitch(play, BGDBLUEBALANCE_GET_SWITCH_FLAG(&this->dyna.actor)); this->actionFunc(this, play); @@ -638,7 +640,7 @@ void func_80B83518(Actor* thisx, PlayState* play) { CutsceneManager_Queue(this->dyna.actor.csId); } } - this->unk_16C = this->unk_170; + this->isSwitchFlagSet2 = this->isSwitchFlagSet; } void BgDblueBalance_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h index 5d72ea3db..4c16a1cb8 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h @@ -7,7 +7,7 @@ struct BgDblueBalance; typedef void (*BgDblueBalanceActionFunc)(struct BgDblueBalance*, PlayState*); -#define BGDBLUEBALANCE_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGDBLUEBALANCE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGDBLUEBALANCE_GET_300(thisx) (((thisx)->params >> 8) & 3) typedef struct { @@ -23,8 +23,8 @@ typedef struct BgDblueBalance { /* 0x160 */ struct BgDblueBalance* unk_160; /* 0x164 */ struct BgDblueBalance* unk_164; /* 0x168 */ BgDblueBalanceActionFunc actionFunc; - /* 0x16C */ s32 unk_16C; - /* 0x170 */ s32 unk_170; + /* 0x16C */ s32 isSwitchFlagSet2; + /* 0x170 */ s32 isSwitchFlagSet; /* 0x174 */ s16 unk_174; /* 0x176 */ s16 unk_176; /* 0x178 */ s16 unk_178; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index 6562c4738..be3623f2d 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -108,22 +108,22 @@ static InitChainEntry sInitChain[] = { Vec3f D_80A2B988 = { 1785.0f, 0.0f, 220.0f }; -s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) { +s32 func_80A29A80(PlayState* play, s32 switchFlagBase, s32 arg2) { s32 sp2C = 1; - s32 val; + s32 switchFlagOffset; s32 val2; if (arg2 < 14) { - val = D_80A2B870[arg2][0]; + switchFlagOffset = D_80A2B870[arg2][0]; val2 = D_80A2B870[arg2][1]; - while (val--) { - if ((1 << val) & val2) { - if (!Flags_GetSwitch(play, arg1 + val)) { + while (switchFlagOffset--) { + if ((1 << switchFlagOffset) & val2) { + if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } - } else if (Flags_GetSwitch(play, arg1 + val)) { + } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } @@ -132,20 +132,20 @@ s32 func_80A29A80(PlayState* play, s32 arg1, s32 arg2) { sp2C = 0; switch (arg2) { case 14: - if (!Flags_GetSwitch(play, arg1)) { + if (!Flags_GetSwitch(play, switchFlagBase)) { sp2C = 1; } - if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3)) { + if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3)) { sp2C += 2; } break; case 15: - if (!Flags_GetSwitch(play, arg1) || - (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3))) { + if (!Flags_GetSwitch(play, switchFlagBase) || + (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3))) { sp2C = 1; } break; @@ -162,7 +162,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_160 = BGDBLUEMOVEBG_GET_F(thisx); this->unk_1BC = BGDBLUEMOVEBG_GET_F000(thisx); - this->unk_1C0 = BGDBLUEMOVEBG_GET_FF0(thisx); + this->switchFlag = BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 == 9) || (this->unk_160 == 8)) { @@ -214,7 +214,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { } this->unk_17E = 0; this->unk_184 = 0.0f; - if (Flags_GetSwitch(play, this->unk_1C0)) { + if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_18C = 0x384; } else { this->unk_18C = 0; @@ -224,7 +224,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { break; case 6: - this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC); this->unk_1CC = D_80A2B96C[this->unk_178]; this->unk_1CE = this->unk_1CC; this->actionFunc = func_80A2A1E0; @@ -237,7 +237,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.x = 0; this->dyna.actor.world.rot.z = 0; this->dyna.actor.shape.rot.z = 0; - if (Flags_GetSwitch(play, this->unk_1C0)) { + if (Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->dyna.actor); break; } @@ -257,7 +257,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sCsIdList); i++) { sCsIdList[i] = this->csIdList[i]; } - this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + this->unk_178 = func_80A29A80(play, this->switchFlag, this->unk_1BC); this->unk_1CC = D_80A2B96C[this->unk_178]; this->unk_1CE = this->unk_1CC; Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW); @@ -275,7 +275,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { break; case 11: - this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)]; + this->unk_1CC = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)]; D_80A2BBF0 = this; this->dyna.actor.flags |= ACTOR_FLAG_20; this->dyna.actor.update = Actor_Noop; @@ -314,7 +314,7 @@ void func_80A2A128(BgDblueMovebg* this, PlayState* play) { } void func_80A2A1E0(BgDblueMovebg* this, PlayState* play) { - s32 temp_v0 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + s32 temp_v0 = func_80A29A80(play, this->switchFlag, this->unk_1BC); if (temp_v0 != this->unk_178) { switch (temp_v0) { @@ -422,7 +422,7 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) { if (sp20) { player->stateFlags2 &= ~PLAYER_STATE2_10; this->dyna.pushForce = 0.0f; - Flags_SetSwitch(play, this->unk_1C0); + Flags_SetSwitch(play, this->switchFlag); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); if (func_80A29A80(play, this->unk_1C8, this->unk_1C4)) { @@ -510,9 +510,9 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) { temp = (this->unk_18C + sp26 + 3600) % 3600; if ((temp == 900) || (temp == 2700)) { - Flags_SetSwitch(play, this->unk_1C0); + Flags_SetSwitch(play, this->switchFlag); } else { - Flags_UnsetSwitch(play, this->unk_1C0); + Flags_UnsetSwitch(play, this->switchFlag); } player->stateFlags1 |= PLAYER_STATE1_20; @@ -637,7 +637,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) { } } - temp_v0_3 = func_80A29A80(play, this->unk_1C0, this->unk_1BC); + temp_v0_3 = func_80A29A80(play, this->switchFlag, this->unk_1BC); if (temp_v0_3 != this->unk_178) { switch (temp_v0_3) { case 1: @@ -704,7 +704,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) { } void func_80A2B1A0(BgDblueMovebg* this, PlayState* play) { - switch (func_80A29A80(play, this->unk_1C0, this->unk_1BC)) { + switch (func_80A29A80(play, this->switchFlag, this->unk_1BC)) { case 1: this->dyna.actor.shape.rot.z = this->dyna.actor.home.rot.z; break; @@ -736,7 +736,7 @@ void func_80A2B274(Actor* thisx, PlayState* play) { return; } - temp_v1 = D_80A2B96C[func_80A29A80(play, this->unk_1C0, this->unk_1BC)]; + temp_v1 = D_80A2B96C[func_80A29A80(play, this->switchFlag, this->unk_1BC)]; if (temp_v1 != 0) { if (temp_v1 > 0) { Audio_PlaySfx_WaterWheel(&this->dyna.actor.projectedPos, NA_SE_EV_DUMMY_WATER_WHEEL_RR - SFX_FLAG); diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h index 6e81c24c1..c9a4e2f7e 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h @@ -8,7 +8,7 @@ struct BgDblueMovebg; typedef void (*BgDblueMovebgActionFunc)(struct BgDblueMovebg*, PlayState*); #define BGDBLUEMOVEBG_GET_F(thisx) ((thisx)->params & 0xF) -#define BGDBLUEMOVEBG_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF) +#define BGDBLUEMOVEBG_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0xFF) #define BGDBLUEMOVEBG_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) #define BGDBLUEMOVEBG_F_8 8 @@ -39,7 +39,7 @@ typedef struct BgDblueMovebg { /* 0x1B4 */ UNK_TYPE1 unk1B4[2]; /* 0x1B6 */ s16 csIdList[2]; /* 0x1BC */ s32 unk_1BC; - /* 0x1C0 */ s32 unk_1C0; + /* 0x1C0 */ s32 switchFlag; /* 0x1C4 */ s32 unk_1C4; /* 0x1C8 */ s32 unk_1C8; /* 0x1CC */ s16 unk_1CC; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c index 44acf9343..211aac6fd 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c @@ -80,7 +80,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) { s32 phi_v1; s32 sp18 = BGDBLUEWATERFALL_GET_100(&this->actor); - if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) { phi_v1 = true; } else { phi_v1 = false; @@ -91,7 +91,7 @@ s32 func_80B83D04(BgDblueWaterfall* this, PlayState* play) { s32 func_80B83D58(Actor* thisx, PlayState* play) { BgDblueWaterfall* this = THIS; - if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor))) { return false; } return true; @@ -99,11 +99,11 @@ s32 func_80B83D58(Actor* thisx, PlayState* play) { void func_80B83D94(BgDblueWaterfall* this, PlayState* play) { s32 pad; - s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor); + s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor); s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor); s32 phi_v0; - if (Flags_GetSwitch(play, sp20)) { + if (Flags_GetSwitch(play, switchFlag)) { phi_v0 = true; } else { phi_v0 = false; @@ -111,20 +111,20 @@ void func_80B83D94(BgDblueWaterfall* this, PlayState* play) { if (phi_v0 != sp1C) { if (phi_v0) { - Flags_UnsetSwitch(play, sp20); + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } } } void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) { s32 pad; - s32 sp20 = BGDBLUEWATERFALL_GET_7F(&this->actor); + s32 switchFlag = BGDBLUEWATERFALL_GET_SWITCH_FLAG(&this->actor); s32 sp1C = BGDBLUEWATERFALL_GET_100(&this->actor); s32 phi_v0; - if (Flags_GetSwitch(play, sp20)) { + if (Flags_GetSwitch(play, switchFlag)) { phi_v0 = true; } else { phi_v0 = false; @@ -132,9 +132,9 @@ void func_80B83E1C(BgDblueWaterfall* this, PlayState* play) { if (phi_v0 == sp1C) { if (phi_v0) { - Flags_UnsetSwitch(play, sp20); + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } } } diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h index fae5cca6a..6e373084e 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h @@ -7,7 +7,7 @@ struct BgDblueWaterfall; typedef void (*BgDblueWaterfallActionFunc)(struct BgDblueWaterfall*, PlayState*); -#define BGDBLUEWATERFALL_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGDBLUEWATERFALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGDBLUEWATERFALL_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgDblueWaterfall { diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c index 344fcce84..7f0312f0c 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c @@ -120,15 +120,16 @@ void BgDkjailIvy_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); - } else { - DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - this->alpha = 255; - BgDkjailIvy_SetupWaitForCut(this); + return; } + + DynaPolyActor_LoadMesh(play, &this->dyna, &gDkjailCol); + Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); + Collider_UpdateCylinder(&this->dyna.actor, &this->collider); + this->alpha = 255; + BgDkjailIvy_SetupWaitForCut(this); } void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play) { @@ -162,7 +163,7 @@ void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->fadeOutTimer = 50; DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor)); + Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH_FLAG(&this->dyna.actor)); BgDkjailIvy_IvyCutEffects(this, play); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN); BgDkjailIvy_SetupFadeOut(this); diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h index 4835b7a0b..e7ce39a64 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h @@ -3,7 +3,7 @@ #include "global.h" -#define BG_DKJAIL_GET_SWITCH(thisx) ((thisx)->params & 0x7F) +#define BG_DKJAIL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgDkjailIvy; diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c index 6a4c44b65..db4a1105a 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c @@ -238,7 +238,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { } if (this->path != NULL) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC4530; this->dyna.actor.speed = 40.0f; func_80BC3A2C(this, play); @@ -261,7 +261,7 @@ void BgF40Block_Destroy(Actor* thisx, PlayState* play) { void func_80BC41AC(BgF40Block* this, PlayState* play) { if (func_80BC3D08(this, play, 1)) { - if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80BC4038(this); this->actionFunc = func_80BC44F4; } @@ -314,14 +314,14 @@ void func_80BC4344(BgF40Block* this, PlayState* play) { } void func_80BC4380(BgF40Block* this, PlayState* play) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC4344; } } void func_80BC43CC(BgF40Block* this, PlayState* play) { if (func_80BC3D08(this, play, 1)) { - if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80BC4038(this); this->actionFunc = func_80BC4344; } @@ -356,7 +356,7 @@ void func_80BC44F4(BgF40Block* this, PlayState* play) { } void func_80BC4530(BgF40Block* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { this->actionFunc = func_80BC44F4; } } diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h index 228fb6bfd..f74dc754a 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h @@ -8,7 +8,7 @@ struct BgF40Block; typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*); #define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2) -#define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40BLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) #define BGF40BLOCK_PATH_INDEX_NONE 0x3F diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c index be3c9cb47..9e4f9a590 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c @@ -73,7 +73,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { actorAsSwitch->isPressed = isPressed; } if (actorAsSwitch->isPressed) { - switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor); + switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(&actorAsSwitch->dyna.actor); if ((switchFlag >= 0) && (switchFlag < 0x80)) { pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F); if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) && @@ -87,7 +87,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) { if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && (actor->update != NULL)) { - switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor); + switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(actor); if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && !(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) { Flags_UnsetSwitch(play, switchFlag); @@ -160,13 +160,13 @@ void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play) { if (!this->isInitiator || (this->dyna.actor.csId == CS_ID_NONE)) { this->actionFunc = BgF40Switch_Press; if (this->isInitiator) { - Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); this->actionFunc = BgF40Switch_Press; if (this->isInitiator) { - Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } } else { CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h index cfa8c5462..2d9fc589b 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h @@ -5,7 +5,7 @@ struct BgF40Switch; -#define BGF40SWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40SWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef void (*BgF40SwitchActionFunc)(struct BgF40Switch*, PlayState*); diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c index 039d20f3c..9b210c1b8 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c @@ -51,7 +51,7 @@ void BgF40Swlift_Init(Actor* thisx, PlayState* play) { } sHeights[index] = this->dyna.actor.world.pos.y; - sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx); + sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx); if (index != 0) { Actor_Kill(&this->dyna.actor); return; diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h index e377b73e0..e2931698e 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h @@ -1,7 +1,7 @@ #ifndef Z_BG_F40_SWLIFT_H #define Z_BG_F40_SWLIFT_H -#define BG_F40_SWLIFT_GET_SWITCHFLAG(thisx) ((thisx)->params & 0xFF) +#define BG_F40_SWLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF) #define BG_F40_SWLIFT_GET_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) #include "global.h" diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c index fc209773b..a9e70027c 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c @@ -160,14 +160,15 @@ void BgHakaBombwall_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_7F(thisx))) { + if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); - } else { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); - Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - func_80BD6260(this); + return; } + + DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148); + Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); + Collider_UpdateCylinder(&this->dyna.actor, &this->collider); + func_80BD6260(this); } void BgHakaBombwall_Destroy(Actor* thisx, PlayState* play) { @@ -200,7 +201,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); func_80BD5E6C(this, play); this->dyna.actor.draw = NULL; - Flags_SetSwitch(play, BGHAKABOMBWALL_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 0x3C, NA_SE_EV_WALL_BROKEN); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); BgHakaBombwall_SetupEndCutscene(this); diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h index 9e5bd1c43..cb2ce7d02 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGHAKABOMBWALL_GET_7F(thisx) ((thisx)->params & 0x7F) +#define BGHAKABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgHakaBombwall; diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c index a1d1ebd48..3f043bcc2 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c @@ -316,7 +316,7 @@ void BgHakuginBombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -400,7 +400,7 @@ void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) { ptr->unk_24(this, play); this->dyna.actor.draw = NULL; this->unk_1AC = 20; - Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCH_FLAG(&this->dyna.actor)); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80ABCE60; } else { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h index 24b04139e..78b7bf9a8 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h @@ -9,7 +9,7 @@ typedef void (*BgHakuginBombwallActionFunc)(struct BgHakuginBombwall*, PlayState typedef s32 (*BgHakuginBombwallUnkFunc)(struct BgHakuginBombwall*, PlayState*); typedef void (*BgHakuginBombwallUnkFunc2)(struct BgHakuginBombwall*, PlayState*); -#define BGHAKUGIN_BOMBWALL_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGHAKUGIN_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGHAKUGIN_BOMBWALL_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgHakuginBombwall { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c index b4c653b99..35e03c438 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c @@ -42,8 +42,8 @@ void BgHakuginElvpole_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); this->unk_15C = 0; this->unk_160 = false; - if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) { + if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_15E = 0x64; } else { this->unk_15E = -1; @@ -81,12 +81,12 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) { sp28 = true; } else { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 320.0f; - Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor)); this->unk_15E = -1; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP); } - } else if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) && - Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) { + } else if ((BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor) != 0x7F) && + Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->unk_15E = 0x64; this->unk_160 = true; } diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h index ace71e7b3..575a0d8cb 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h @@ -5,7 +5,7 @@ struct BgHakuginElvpole; -#define BGHAKUGINELVPOLE_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGHAKUGINELVPOLE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*BgHakuginElvpoleActionFunc)(struct BgHakuginElvpole*, PlayState*); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c index 2a79bfd08..dc20a1fd3 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c @@ -155,9 +155,9 @@ void func_80A9AFB4(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct* unkStruct->unk_0000[i].unk_00 = BGHAKUGINPOST_GET_7(&this->dyna.actor); Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_08, &this->dyna.actor.world.pos); Math_Vec3f_Copy(&unkStruct->unk_0000[i].unk_14, &this->dyna.actor.world.pos); - unkStruct->unk_0000[i].unk_2E = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); + unkStruct->unk_0000[i].switchFlag = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04) { - if (Flags_GetSwitch(play, unkStruct->unk_0000[i].unk_2E)) { + if (Flags_GetSwitch(play, unkStruct->unk_0000[i].switchFlag)) { unkStruct->unk_0000[i].unk_34 = 5; } else { unkStruct->unk_0000[i].unk_34 = 1; @@ -184,7 +184,7 @@ void func_80A9B160(BgHakuginPostUnkStruct* unkStruct, PlayState* play) { unkStruct->unk_0000[i].unk_24 = 0.0f; unkStruct->unk_0000[i].unk_34 = 1; if (D_80A9D880[unkStruct->unk_0000[i].unk_00].unk_04 != 0) { - Flags_UnsetSwitch(play, unkStruct->unk_0000[i].unk_2E); + Flags_UnsetSwitch(play, unkStruct->unk_0000[i].switchFlag); } } } @@ -240,25 +240,25 @@ void func_80A9B384(Vec3f* arg0) { void func_80A9B3BC(BgHakuginPost* this, PlayState* play) { s32 pad; - s32 sp28 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); - s32 sp24 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1; + s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1; s32 sp20; s32 sp1C; - if (Flags_GetSwitch(play, sp28)) { + if (Flags_GetSwitch(play, switchFlag1)) { sp20 = true; } else { sp20 = false; } - if (Flags_GetSwitch(play, sp24)) { + if (Flags_GetSwitch(play, switchFlag2)) { sp1C = true; } else { sp1C = false; } if (!(sp20 | sp1C)) { - Flags_SetSwitch(play, sp28); + Flags_SetSwitch(play, switchFlag1); this->unk_170 = true; } else { this->unk_170 = sp20; @@ -269,27 +269,27 @@ void func_80A9B3BC(BgHakuginPost* this, PlayState* play) { void func_80A9B46C(BgHakuginPost* this, PlayState* play) { s32 pad; - s32 sp30 = BGHAKUGINPOST_GET_7F00(&this->dyna.actor); - s32 sp2C = BGHAKUGINPOST_GET_7F00(&this->dyna.actor) + 1; + s32 switchFlag1 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag2 = BGHAKUGINPOST_GET_SWITCH_FLAG(&this->dyna.actor) + 1; s32 sp28; s32 sp24; - if (Flags_GetSwitch(play, sp30)) { + if (Flags_GetSwitch(play, switchFlag1)) { sp28 = true; } else { sp28 = false; } - if (Flags_GetSwitch(play, sp2C)) { + if (Flags_GetSwitch(play, switchFlag2)) { sp24 = true; } else { sp24 = false; } if (!this->unk_170 && (sp28 == 1)) { - Flags_UnsetSwitch(play, sp2C); + Flags_UnsetSwitch(play, switchFlag2); } else if (!this->unk_174 && (sp24 == 1)) { - Flags_UnsetSwitch(play, sp30); + Flags_UnsetSwitch(play, switchFlag1); } this->unk_170 = sp28; @@ -668,7 +668,7 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { ColliderCylinder* collider = D_80A9E028.unk_0000[i].collider; - if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].unk_2E)) { + if ((collider != NULL) && Flags_GetSwitch(play, D_80A9E028.unk_0000[i].switchFlag)) { sp28 = false; break; } @@ -681,9 +681,9 @@ void func_80A9C854(BgHakuginPost* this, PlayState* play) { } if (sp38) { - Flags_SetSwitch(play, this->dyna.actor.home.rot.x & 0x7F); + Flags_SetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor)); } else { - Flags_UnsetSwitch(play, this->dyna.actor.home.rot.x & 0x7F); + Flags_UnsetSwitch(play, BGHAKUGINPOST_GET_SWITCH_FLAG_2(&this->dyna.actor)); } } @@ -841,7 +841,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { D_80A9E028.unk_0000[i].unk_34 = 2; Player_PlaySfx(player, NA_SE_IT_HAMMER_HIT); Audio_PlaySfx_2(NA_SE_EV_SLIDE_DOOR_OPEN); - Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E); + Flags_SetSwitch(play, D_80A9E028.unk_0000[i].switchFlag); this->unk_178 = 20; func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, D_80A9E028.unk_0000[i].csId, D_80A9E028.unk_0000[i].additionalCsId); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h index 4797a684a..897228bb9 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h @@ -9,7 +9,8 @@ typedef void (*BgHakuginPostActionFunc)(struct BgHakuginPost*, PlayState*); typedef void (*BgHakuginPostFunc)(struct BgHakuginPost*); #define BGHAKUGINPOST_GET_7(thisx) ((thisx)->params & 7) -#define BGHAKUGINPOST_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINPOST_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINPOST_GET_SWITCH_FLAG_2(thisx) (((thisx)->home.rot.x) & 0x7F) typedef struct { /* 0x00 */ s32 unk_00; @@ -21,7 +22,7 @@ typedef struct { /* 0x28 */ s16 unk_28; /* 0x2A */ s16 csId; /* 0x2C */ s16 additionalCsId; - /* 0x2E */ u8 unk_2E; + /* 0x2E */ u8 switchFlag; /* 0x2F */ u8 unk_2F; /* 0x30 */ s8 unk_30; /* 0x34 */ s32 unk_34; diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c index 583384c7d..4ecce9c3a 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c @@ -121,7 +121,7 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) { s32 pad2; s32 sp28; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp30 = true; } else { sp30 = false; @@ -228,7 +228,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { s32 sp24; s32 sp20; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp2C = 1; } else { sp2C = 0; @@ -274,9 +274,9 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { if (sp24) { if (sp20 == 1) { - Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } else if (sp20 == 0) { - Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } D_80B16AF0 = play->gameplayFrames; @@ -329,7 +329,7 @@ void func_80B15F88(BgHakuginSwitch* this, PlayState* play) { BgHakuginSwitchStruct* sp18 = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)]; s32 phi_v1; - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { phi_a0 = true; } else { phi_a0 = false; @@ -384,9 +384,9 @@ void func_80B161A0(BgHakuginSwitch* this, PlayState* play) { if (CutsceneManager_IsNext(this->curCsId)) { CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor); if (this->unk_1BE != 0) { - Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } else { - Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor)); } this->unk_1BF = 50; this->unk_1B4(this, play); @@ -421,7 +421,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) { } if (sp30 == 1) { - if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { sp24 = true; } } @@ -465,7 +465,7 @@ void func_80B16494(BgHakuginSwitch* this, PlayState* play) { } void func_80B16520(BgHakuginSwitch* this, PlayState* play) { - if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { if (BGHAKUGINSWITCH_GET_7(&this->dyna.actor) == BGHAKUGINSWITCH_GET_7_1) { func_80B16180(this, func_80B165A0, 0, this->additionalCsId); } else { diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h index caf3c2f65..f8a27429d 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h @@ -10,7 +10,7 @@ typedef void (*BgHakuginSwitchUnkFunc)(struct BgHakuginSwitch*, PlayState*); #define BGHAKUGINSWITCH_GET_7(thisx) ((thisx)->params & 7) #define BGHAKUGINSWITCH_GET_10(thisx) (((thisx)->params >> 4) & 1) -#define BGHAKUGINSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGHAKUGINSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGHAKUGINSWITCH_GET_7_1 1 diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c index edcda4b37..e06b788c4 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c @@ -242,7 +242,7 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -333,7 +333,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) { } this->dyna.actor.draw = NULL; SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); - Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h index e9ff850ad..393e1d9e6 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h @@ -7,7 +7,7 @@ struct BgIkanaBombwall; typedef void (*BgIkanaBombwallActionFunc)(struct BgIkanaBombwall*, PlayState*); -#define BGIKANABOMBWALL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGIKANABOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGIKANABOMBWALL_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct BgIkanaBombwall { diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c index 4646b8d45..a0062a62b 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c @@ -153,7 +153,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { if (wasHit && (sFirstHitBgIkanaDharma == NULL)) { sFirstHitBgIkanaDharma = this2; - Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCH_FLAG(&this->dyna.actor)); tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000); tempAngle2 = (BINANG_SUB(player->actor.shape.rot.y, tempAngle1) >> 1); this->dyna.actor.world.rot.y = tempAngle1 + tempAngle2 + 0xF000; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h index ac1bcadf0..a8c08e364 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGIKANADHARMA_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGIKANADHARMA_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGIKANADHARMA_IS_CHILD(thisx) (((thisx)->params >> 5) & 1) #define BGIKANADHARMA_NUM_SEGMENTS(thisx) ((thisx)->params & 0xF) #define BGIKANADHARMA_PARAMS(switchFlag, isChild, numSegments) (((switchFlag & 0x7F) << 8) | ((isChild & 1) << 5) | (numSegments & 0xF)) diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c index 23e707d7b..8850d8852 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c @@ -169,7 +169,7 @@ void func_80B80440(BgIkanaRotaryroom* this, PlayState* play) { Matrix_Push(); Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) { Matrix_Translate(D_80B82178.x, D_80B82178.y, D_80B82178.z, MTXMODE_APPLY); } else { Matrix_Translate(D_80B8216C.x, D_80B8216C.y, D_80B8216C.z, MTXMODE_APPLY); @@ -195,7 +195,7 @@ void func_80B80550(BgIkanaRotaryroom* this, PlayState* play) { MtxF sp68; Vec3s sp60; - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { spC4 = 1; } else { spC4 = 0; @@ -494,10 +494,10 @@ s32 func_80B80F08(BgIkanaRotaryroom* this, PlayState* play) { Matrix_Pop(); if (Math3D_Vec3fDistSq(&sp34, &sp28) < 3.0f) { - if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor))) { sp24 = true; } - Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_7F00(&this->dyna.actor)); + Flags_SetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(&this->dyna.actor)); } } return sp24; @@ -708,7 +708,7 @@ void BgIkanaRotaryroom_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { this->dyna.actor.shape.rot.x = -0x8000; } else { this->dyna.actor.shape.rot.x = 0; @@ -753,15 +753,15 @@ void func_80B818B4(BgIkanaRotaryroom* this) { void func_80B818C8(Actor* thisx, PlayState* play) { BgIkanaRotaryroom* this = THIS; - s32 sp20; + s32 switchFlag; if (this->collider.base.acFlags & AC_HIT) { this->collider.base.acFlags &= ~AC_HIT; - sp20 = BGIKANAROTARYROOM_GET_FE(&this->dyna.actor); - if (Flags_GetSwitch(play, sp20)) { - Flags_UnsetSwitch(play, sp20); + switchFlag = BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor); + if (Flags_GetSwitch(play, switchFlag)) { + Flags_UnsetSwitch(play, switchFlag); } else { - Flags_SetSwitch(play, sp20); + Flags_SetSwitch(play, switchFlag); } func_80B81978(this); } else { @@ -866,7 +866,7 @@ void func_80B81BA0(Actor* thisx, PlayState* play) { Quake_SetDuration(quakeIndex, 15); } - if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_FE(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(&this->dyna.actor))) { if (this->dyna.actor.shape.rot.x < 0) { this->dyna.actor.shape.rot.x = -0x8000; sp30 = 1; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h index 4184220e0..e2737e0c2 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h @@ -10,8 +10,8 @@ typedef void (*BgIkanaRotaryroomUnkFunc)(Actor*, PlayState*); typedef void (*BgIkanaRotaryroomUnkFunc2)(struct BgIkanaRotaryroom*, PlayState*); #define BGIKANAROTARYROOM_GET_1(thisx) ((thisx)->params & 1) -#define BGIKANAROTARYROOM_GET_FE(thisx) (((thisx)->params >> 1) & 0x7F) -#define BGIKANAROTARYROOM_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(thisx) (((thisx)->params >> 1) & 0x7F) +#define BGIKANAROTARYROOM_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct { /* 0x00 */ Actor* unk_00; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c index 4a0abb472..6891956db 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c @@ -56,10 +56,10 @@ static InitChainEntry sInitChain[] = { }; s32 BgIkanaShutter_AllSwitchesPressed(BgIkanaShutter* this, PlayState* play) { - return Flags_GetSwitch(play, this->dyna.actor.params & 0x7F) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 1) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 2) && - Flags_GetSwitch(play, (this->dyna.actor.params & 0x7F) + 3); + return Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 1) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 2) && + Flags_GetSwitch(play, BGIKANASHUTTER_GET_SWITCH_FLAG(&this->dyna.actor) + 3); } void BgIkanaShutter_Init(Actor* thisx, PlayState* play) { @@ -68,7 +68,7 @@ void BgIkanaShutter_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); DynaPolyActor_LoadMesh(play, &this->dyna, &object_ikana_obj_Colheader_000F28); - if (!((this->dyna.actor.params >> 8) & 1)) { + if (!BGIKANASHUTTER_GET_100(&this->dyna.actor)) { if (BgIkanaShutter_AllSwitchesPressed(this, play)) { func_80BD599C(this); return; diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h index 094334600..c1ad76b7d 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h +++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h @@ -7,6 +7,9 @@ struct BgIkanaShutter; typedef void (*BgIkanaShutterActionFunc)(struct BgIkanaShutter*, PlayState*); +#define BGIKANASHUTTER_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) +#define BGIKANASHUTTER_GET_100(thisx) (((thisx)->params >> 8) & 1) + typedef struct BgIkanaShutter { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ BgIkanaShutterActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c index 18d670830..f7c0e5710 100644 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c +++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c @@ -159,7 +159,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) { this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y; if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) { BgIkninSusceil_RequestQuakeAndRumble(this, play, 4, 14, 1); - Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); func_80C0AC74(this); } else { @@ -173,7 +173,7 @@ void func_80C0AC74(BgIkninSusceil* this) { } void func_80C0AC90(BgIkninSusceil* this, PlayState* play) { - if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, SUSCEIL_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80C0ACD4(this); } } diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h index 2fa153ac0..faf29a022 100644 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h +++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h @@ -3,7 +3,7 @@ #include "global.h" -#define SUSCEIL_GET_SWITCHFLAG(thisx) (((thisx)->params) & 0x7F) +#define SUSCEIL_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) struct BgIkninSusceil; diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c index 07968e801..ecf34c2ae 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -64,7 +64,7 @@ void BgIkninside_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); - if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); } } @@ -118,7 +118,7 @@ void func_80C072D0(BgIkninside* this, PlayState* play) { EffectSsHahen_Spawn(play, &pos, &velocity, &D_80C076D4, 0, 30, OBJECT_IKNINSIDE_OBJ, 25, D_80C076A0[i & 1]); } - Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH(&this->dyna.actor)); + Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH_FLAG(&this->dyna.actor)); this->actionFunc = func_80C07230; this->dyna.actor.draw = NULL; DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h index 84a66a88d..6cddba2f0 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.h @@ -5,7 +5,7 @@ struct BgIkninside; -#define DMIKNINSIDE_GET_SWITCH(thisx) (((thisx)->params & 0xFE00) >> 9) +#define DMIKNINSIDE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef void (*BgIkninsideActionFunc)(struct BgIkninside*, PlayState*); diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c index ff0227f70..6cc7f7684 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c +++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c @@ -40,7 +40,7 @@ void BgKeikokuSaku_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_keikoku_obj_Colheader_002300, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - this->switchFlag = BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx); + this->switchFlag = BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx); if (Flags_GetSwitch(play, this->switchFlag)) { this->dyna.actor.world.pos.z = 2659.0f; } else { diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h index 6a3bad9c8..6db094693 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h +++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h @@ -3,7 +3,7 @@ #include "global.h" -#define BGKEIKOKUSAKU_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define BGKEIKOKUSAKU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) struct BgKeikokuSaku; diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c index a868b355c..5a8192bc4 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c @@ -145,7 +145,7 @@ void BgKin2Bombwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); bombwallCollider = &this->collider; Collider_InitCylinder(play, bombwallCollider); - if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -185,7 +185,7 @@ void BgKin2Bombwall_SetupPlayCutscene(BgKin2Bombwall* this) { void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor)); + Flags_SetSwitch(play, BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h index 17370427a..553cd05b9 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h +++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h @@ -1,7 +1,7 @@ #ifndef Z_BG_KIN2_BOMBWALL_H #define Z_BG_KIN2_BOMBWALL_H -#define BG_KIN2_BOMBWALL_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define BG_KIN2_BOMBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #include "global.h" diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c index 37ac6c2ac..3f68cad8d 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c @@ -161,7 +161,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) { Collider_UpdateSpheres(i, &this->collider); } - if (Flags_GetSwitch(play, this->dyna.actor.params & 0x7F)) { + if (Flags_GetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor))) { BgKin2Fence_SetupDoNothing(this); return; } @@ -219,7 +219,7 @@ void BgKin2Fence_SetupPlayOpenCutscene(BgKin2Fence* this) { void BgKin2Fence_PlayOpenCutscene(BgKin2Fence* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, this->dyna.actor.params & 0x7F); + Flags_SetSwitch(play, BG_KIN2_FENCE_GET_SWITCH_FLAG(&this->dyna.actor)); BgKin2Fence_SetupWaitBeforeOpen(this); return; } diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h index 98bb51243..7c864d3ae 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h +++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h @@ -7,6 +7,8 @@ struct BgKin2Fence; typedef void (*BgKin2FenceActionFunc)(struct BgKin2Fence*, PlayState*); +#define BG_KIN2_FENCE_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) + typedef struct BgKin2Fence { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ColliderJntSph collider; diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c index 63e7b5974..12cd5d334 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -49,7 +49,7 @@ void BgLadder_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - this->switchFlag = BGLADDER_GET_SWITCHFLAG(thisx); + this->switchFlag = BGLADDER_GET_SWITCH_FLAG(thisx); thisx->params = BGLADDER_GET_SIZE(thisx); DynaPolyActor_Init(&this->dyna, 0); size = thisx->params; diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h index f920c18eb..4b06a32e8 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h @@ -4,7 +4,7 @@ #include "global.h" #define BGLADDER_GET_SIZE(thisx) ((thisx)->params & 0xFF) -#define BGLADDER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF) +#define BGLADDER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) struct BgLadder; diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c index a09c0fb02..b74fdbd6d 100644 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c +++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c @@ -152,7 +152,7 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, D_80C18A48[this->type].colHeader); Collider_InitTris(play, &this->colliderTris); - if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor))) { + if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -227,7 +227,7 @@ void func_80C187E4(BgLastBwall* this) { void func_80C187F8(BgLastBwall* this, PlayState* play) { if (this->colliderTris.base.acFlags & AC_HIT) { this->colliderTris.base.acFlags &= ~AC_HIT; - Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor)); + Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCH_FLAG(&this->dyna.actor)); func_80C1886C(this, play); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base); diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h index cae36be27..0e6568611 100644 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h +++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h @@ -8,7 +8,7 @@ struct BgLastBwall; typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*); -#define BGLASTBWALL_GET_SWITCHFLAGS(thisx) ((thisx)->params & 0x7F) +#define BGLASTBWALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c index 9f5a9c42d..ec3961fd7 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -148,7 +148,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_161 = 0; - this->switchFlag = BGSPDWEB_GET_SWITCHFLAG(&this->dyna.actor); + this->switchFlag = BGSPDWEB_GET_SWITCH_FLAG(&this->dyna.actor); thisx->params &= 0xFF; DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h index c57353ce0..7737fc684 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h @@ -7,7 +7,7 @@ struct BgSpdweb; typedef void (*BgSpdwebActionFunc)(struct BgSpdweb*, PlayState*); -#define BGSPDWEB_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define BGSPDWEB_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define BGSPDWEB_FF_0 0 #define BGSPDWEB_FF_1 1 diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index b9b53a081..5d49a16e7 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -181,7 +181,7 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { return true; } } else if ((doorType == 2) || (doorType == 7)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); this->unk_168 = 1.0f; return true; @@ -243,7 +243,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->unk_163 = sp24; if ((this->doorType == 4) || (this->doorType == 5)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { this->unk_166 = 10; } } @@ -346,7 +346,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { DoorShutter_SetupAction(this, func_808A1684); this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (this->unk_166 != 0) { - Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); + Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); @@ -474,7 +474,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { void func_808A1548(DoorShutter* this, PlayState* play) { if (func_808A1478(this, play, 1.0f)) { - if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if (Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { this->csId = this->slidingDoor.dyna.actor.csId; if (CutsceneManager_IsNext(this->csId)) { CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); @@ -495,7 +495,8 @@ void func_808A1548(DoorShutter* this, PlayState* play) { } void func_808A1618(DoorShutter* this, PlayState* play) { - if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + if ((this->slidingDoor.unk_15C == 0) && + !Flags_GetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); } else { func_808A1090(this, play); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h index abdf0ce84..5b42db50a 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -9,7 +9,7 @@ struct DoorShutter; typedef void (*DoorShutterActionFunc)(struct DoorShutter*, PlayState*); #define DOORSHUTTER_GET_1F(thisx) ((thisx)->params & 0x1F) -#define DOORSHUTTER_GET_7F(thisx) ((thisx)->params & 0x7F) +#define DOORSHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define DOORSHUTTER_GET_380(thisx) (((thisx)->params >> 7) & 7) typedef struct DoorShutter { diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c index c88835373..f2089ca03 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c @@ -43,25 +43,25 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -136,8 +136,8 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) { if (func_8092DF9C(this, play) == 0) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (ELFMSG_GET_SWITCHFLAG(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(thisx)); + if (ELFMSG_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h index 51a3ddda3..b512af2de 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h @@ -4,7 +4,7 @@ #include "global.h" #define ELFMSG_GET_FF(thisx) ((thisx)->params & 0xFF) -#define ELFMSG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG_GET_8000(thisx) ((thisx)->params & 0x8000) struct ElfMsg; diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index ea443472f..552478ace 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -43,8 +43,8 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; @@ -53,17 +53,17 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) { if (Flags_GetClear(play, this->actor.room)) { (void)"共倒れ2"; // "Collapse 2" - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -108,8 +108,8 @@ void func_8096EE64(ElfMsg2* this, PlayState* play) { if (this->actor.home.rot.z != 1) { Actor_Kill(&this->actor); - if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); } return; } diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h index 4d9583d20..aa717800b 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG2_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define ELFMSG2_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define ELFMSG2_GET_FF(thisx) ((thisx)->params & 0xFF) struct ElfMsg2; diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c index e3e8b7bc5..b7b349dfe 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c @@ -42,25 +42,25 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor)); + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor)); + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG3_GET_SWITCH(&this->actor) == 0x7F) { + if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -134,8 +134,8 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play) { if (!func_80A2CD1C(this, play)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (ELFMSG3_GET_SWITCH(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(thisx)); + if (ELFMSG3_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h index 615cde1eb..6b1c24671 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG3_GET_SWITCH(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG3_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG3_GET_FF(thisx) ((thisx)->params & 0xFF) #define ELFMSG3_GET_8000(thisx) ((thisx)->params & 0x8000) diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c index c85db8ef0..423f8c351 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c @@ -43,25 +43,25 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // "Collapse together" - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG4_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // "Collapse together" Actor_Kill(&this->actor); return true; @@ -161,8 +161,8 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) { } if ((bgActor != NULL) && Actor_ProcessTalkRequest(bgActor, &play->state)) { - if (ELFMSG4_GET_SWITCHFLAG(thisx) != 0x7F) { - Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(thisx)); + if (ELFMSG4_GET_SWITCH_FLAG(thisx) != 0x7F) { + Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(thisx)); } Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h index e9ccbc906..1e4b78f29 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG4_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define ELFMSG4_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) #define ELFMSG4_GET_8000(thisx) ((thisx)->params & 0x8000) #define ELFMSG4_GET_TEXT(thisx) ((thisx)->params & 0xFF) diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c index db97a0f74..c44ab8e0a 100644 --- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c +++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c @@ -38,8 +38,8 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) { if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { (void)"共倒れ"; // Collapse together - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; @@ -47,17 +47,17 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) { if (this->actor.home.rot.y == 0x81) { if (Flags_GetClear(play, this->actor.room)) { (void)"共倒れ2"; // Collapse 2 - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor)); + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return true; } } - if (ELFMSG5_GET_SWITCHFLAG(&this->actor) == 0x7F) { + if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) == 0x7F) { return false; } - if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor))) { (void)"共倒れ"; // Collapse together Actor_Kill(&this->actor); return true; diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h index 36daecca1..e1e54ca64 100644 --- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h +++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h @@ -3,7 +3,7 @@ #include "global.h" -#define ELFMSG5_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define ELFMSG5_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define ELFMSG5_GET_FF(thisx) ((thisx)->params & 0xFF) struct ElfMsg5; diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c index 6b2b37a41..4c565fdf8 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -154,8 +154,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { case 1: this->actionFunc = func_80BA1F80; - if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && - Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) { + if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && + Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)))) { Actor_Kill(&this->actor); return; } @@ -200,8 +200,8 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { break; case 3: - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && - Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && + Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); @@ -338,7 +338,7 @@ void func_80BA1F80(ElfMsg6* this, PlayState* play) { if (func_80BA1C00(this)) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, NULL); - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } @@ -355,14 +355,14 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) { EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor; sp20->unk_264 |= 0x20; - if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return; } - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); @@ -390,14 +390,14 @@ void func_80BA21C4(ElfMsg6* this, PlayState* play) { EnElf* sp20 = (EnElf*)GET_PLAYER(play)->tatlActor; sp20->unk_264 |= 0x20; - if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) { - Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)); + if (ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) { + Flags_SetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); return; } - if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || + if (((ELFMSG6_SWITCH_FLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCH_FLAG(&this->actor))) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h index 8e9a5d0ed..640c35987 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h @@ -9,7 +9,7 @@ typedef void (*ElfMsg6ActionFunc)(struct ElfMsg6*, PlayState*); #define ELFMSG6_GET_F(thisx) ((thisx)->params & 0xF) #define ELFMSG6_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4) -#define ELFMSG6_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ELFMSG6_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct ElfMsg6 { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c index d1de1bb0d..e57ec81cc 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -136,7 +136,7 @@ void EnBat_Init(Actor* thisx, PlayState* play) { this->animationFrame = Rand_ZeroOne() * 9.0f; this->paramFlags = BAD_BAT_GET_PARAMFLAGS(thisx); - this->switchFlag = BAD_BAT_GET_SWITCHFLAG(thisx); + this->switchFlag = BAD_BAT_GET_SWITCH_FLAG(thisx); thisx->params = BAD_BAT_GET_TYPE(thisx); thisx->depthInWater = BGCHECK_Y_MIN; diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.h b/src/overlays/actors/ovl_En_Bat/z_en_bat.h index 927dfbef8..5b552d2c1 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.h +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.h @@ -5,7 +5,7 @@ #define BAD_BAT_GET_TYPE(thisx) (((thisx)->params >> 0) & 0x1F) #define BAD_BAT_GET_PARAMFLAGS(thisx) (((thisx)->params >> 5) & 7) -#define BAD_BAT_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0xFF) +#define BAD_BAT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) #define BAD_BAT_PARAMS(switchFlag, paramflags, type) ((type) | ((paramflags) << 5) | ((switchFlag) << 8)) //! PARAMFLAGS diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index c7c3e0fad..0f505820d 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -104,7 +104,8 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) { this->csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) || - ((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) { + ((EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) && + Flags_GetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor)))) { Actor_Kill(&this->picto.actor); } else { this->picto.actor.world.pos.y -= 99.0f; @@ -445,8 +446,8 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { &D_80AC45B8, Rand_S16Offset(150, 50), 25, false); } - if (this->picto.actor.params != 0xFF) { - Flags_SetSwitch(play, this->picto.actor.params); + if (EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor) != 0xFF) { + Flags_SetSwitch(play, EN_BIGOKUTA_GET_SWITCH_FLAG(&this->picto.actor)); } CutsceneManager_Stop(this->csId); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h index 1fdad749b..5e30eab95 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h @@ -9,6 +9,8 @@ struct EnBigokuta; typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*); +#define EN_BIGOKUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef enum BigokutaBodyPart { /* 0 */ BIGOKUTA_BODYPART_0, /* 1 */ BIGOKUTA_BODYPART_1, diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index cced08a09..900aed401 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -188,10 +188,10 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); - this->switchFlags = BIG_POE_GET_SWITCHFLAGS(thisx); + this->switchFlag = BIG_POE_GET_SWITCH_FLAG(thisx); thisx->params &= 0xFF; if (thisx->params == BIG_POE_TYPE_POSSIBLE_FIRE) { - if (Flags_GetSwitch(play, this->switchFlags)) { + if (Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -222,7 +222,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { this->mainColor.b = 210; this->mainColor.a = 0; // fully invisible - if ((this->switchFlags != 0xFF) && (Flags_GetSwitch(play, this->switchFlags))) { + if ((this->switchFlag != 0xFF) && (Flags_GetSwitch(play, this->switchFlag))) { Actor_Kill(&this->actor); } @@ -756,8 +756,8 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) { void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND || this->actor.floorHeight == BGCHECK_Y_MIN) { - if (this->switchFlags != 0xFF) { - Flags_SetSwitch(play, this->switchFlags); + if (this->switchFlag != 0xFF) { + Flags_SetSwitch(play, this->switchFlag); } EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10, @@ -1051,7 +1051,8 @@ void EnBigpo_FlameCircleCutscene(EnBigpo* this, PlayState* play) { this->idleTimer--; if (this->idleTimer == 0) { EnBigpo* parentPoh = (EnBigpo*)this->actor.parent; - Flags_SetSwitch(play, this->switchFlags); + + Flags_SetSwitch(play, this->switchFlag); Math_Vec3f_Copy(&parentPoh->fires[this->unk20C].pos, &this->actor.world.pos); Actor_Kill(&this->actor); if (this->unk20C == 0) { diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index 12b230614..d5bdaf1e8 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -47,7 +47,7 @@ typedef struct EnBigpo { /* 0x20A */ s16 rotVelocity; /* 0x20C */ s16 unk20C; // is this counting the number of frames the player is ztargeting them? /* 0x20E */ s16 subCamId; - /* 0x210 */ s16 switchFlags; + /* 0x210 */ s16 switchFlag; /* 0x212 */ s16 hoverHeightCycleTimer; // sin wave up and down bobbing /* 0x214 */ f32 fireRadius; // distance from center during conjunction cutscene /* 0x218 */ f32 savedHeight; // actual height while flying moves as part of bobbing @@ -75,6 +75,6 @@ typedef enum EnBigpoType { /* 5 */ BIG_POE_TYPE_UNK5 } EnBigpoType; -#define BIG_POE_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) +#define BIG_POE_GET_SWITCH_FLAG(thisx) (u8)((thisx)->params >> 0x8) #endif // Z_EN_BIGPO_H diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index 31e904bcf..01b701ce1 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -86,7 +86,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { this->morphTable, OBJECT_DAIKU_LIMB_MAX); this->actor.targetMode = TARGET_MODE_0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->unk_278 = ENDAIKU2_GET_7F(&this->actor); + this->switchFlag = ENDAIKU2_GET_SWITCH_FLAG(&this->actor); this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor); this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU2_PATH_INDEX_NONE); this->unk_280 = ENDAIKU2_GET_8000(&this->actor); @@ -97,9 +97,9 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { return; } - if (this->unk_278 == ENDAIKU2_GET_7F_127) { - this->unk_278 = ENDAIKU2_GET_7F_MINUS1; - } else if (Flags_GetSwitch(play, this->unk_278)) { + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; + } else if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_25C = this->path->count - 1; func_80BE61D0(this); Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268); @@ -185,7 +185,7 @@ s32 func_80BE64C0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); bomb = (EnBom*)Actor_FindNearby(play, &this->actor, -1, ACTORCAT_EXPLOSIVES, BREG(7) + 240.0f); Math_Vec3f_Copy(&this->actor.world.pos, &sp30); - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && !Flags_GetSwitch(play, this->unk_278) && (bomb != NULL) && + if ((this->switchFlag >= 0) && !Flags_GetSwitch(play, this->switchFlag) && (bomb != NULL) && (bomb->actor.id == ACTOR_EN_BOM)) { if (!bomb->isPowderKeg) { this->actor.textId = 0x32D3; @@ -228,7 +228,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { } this->unk_264 = 1.0f; - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -251,7 +251,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0); if (sp98 != 2) { - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -323,7 +323,7 @@ void func_80BE6B40(EnDaiku2* this, PlayState* play) { s32 day = gSaveContext.save.day; this->unk_288 = 1; - if ((day != 3) && Flags_GetSwitch(play, this->unk_278)) { + if ((day != 3) && Flags_GetSwitch(play, this->switchFlag)) { this->actionFunc = func_80BE6BC0; } else { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5); @@ -433,7 +433,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3); } - if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index 51cd23124..c047b6577 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -8,18 +8,12 @@ struct EnDaiku2; typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); -#define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F) +#define ENDAIKU2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F) #define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1) #define ENDAIKU2_PATH_INDEX_NONE 0x3F -typedef enum { - /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, - /* 0 */ ENDAIKU2_GET_7F_0, - /* 127 */ ENDAIKU2_GET_7F_127 = 127 -} EnDaiku2Param; - typedef struct EnDaiku2Effect { /* 0x00 */ u8 isEnabled; /* 0x04 */ Vec3f unk_04; @@ -45,7 +39,7 @@ typedef struct EnDaiku2 { /* 0x268 */ Vec3f unk_268; /* 0x274 */ s16 unk_274; /* 0x276 */ s16 animIndex; - /* 0x278 */ s16 unk_278; + /* 0x278 */ s16 switchFlag; /* 0x27A */ s16 pathIndex; /* 0x27C */ UNK_TYPE1 unk_27C[0x4]; /* 0x280 */ s32 unk_280; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index a63766b70..124dee6f7 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -425,7 +425,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { this->doorType = ENDOOR_GET_TYPE(thisx); - this->switchFlag = ENDOOR_GET_PARAM_7F(thisx); + this->switchFlag = ENDOOR_GET_SWITCH_FLAG(thisx); if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { DynaPolyActor_Init(&this->knobDoor.dyna, 0); DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h index 03dc31ab6..5ea0b7df3 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -10,7 +10,7 @@ struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); #define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) -#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F) +#define ENDOOR_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x7F) typedef enum EnDoorType { /* 0 */ ENDOOR_TYPE_0, diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index fe09aa1fe..b771d09fe 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -193,8 +193,8 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) { } } if ((this->knobDoor.dyna.actor.textId == 0x239B) && - Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor))) { - Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor)); + Flags_GetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor))) { + Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCH_FLAG(&this->knobDoor.dyna.actor)); this->actionFunc = func_80AC2154; this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!" this->unk_1F4 |= 1; diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h index 9cd63248f..c0bbdf98b 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h @@ -6,7 +6,7 @@ struct EnDoorEtc; -#define ENDOORETC_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENDOORETC_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*); diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 89ee2e5fd..775a14eb5 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -481,7 +481,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[4], 300, 200, 0, 25, 1.0f); EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[5], 2100, -300, 0, 37, 1.0f); - this->switchFlag = EYEGORE_GET_SWITCH(&this->actor); + this->switchFlag = EYEGORE_GET_SWITCH_FLAG(&this->actor); if (this->switchFlag == 0x7F) { this->switchFlag = -1; } diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index 35d232d51..0861ce580 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -9,7 +9,7 @@ struct EnEgol; typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); #define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) -#define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F) +#define EYEGORE_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) #define EYEGORE_PATH_INDEX_NONE 0x3F diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index 9b34bf410..c9d86e4f6 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -56,7 +56,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { EnElfbub* this = THIS; Actor* childActor; - if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -76,7 +76,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { childActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ELFORG, this->actor.world.pos.x, this->actor.world.pos.y + 12.0f, this->actor.world.pos.z, this->actor.world.rot.x, this->actor.world.rot.y, this->actor.world.rot.z, - STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCHFLAG(&this->actor), + STRAY_FAIRY_PARAMS(ENELFBUB_GET_SWITCH_FLAG(&this->actor), STRAY_FAIRY_AREA_CLOCK_TOWN, STRAY_FAIRY_TYPE_BUBBLE)); if (childActor != NULL) { childActor->parent = &this->actor; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h index 50c6bd672..d115ab91c 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h @@ -3,7 +3,7 @@ #include "global.h" -#define ENELFBUB_GET_SWITCHFLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9) +#define ENELFBUB_GET_SWITCH_FLAG(thisx) ((((thisx)->params) & 0xFE00) >> 9) struct EnElfbub; diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index 937c6bc8c..3eb2e357b 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -480,7 +480,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A274; - Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + Flags_UnsetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor)); if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); @@ -524,7 +524,7 @@ void func_80A3A520(EnElfgrp* this, PlayState* play) { } else if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); this->actionFunc = func_80A3A4AC; - Flags_SetSwitch(play, ENELFGRP_GET_SWITCHFLAG_PARAMS(&this->actor)); + Flags_SetSwitch(play, ENELFGRP_GET_SWITCH_FLAG_PARAMS(&this->actor)); if (this->stateFlags & ELFGRP_STATE_1) { Item_Give(play, ITEM_MASK_GREAT_FAIRY); diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h index d9767fb2f..90f73a8a6 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -9,7 +9,7 @@ struct EnElfgrp; typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); #define ENELFGRP_GET_TYPE(thisx) ((thisx)->params & 0xF) //!< Same type as Great Fairies -#define ENELFGRP_GET_SWITCHFLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENELFGRP_GET_SWITCH_FLAG_PARAMS(thisx) (((thisx)->params & 0xFE00) >> 9) #define ENELFGRP_GET_SWITCHFLAG_ROT(thisx) ((thisx)->home.rot.z) typedef enum ElfgrpType { diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 27dc844e7..3dc3cd7bc 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -87,7 +87,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { break; case STRAY_FAIRY_TYPE_COLLECTIBLE: - if (Flags_GetCollectible(play, STRAY_FAIRY_FLAG(thisx))) { + if (Flags_GetCollectible(play, STRAY_FAIRY_GET_FLAG(thisx))) { Actor_Kill(thisx); return; } @@ -100,7 +100,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { break; default: - if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) { + if (Flags_GetSwitch(play, STRAY_FAIRY_GET_FLAG(thisx))) { Actor_Kill(thisx); return; } @@ -475,15 +475,15 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { switch (STRAY_FAIRY_TYPE(&this->actor)) { case STRAY_FAIRY_TYPE_COLLECTIBLE: - Flags_SetCollectible(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetCollectible(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; case STRAY_FAIRY_TYPE_CHEST: - Flags_SetTreasure(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetTreasure(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; default: - Flags_SetSwitch(play, STRAY_FAIRY_FLAG(&this->actor)); + Flags_SetSwitch(play, STRAY_FAIRY_GET_FLAG(&this->actor)); break; } diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h index 7bb8672b1..f4da3cd5e 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h @@ -7,7 +7,7 @@ #define STRAY_FAIRY_TYPE(thisx) ((thisx)->params & 0xF) #define STRAY_FAIRY_GET_NON_DUNGEON_AREA(thisx) (((thisx)->params & 0x1C0) >> 6) -#define STRAY_FAIRY_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define STRAY_FAIRY_GET_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) #define STRAY_FAIRY_SPARKLE_COUNT(thisx) ((thisx)->home.rot.x) //! @note `nonDungeonArea` does not always use the enum diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c index 0b645b302..07e4d60b9 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c @@ -29,7 +29,7 @@ ActorInit En_Fr_InitVars = { void EnFr_Init(Actor* thisx, PlayState* play) { EnFr* this = THIS; - if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -43,7 +43,7 @@ void EnFr_Destroy(Actor* thisx, PlayState* play) { void EnFr_Update(Actor* thisx, PlayState* play) { EnFr* this = THIS; - if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENFR_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.h b/src/overlays/actors/ovl_En_Fr/z_en_fr.h index 27682ce40..0227608fb 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.h +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.h @@ -5,7 +5,7 @@ struct EnFr; -#define ENFR_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENFR_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENFR_GET_TARGETMODE(thisx) (((thisx)->params >> 7) & 0xF) typedef struct EnFr { diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index b9ef1fe88..272915c71 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -681,7 +681,7 @@ void func_80B10A48(EnGb2* this, PlayState* play) { case ENGB2_7_2: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); if (this->unk_26E == 0x14FB) { - Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); + Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } @@ -752,7 +752,7 @@ void func_80B10DAC(EnGb2* this, PlayState* play) { if (this->csIdIndex != 2) { this->actionFunc = func_80B10E98; } else { - Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor)); + Flags_SetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80B10868; } } else { @@ -776,7 +776,7 @@ void func_80B10E98(EnGb2* this, PlayState* play) { if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->actionFunc = func_80B10B5C; - } else if (Flags_GetSwitch(play, ENGB2_GET_7F8(&this->actor))) { + } else if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(&this->actor))) { this->actionFunc = func_80B10A48; } else { CutsceneManager_Stop(this->csIdList[this->csIdIndex]); @@ -936,7 +936,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { return; } - if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) { + if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); return; } @@ -950,7 +950,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { case ENGB2_7_2: this->csIdIndex = 0; this->csIdList[0] = this->actor.csId; - if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) { + if (Flags_GetSwitch(play, ENGB2_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h index fa500f15c..e59eecee0 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -9,7 +9,7 @@ struct EnGb2; typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*); #define ENGB2_GET_7(thisx) ((thisx)->params & 7) -#define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3) +#define ENGB2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F8) >> 3) typedef enum { /* 0 */ ENGB2_7_0, diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 900664e4c..c631b24e3 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -296,7 +296,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == OCARINA_MODE_EVENT) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { - Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); + Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor)); this->animIndex = ENGK_ANIM_3; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_3); this->actionFunc = func_80B521E8; @@ -612,7 +612,7 @@ void func_80B51510(EnGk* this, PlayState* play) { break; case 7: - Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); + Flags_SetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor)); break; default: @@ -673,7 +673,7 @@ void func_80B51760(EnGk* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { - if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { + if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) { SET_WEEKEVENTREG(WEEKEVENTREG_40_40); this->actionFunc = func_80B51D9C; return; @@ -1070,7 +1070,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->animIndex = ENGK_ANIM_5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENGK_ANIM_5); if (play->sceneId == SCENE_17SETUGEN2) { - if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { + if (Flags_GetSwitch(play, ENGK_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index 6bd28ad94..b9d237cd5 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -10,7 +10,7 @@ typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_GET_F(thisx) ((thisx)->params & 0xF) #define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) -#define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8) +#define ENGK_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F00) >> 8) #define ENGK_PATH_INDEX_NONE 0xF diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 6cc8af5a5..88798dd2f 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -143,7 +143,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) { this->unk_204 = 1; this->unk_198 = this->actor.world.rot.z; this->unk_195 = ENGS_GET_1F(thisx); - this->unk_196 = ENGS_GET_FE0(thisx); + this->switchFlag = ENGS_GET_SWITCH_FLAG(thisx); this->actor.params = ENGS_GET_F000(thisx); this->actor.world.rot.z = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -287,22 +287,22 @@ void func_8099807C(EnGs* this, PlayState* play) { switch (play->msgCtx.lastPlayedSong) { case OCARINA_SONG_HEALING: case OCARINA_SONG_EPONAS: - if (!Flags_GetSwitch(play, this->unk_196)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); - Flags_SetSwitch(play, this->unk_196); + Flags_SetSwitch(play, this->switchFlag); } break; case OCARINA_SONG_STORMS: - if (!Flags_GetSwitch(play, this->unk_196)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_7, false, 0)); Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); - Flags_SetSwitch(play, this->unk_196); + Flags_SetSwitch(play, this->switchFlag); } break; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.h b/src/overlays/actors/ovl_En_Gs/z_en_gs.h index b7af0c582..ffeb3083e 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -8,7 +8,7 @@ struct EnGs; typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*); #define ENGS_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F) +#define ENGS_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 5) & 0x7F) #define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { @@ -24,7 +24,7 @@ typedef struct EnGs { /* 0x190 */ EnGsActionFunc actionFunc; /* 0x194 */ s8 unk_194; /* 0x195 */ u8 unk_195; - /* 0x196 */ u8 unk_196; + /* 0x196 */ u8 switchFlag; /* 0x197 */ s8 unk_197; /* 0x198 */ s16 unk_198; /* 0x19A */ s16 unk_19A; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index b10793a56..48f75aa68 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -113,7 +113,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor); - this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor); + this->switchFlag = ENHIDDENNUTS_GET_SWITCH_FLAG(&this->actor); if (this->switchFlag == 0x7F) { this->switchFlag = -1; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index df8275aa4..7df4b5f01 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -8,7 +8,7 @@ struct EnHiddenNuts; typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); -#define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENHIDDENNUTS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) #define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c index 95cc793ac..208708c58 100644 --- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c +++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c @@ -56,7 +56,7 @@ void EnHitTag_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnHitTag_WaitForHit; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collider); - if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCHFLAG(thisx))) { + if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h index e2effa078..645c95465 100644 --- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h +++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h @@ -7,7 +7,7 @@ struct EnHitTag; typedef void (*EnHitTagActionFunc)(struct EnHitTag*, PlayState*); -#define ENHITTAG_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENHITTAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct EnHitTag { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c index 3a6c54983..dcecdac43 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c @@ -80,8 +80,8 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { break; } - if (this->unk_190 >= 0) { - Flags_SetSwitch(play, this->unk_190); + if (this->switchFlag >= 0) { + Flags_SetSwitch(play, this->switchFlag); } this->actionFunc = func_80C259E8; @@ -96,13 +96,13 @@ void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) { s32 pad; EnInvisibleRuppe* this = THIS; - this->unk_190 = INVISIBLERUPPE_GET_1FC(&this->actor); + this->switchFlag = INVISIBLERUPPE_GET_SWITCH_FLAG(&this->actor); - if (this->unk_190 == 0x7F) { - this->unk_190 = -1; + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; } - if ((this->unk_190 >= 0) && Flags_GetSwitch(play, this->unk_190)) { + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h index d703a3511..2257a649a 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h @@ -8,12 +8,12 @@ struct EnInvisibleRuppe; typedef void (*EnInvisibleRuppeActionFunc)(struct EnInvisibleRuppe*, PlayState*); #define INVISIBLERUPPE_GET_3(thisx) ((thisx)->params & 3) -#define INVISIBLERUPPE_GET_1FC(thisx) (((thisx)->params & 0x1FC) >> 2) +#define INVISIBLERUPPE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x1FC) >> 2) typedef struct EnInvisibleRuppe { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ s16 unk_190; + /* 0x190 */ s16 switchFlag; /* 0x192 */ s16 unk_192; /* 0x194 */ EnInvisibleRuppeActionFunc actionFunc; } EnInvisibleRuppe; // size = 0x198 diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 10dc7bcdf..2e3e2fc39 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -310,7 +310,7 @@ void func_8095DFF0(EnIshi* this, PlayState* play) { s16 temp_v1_2; if (temp >= 0) { - sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FE00(&this->actor) << 8)); + sp3C = Item_DropCollectible(play, &this->actor.world.pos, temp | (ENISHI_GET_FLAG(&this->actor) << 8)); if (sp3C != NULL) { Matrix_Push(); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); @@ -399,7 +399,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, D_8095F6B8[sp34]); func_8095D6E0(&this->actor, play); - if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FE00(&this->actor))) { + if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -537,7 +537,7 @@ void func_8095E95C(EnIshi* this, PlayState* play) { if (Actor_HasNoParent(&this->actor, play)) { this->actor.room = play->roomCtx.curRoom.num; if (ENISHI_GET_1(&this->actor) == 1) { - Flags_SetSwitch(play, ENISHI_GET_FE00(&this->actor)); + Flags_SetSwitch(play, ENISHI_GET_FLAG(&this->actor)); } func_8095EA70(this); func_8095E14C(this); diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h index 65381f638..81fc78368 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h @@ -16,7 +16,7 @@ typedef void (*EnIshiUnkFunc2)(Actor*, PlayState*); #define ENISHI_GET_70(thisx) (((thisx)->params >> 4) & 7) #define ENISHI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) #define ENISHI_GET_100(thisx) (((thisx)->params >> 8) & 1) -#define ENISHI_GET_FE00(thisx) (((thisx)->params >> 9) & 0x7F) +#define ENISHI_GET_FLAG(thisx) (((thisx)->params >> 9) & 0x7F) typedef struct EnIshi { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index d629c57b9..abba3efac 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -259,7 +259,7 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { this->unk_2CA = this->picto.actor.world.rot.z; this->picto.actor.colChkInfo.health = 8; this->exitIndex = KAIZOKU_GET_EXIT_INDEX(&this->picto.actor); - this->switchFlag = KAIZOKU_GET_SWITCHFLAG(&this->picto.actor); + this->switchFlag = KAIZOKU_GET_SWITCH_FLAG(&this->picto.actor); if (this->unk_2CA >= 2) { this->unk_2CA = 0; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index a119777a9..423819eb3 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -6,7 +6,7 @@ #include "objects/object_kz/object_kz.h" #define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F) -#define KAIZOKU_GET_SWITCHFLAG(thisx) (((thisx)->params >> 6) & 0x7F) +#define KAIZOKU_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) struct EnKaizoku; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index 62d4a1f62..5f180a285 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -71,10 +71,10 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->animIndex2 = ENKGY_ANIM_NONE; this->zubora = EnKgy_FindZubora(play); this->iceBlock = EnKgy_FindIceBlock(play); - Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); - if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || + Flags_UnsetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1); + if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { - Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); + Flags_SetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor) + 1); play->envCtx.lightSettingOverride = 1; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); if (!func_80B40D64(play)) { @@ -1111,7 +1111,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); } else { - if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor))) { + if (Flags_GetSwitch(play, ENKGY_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0xC30; this->actionFunc = func_80B4296C; SET_WEEKEVENTREG(WEEKEVENTREG_21_01); diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h index 9a037ba9e..9cd6f6848 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -11,7 +11,7 @@ struct EnKgy; typedef void (*EnKgyActionFunc)(struct EnKgy*, PlayState*); #define ENKGY_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENKGY_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENKGY_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct EnKgy { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c index f3c3f4705..065a58cf5 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -70,7 +70,7 @@ void EnLight_Init(Actor* thisx, PlayState* play) { if (ENLIGHT_GET_800(&this->actor)) { this->actor.update = func_80865F38; - if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + if (ENLIGHT_GET_1000(&this->actor) && Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { Actor_SetScale(&this->actor, 0.0f); } } else if (ENLIGHT_GET_2000(&this->actor)) { @@ -124,7 +124,7 @@ void func_80865F38(Actor* thisx, PlayState* play) { s32 sp2C = false; if (ENLIGHT_GET_1000(&this->actor)) { - if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { Math_StepToF(&sp30, 1.0f, 0.05f); sp2C = true; } else { @@ -134,7 +134,7 @@ void func_80865F38(Actor* thisx, PlayState* play) { } Math_StepToF(&sp30, 0.0f, 0.05f); } - } else if (Flags_GetSwitch(play, ENLIGHT_SWITCHFLAG(&this->actor))) { + } else if (Flags_GetSwitch(play, ENLIGHT_SWITCH_FLAG(&this->actor))) { if (sp30 < 0.1f) { Actor_SetScale(&this->actor, 0.0f); sp30 = 0.0f; diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.h b/src/overlays/actors/ovl_En_Light/z_en_light.h index 17762d7fa..25e1b5851 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.h +++ b/src/overlays/actors/ovl_En_Light/z_en_light.h @@ -8,7 +8,7 @@ struct EnLight; #define ENLIGHT_GET_1(thisx) ((thisx)->params & 1) #define ENLIGHT_GET_F(thisx) ((thisx)->params & 0xF) #define ENLIGHT_GET_800(thisx) ((thisx)->params & 0x800) -#define ENLIGHT_SWITCHFLAG(thisx) (((thisx)->params & 0x7F0) >> 4) +#define ENLIGHT_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4) #define ENLIGHT_GET_1000(thisx) ((thisx)->params & 0x1000) #define ENLIGHT_GET_2000(thisx) ((thisx)->params & 0x2000) #define ENLIGHT_GET_4000(thisx) ((thisx)->params & 0x4000) diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index b07a5d58c..9119e0609 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -40,7 +40,7 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->unk148 = ENOKARINATAG_GET_F800(thisx); this->unk14A = ENOKARINATAG_GET_780(thisx); - this->switchFlags = ENOKARINATAG_GET_SWITCHFLAGS(thisx); + this->switchFlag = ENOKARINATAG_GET_SWITCH_FLAG(thisx); if (this->actor.world.rot.z > 0) { zRot = this->actor.world.rot.z; while (zRot > 10.0f) { @@ -50,8 +50,8 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { } this->unk154 = zRot * 50.0f; this->unk158 = i * 50.0f; - if (this->switchFlags == 0x7F) { - this->switchFlags = -1; + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; } if (this->unk14A == 0xF) { this->unk14A = -1; @@ -66,14 +66,14 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { s16 yDiff; u16 var_v1; - if (this->switchFlags >= 0) { + if (this->switchFlag >= 0) { if (this->unk148 == 0) { - if (Flags_GetSwitch(play, this->switchFlags)) { + if (Flags_GetSwitch(play, this->switchFlag)) { return; } } if (this->unk148 == 1) { - if (!Flags_GetSwitch(play, this->switchFlags)) { + if (!Flags_GetSwitch(play, this->switchFlag)) { return; } } @@ -122,19 +122,19 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) { - if (this->switchFlags >= 0) { + if (this->switchFlag >= 0) { switch (this->unk148) { case 0: - Flags_SetSwitch(play, this->switchFlags); + Flags_SetSwitch(play, this->switchFlag); break; case 1: - Flags_UnsetSwitch(play, this->switchFlags); + Flags_UnsetSwitch(play, this->switchFlag); break; case 2: - if (Flags_GetSwitch(play, this->switchFlags)) { - Flags_UnsetSwitch(play, this->switchFlags); + if (Flags_GetSwitch(play, this->switchFlag)) { + Flags_UnsetSwitch(play, this->switchFlag); } else { - Flags_SetSwitch(play, this->switchFlags); + Flags_SetSwitch(play, this->switchFlag); } break; } diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h index 0dd15c1c9..4c968b362 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h @@ -7,7 +7,7 @@ struct EnOkarinaTag; typedef void (*EnOkarinaTagActionFunc)(struct EnOkarinaTag*, PlayState*); -#define ENOKARINATAG_GET_SWITCHFLAGS(thisx) (((thisx)->params & 0x7F)) +#define ENOKARINATAG_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F)) #define ENOKARINATAG_GET_780(thisx) (((thisx)->params >> 0x7) & 0xF) #define ENOKARINATAG_GET_F800(thisx) (((thisx)->params >> 0xB) & 0x1F) @@ -16,7 +16,7 @@ typedef struct EnOkarinaTag { /* 0x144 */ EnOkarinaTagActionFunc actionFunc; /* 0x148 */ s16 unk148; /* 0x14A */ s16 unk14A; - /* 0x14C */ s32 switchFlags; + /* 0x14C */ s32 switchFlag; /* 0x150 */ s8 unk150; /* 0x154 */ f32 unk154; /* 0x158 */ f32 unk158; diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index eb0936ef9..29361e80f 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -705,12 +705,12 @@ void EnOsn_InitCutscene(EnOsn* this) { } void EnOsn_ChooseAction(EnOsn* this, PlayState* play) { - u32 isFlagSet = Flags_GetSwitch(play, 0); + u32 isSwitchFlagSet = Flags_GetSwitch(play, 0); this->csId = this->actor.csId; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE); - if (!isFlagSet) { + if (!isSwitchFlagSet) { this->actionFunc = EnOsn_HandleCsAction; } else { this->actionFunc = EnOsn_Idle; @@ -968,14 +968,14 @@ void EnOsn_Destroy(Actor* thisx, PlayState* play) { void EnOsn_Update(Actor* thisx, PlayState* play) { s32 pad; EnOsn* this = THIS; - u32 isFlagSet = Flags_GetSwitch(play, 0); + u32 isSwitchFlagSet = Flags_GetSwitch(play, 0); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); SkelAnime_Update(&this->skelAnime); if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) { - if (isFlagSet) { + if (isSwitchFlagSet) { this->actor.flags |= ACTOR_FLAG_TARGETABLE; EnOsn_UpdateCollider(this, play); this->actor.draw = EnOsn_Draw; diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 011738668..db4d9386b 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -146,7 +146,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { this->unk_40C = 4; this->csIdIndex = -1; owlType = ENOWL_GET_TYPE(&this->actor); - switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor); + switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor); switch (owlType) { case ENOWL_GET_TYPE_1: @@ -258,7 +258,7 @@ void func_8095AA70(EnOwl* this) { } void func_8095AAD0(EnOwl* this, PlayState* play) { - s32 switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor); + s32 switchFlag = ENOWL_GET_SWITCH_FLAG(&this->actor); if (switchFlag < 0x7F) { Flags_SetSwitch(play, switchFlag); diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.h b/src/overlays/actors/ovl_En_Owl/z_en_owl.h index 095434fa0..3dfadc7d7 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -10,7 +10,7 @@ typedef void (*EnOwlFunc)(struct EnOwl*); #define ENOWL_GET_F000(thisx) (((thisx)->params & 0xF000) >> 0xC) #define ENOWL_GET_TYPE(thisx) (((thisx)->params & 0xF80) >> 7) -#define ENOWL_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define ENOWL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef enum { /* 0x001 */ ENOWL_GET_TYPE_1 = 1, diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index e6d37cfe4..b6bd9a2d2 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -247,7 +247,7 @@ void func_80B70D24(EnRailSkb* this, PlayState* play) { while (actor != NULL) { if ((actor->id == ACTOR_OBJ_HAKAISI) && func_80B70B04(this, actor->world.pos)) { - if (Flags_GetSwitch(play, (actor->params & 0xFF00) >> 8)) { + if (Flags_GetSwitch(play, OBJHAKAISI_GET_SWITCH_FLAG(actor))) { Actor_Kill(&this->actor); return; } @@ -276,7 +276,7 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) { Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if (Flags_GetSwitch(play, ENRAILSKB_GET_FF(&this->actor))) { + if (Flags_GetSwitch(play, ENRAILSKB_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h index 593279931..8feff7d5d 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h @@ -10,7 +10,7 @@ typedef void (*EnRailSkbActionFunc)(struct EnRailSkb*, PlayState*); typedef void (*EnRailSkbUnkFunc)(struct EnRailSkb*); #define ENRAILSKB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -#define ENRAILSKB_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENRAILSKB_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0xFF) typedef enum EnRailSkbBodyPart { /* 0 */ ENRAILSKB_BODYPART_0, diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 6ac728a31..b9ea1f142 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -61,7 +61,7 @@ void EnRecepgirl_Init(Actor* thisx, PlayState* play) { this->eyeTexIndex = 2; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0x2ADC; // hear directions again? } else { this->actor.textId = 0x2AD9; // "Welcome..." @@ -105,11 +105,11 @@ void EnRecepgirl_Wait(EnRecepgirl* this, PlayState* play) { } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { Actor_OfferTalk(&this->actor, play, 60.0f); if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { - this->actor.textId = 0x2367; // "... doesn't Kafei want to break off his engagement ... ?" - } else if (Flags_GetSwitch(play, this->actor.params)) { + this->actor.textId = 0x2367; + } else if (Flags_GetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor))) { this->actor.textId = 0x2ADC; // hear directions again? } else { - this->actor.textId = 0x2AD9; // "Welcome..." + this->actor.textId = 0x2AD9; } } } @@ -145,8 +145,8 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) { this->actor.textId = 0x2ADC; // hear directions again? EnRecepgirl_SetupWait(this); } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - if (this->actor.textId == 0x2AD9) { // "Welcome..." - Flags_SetSwitch(play, this->actor.params); + if (this->actor.textId == 0x2AD9) { + Flags_SetSwitch(play, ENRECEPGIRL_GET_SWITCH_FLAG(&this->actor)); Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80)) { @@ -156,11 +156,11 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) { } } else if (this->actor.textId == 0x2ADC) { // hear directions again? Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); - this->actor.textId = 0x2ADD; // "So..." + this->actor.textId = 0x2ADD; } else { Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 10.0f); - if (this->actor.textId == 0x2ADD) { // "So..." + if (this->actor.textId == 0x2ADD) { this->actor.textId = 0x2ADE; // Mayor's office is on the left, drawing room on the right } else if (this->actor.textId == 0x2ADA) { // Mayor's office is on the left (meeting ongoing) this->actor.textId = 0x2ADB; // drawing room on the right diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h index a0fba9fdc..96ad7522a 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h @@ -7,6 +7,8 @@ struct EnRecepgirl; typedef void (*EnRecepgirlActionFunc)(struct EnRecepgirl*, PlayState*); +#define ENRECEPGIRL_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct EnRecepgirl { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 33f79d4f2..2f429b975 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -264,7 +264,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { } } else { // Scene flag - Checks whether the chandelier has been lit - if (!Flags_GetSwitch(play, EN_S_GORO_SCENEFLAG_INDEX(&this->actor))) { + if (!Flags_GetSwitch(play, EN_S_GORO_GET_SWITCH_FLAG(&this->actor))) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_08)) { if (this->textId == 0xD02) { diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h index 5777af17b..9e0cd7792 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h @@ -5,7 +5,7 @@ #include "objects/object_oF1d_map/object_oF1d_map.h" #define EN_S_GORO_GET_MAIN_TYPE(thisx) ((thisx)->params & 0xF) -#define EN_S_GORO_SCENEFLAG_INDEX(thisx) (((thisx)->params & 0x7F0) >> 4) +#define EN_S_GORO_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F0) >> 4) struct EnSGoro; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index e4240de0a..2c2e20e6a 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -617,8 +617,8 @@ s32 func_808A6580(EnSt* this, PlayState* play) { break; } } else { - if (ENST_GET_3F(&this->actor) != ENST_3F_63) { - Flags_SetSwitch(play, ENST_GET_3F(&this->actor)); + if (ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) { + Flags_SetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor)); } SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALTU_DEAD); Enemy_StartFinishingBlow(play, &this->actor); @@ -843,7 +843,7 @@ void EnSt_Init(Actor* thisx, PlayState* play) { EnSt* this = THIS; this->unk_2C0 = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); - if (((ENST_GET_3F(&this->actor) != ENST_3F_63) && Flags_GetSwitch(play, ENST_GET_3F(&this->actor))) || + if (((ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) && Flags_GetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor))) || (this->unk_2C0 < 0)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.h b/src/overlays/actors/ovl_En_St/z_en_st.h index 0dcfb3d00..aab1204aa 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.h +++ b/src/overlays/actors/ovl_En_St/z_en_st.h @@ -7,10 +7,9 @@ struct EnSt; typedef void (*EnStActionFunc)(struct EnSt*, PlayState*); -#define ENST_GET_3F(thisx) (((thisx)->params & 0x3F) & 0xFF) +#define ENST_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x3F) & 0xFF) #define ENST_GET_1C0(thisx) ((((thisx)->params & 0x1C0) >> 6) & 0xFF) -#define ENST_3F_63 63 #define ENST_1C0_1 1 typedef enum EnStBodyPart { diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 15b7507e1..34ebe1d80 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -248,7 +248,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->isTalking = false; this->type = EN_TALK_GIBUD_TYPE_GIBDO; this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx); - this->switchFlag = EN_TALK_GIBUD_SWITCH_FLAG(thisx); + this->switchFlag = EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx); this->drawDmgEffAlpha = 0.0f; this->drawDmgEffScale = 0.0f; diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index 0819cd893..06ccd3914 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -5,7 +5,7 @@ #include "objects/object_rd/object_rd.h" #define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF) -#define EN_TALK_GIBUD_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4) +#define EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4) struct EnTalkGibud; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index a76d9ed47..d99ee0bce 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -161,7 +161,7 @@ void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) { this->actionFunc = EnTimeTag_SoaringEngraving_SubsequentInteraction; } } else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && - (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) || + (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCH_FLAG(&this->actor)) || CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) { this->actor.flags |= ACTOR_FLAG_TARGETABLE; Actor_OfferTalk(&this->actor, play, 110.0f); diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h index c022ca122..33f6d414e 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h @@ -14,7 +14,7 @@ typedef void (*EnTimeTagActionFunc)(struct EnTimeTag*, PlayState*); #define TIMETAG_KICKOUT_HOUR(thisx) ((thisx)->home.rot.x) #define TIMETAG_KICKOUT_MINUTE(thisx) ((thisx)->home.rot.y) -#define TIMETAG_SOARING_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define TIMETAG_SOARING_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define TIMETAG_DIARY_GET_TYPE(thisx) ((thisx)->params & 0x7F) #define TIMETAG_DIARY_TIMER(thisx) ((thisx)->home.rot.x) diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 8afe73e5e..64a62f84a 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -204,10 +204,10 @@ void EnTk_Init(Actor* thisx, PlayState* play) { EnTk* this = THIS; this->unk_2B0 = ENTK_GET_F(&this->actor); - this->unk_2B1 = ENTK_GET_7F0(&this->actor); + this->switchFlag = ENTK_GET_SWITCH_FLAG(&this->actor); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, this->unk_2B1)) { + if (Flags_GetSwitch(play, this->switchFlag)) { if (this->unk_2B0 == 0) { Actor_Kill(&this->actor); return; @@ -562,7 +562,7 @@ void func_80AED610(EnTk* this, PlayState* play) { Message_StartTextbox(play, 0x13FD, &this->actor); } else if (CURRENT_DAY != 2) { func_80AED544(this, play); - } else if (!Flags_GetSwitch(play, ENTK_GET_7F0(&this->actor))) { + } else if (!Flags_GetSwitch(play, ENTK_GET_SWITCH_FLAG(&this->actor))) { Message_StartTextbox(play, 0x1403, &this->actor); } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_02)) { func_80AED544(this, play); diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.h b/src/overlays/actors/ovl_En_Tk/z_en_tk.h index aa15c6fc6..46e9b0b96 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h @@ -9,7 +9,7 @@ typedef void (*EnTkActionFunc)(struct EnTk*, PlayState*); typedef void (*EnTkUnkFunc)(struct EnTk*, PlayState*); #define ENTK_GET_F(thisx) ((thisx)->params & 0xF) -#define ENTK_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F) +#define ENTK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 4) & 0x7F) #define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F) typedef struct EnTk { @@ -20,7 +20,7 @@ typedef struct EnTk { /* 0x1D8 */ Vec3s jointTable[18]; /* 0x244 */ Vec3s morphTable[18]; /* 0x2B0 */ s8 unk_2B0; - /* 0x2B1 */ s8 unk_2B1; + /* 0x2B1 */ s8 switchFlag; /* 0x2B4 */ Vec3f unk_2B4; /* 0x2C0 */ s16 unk_2C0; /* 0x2C2 */ s16 unk_2C2; diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index ce02cd835..12aaa808f 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -248,9 +248,9 @@ void func_80BA39C8(EnToto* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80BA36C0(this, play, 1); if (play->sceneId != SCENE_SONCHONOIE) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor)); } else if (player->transformation == PLAYER_FORM_DEKU) { - Flags_SetSwitch(play, this->actor.home.rot.x); + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor)); } this->unk2B6 = 0; return; @@ -268,7 +268,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) { Actor_OfferTalk(&this->actor, play, 50.0f); if (play->sceneId == SCENE_SONCHONOIE) { if (player->transformation == PLAYER_FORM_DEKU) { - if (!Flags_GetSwitch(play, this->actor.home.rot.x)) { + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_3(&this->actor))) { this->text = D_80BA5068; } else { this->text = D_80BA5074; @@ -278,7 +278,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) { } } else if (ENTOTO_WEEK_EVENT_FLAGS) { this->text = D_80BA502C; - } else if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) { + } else if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) { this->text = D_80BA5034; } else { this->text = D_80BA5038; @@ -646,15 +646,15 @@ s32 func_80BA4B24(EnToto* this, PlayState* play) { player = GET_PLAYER(play); Animation_MorphToPlayOnce(&this->skelAnime, &object_zm_Anim_0028B8, -4.0f); if (player->transformation == PLAYER_FORM_ZORA) { - if (!Flags_GetSwitch(play, this->actor.params & 0x7F)) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor))) { + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_1(&this->actor)); return 1; } else { return 3; } } else { - if (!Flags_GetSwitch(play, (this->actor.params >> 7) & 0x7F)) { - Flags_SetSwitch(play, (this->actor.params >> 7) & 0x7F); + if (!Flags_GetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor))) { + Flags_SetSwitch(play, ENTOTO_GET_SWITCH_FLAG_2(&this->actor)); return 4; } else { return 7; diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.h b/src/overlays/actors/ovl_En_Toto/z_en_toto.h index dc2b0947e..7a742d84a 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h @@ -8,6 +8,10 @@ struct EnToto; typedef void (*EnTotoActionFunc)(struct EnToto*, PlayState*); typedef s32 (*EnTotoUnkFunc)(struct EnToto*, PlayState*); +#define ENTOTO_GET_SWITCH_FLAG_1(thisx) ((thisx)->params & 0x7F) +#define ENTOTO_GET_SWITCH_FLAG_2(thisx) (((thisx)->params >> 7) & 0x7F) +#define ENTOTO_GET_SWITCH_FLAG_3(thisx) ((thisx)->home.rot.x) + typedef struct EnTotoText { /* 0x0 */ u8 unk0; /* 0x1 */ u8 unk1; diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index 6901fbffd..bc960b96b 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -13,6 +13,7 @@ */ #include "z_en_water_effect.h" +#include "overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h" #include "objects/object_water_effect/object_water_effect.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -414,7 +415,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { this->unk_DC6--; } - if ((rotaryRoom != NULL) && Flags_GetSwitch(play, (rotaryRoom->params >> 1) & 0x7F)) { + if ((rotaryRoom != NULL) && Flags_GetSwitch(play, BGIKANAROTARYROOM_GET_SWITCH_FLAG_1(rotaryRoom))) { this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f; } else if (!Play_InCsMode(play)) { this->unk_DC4++; diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 226382f8d..8ae7b0de4 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -336,7 +336,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetJntSph(play, &this->ghostColliders, &this->actor, &sJntSphInit, this->ghostColliderElements); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->staffFlameScroll = Rand_S16Offset(0, 7); - this->switchFlag = EN_WIZ_GET_SWITCHFLAG(&this->actor); + this->switchFlag = EN_WIZ_GET_SWITCH_FLAG(&this->actor); this->type = EN_WIZ_GET_TYPE(&this->actor); if (this->switchFlag == 0x7F) { diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index c0f1c7cfb..fa7156fc5 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -4,7 +4,7 @@ #include "global.h" #include "objects/object_wiz/object_wiz.h" -#define EN_WIZ_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define EN_WIZ_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define EN_WIZ_GET_TYPE(thisx) (((thisx)->params >> 8) & 0xFF) typedef enum { diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index e17f6dc94..57689ebd8 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -864,7 +864,7 @@ void func_80B98178(EnZot* this, PlayState* play) { textId = 0x12A6; SET_WEEKEVENTREG(WEEKEVENTREG_39_04); } - } else if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + } else if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { textId = 0x12A0; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_02)) { textId = 0x12A5; @@ -1173,7 +1173,7 @@ void func_80B98E10(EnZot* this, PlayState* play) { u16 textId; if (GET_PLAYER_FORM == PLAYER_FORM_ZORA) { - if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) { textId = 0x12C5; } else { @@ -1187,7 +1187,7 @@ void func_80B98E10(EnZot* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_40_02); } } else { - if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { + if (Flags_GetSwitch(play, ENZOT_GET_SWITCH_FLAG(&this->actor))) { if (this->unk_2F2 & 0x10) { textId = 0x12BF; } else { diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.h b/src/overlays/actors/ovl_En_Zot/z_en_zot.h index e2c43baa3..b6b67abb4 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h @@ -9,6 +9,7 @@ typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*); #define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENZOT_GET_SWITCH_FLAG(thisx) (((thisx)->home.rot.z) & 0x7F) #define ENZOT_PATH_INDEX_NONE 0x3F diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c index c4e861ff6..d475a263e 100644 --- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c +++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c @@ -92,7 +92,7 @@ void MirRay2_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.x = 0; this->actor.world.rot.x = this->actor.shape.rot.x; if (MIRRAY2_GET_F(thisx) != 1) { - if ((MIRRAY2_GET_SWITCH_FLAGS(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) { + if ((MIRRAY2_GET_SWITCH_FLAG(thisx) != 0x7F) && !Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) { this->unk1A4 |= 1; } } @@ -109,7 +109,7 @@ void MirRay2_Update(Actor* thisx, PlayState* play) { MirRay2* this = THIS; if (this->unk1A4 & 1) { - if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, MIRRAY2_GET_SWITCH_FLAG(thisx))) { this->unk1A4 &= ~1; } } else { diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h index 4bb40d40d..7325ba2cf 100644 --- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h +++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h @@ -6,7 +6,7 @@ struct MirRay2; #define MIRRAY2_GET_F(thisx) ((thisx)->params & 0xF) -#define MIRRAY2_GET_SWITCH_FLAGS(thisx) (((thisx)->params & 0xFE00) >> 9) +#define MIRRAY2_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFE00) >> 9) typedef struct MirRay2 { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c index cec65a32c..d713c9d04 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -198,7 +198,7 @@ void ObjArmos_Init(Actor* thisx, PlayState* play) { if (sp40 == 0) { func_809A57D8(this); - } else if (Flags_GetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor))) { if (sp44 == OBJARMOS_ROT_7_0) { this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp40 * 60); func_809A57D8(this); @@ -285,7 +285,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) { } } else { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); - Flags_SetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJARMOS_GET_SWITCH_FLAG(&this->dyna.actor)); sp20 = true; } diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h index 4ac83cc9d..af3b31338 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h @@ -8,7 +8,7 @@ struct ObjArmos; typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*); -#define OBJARMOS_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJARMOS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7) #define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF) diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 0ad12d3f3..9e6531ef1 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -275,14 +275,14 @@ s32 func_80937468(ObjBean* this, PlayState* play) { ObjBean* func_809374F8(ObjBean* this, PlayState* play) { Actor* bgActor = play->actorCtx.actorLists[ACTORCAT_BG].first; - s32 params = OBJBEAN_GET_3F80(&this->dyna.actor, 0); + s32 switchFlag = OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0); while (bgActor != NULL) { if (bgActor->id == ACTOR_OBJ_BEAN) { s32 params2 = OBJBEAN_GET_C000(bgActor); if (!params2 && (bgActor->room == this->dyna.actor.room) && !OBJBEAN_GET_80(bgActor) && - (params == OBJBEAN_GET_7F(bgActor, 0)) && + (switchFlag == OBJBEAN_GET_SWITCH_FLAG_1(bgActor, 0)) && (Math3D_Vec3fDistSq(&bgActor->world.pos, &this->dyna.actor.world.pos) < SQ(10.0f))) { break; } @@ -406,12 +406,14 @@ void ObjBean_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 8.8f); func_80936CF0(this, play); - if (!OBJBEAN_GET_80(&this->dyna.actor) && Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0)) && - !Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1)) && func_800FE9B4(play)) { - Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1)); + if (!OBJBEAN_GET_80(&this->dyna.actor) && + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0)) && + !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1)) && func_800FE9B4(play)) { + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1)); } - if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1))) { + if (OBJBEAN_GET_80(&this->dyna.actor) || + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 1))) { func_80938804(this); } else { DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); @@ -504,12 +506,12 @@ void func_80937DEC(ObjBean* this, PlayState* play) { this->unk_1FF = false; } - if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)) && - Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)) && func_800FE9B4(play)) { - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)); + if (this->unk_1FF && !Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)) && + Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0)) && func_800FE9B4(play)) { + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)); } - if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1))) { + if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1))) { Actor_Kill(&this->dyna.actor); return; } @@ -520,7 +522,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) { this->dyna.actor.draw = func_80938E00; } - if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0))) { + if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0))) { this->unk_1FE |= 5; func_80937C30(this); } else { @@ -528,7 +530,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) { func_80937C10(this); } - if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) { + if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) { this->unk_1E4 = 5; } else { this->unk_1E4 = 0; @@ -548,10 +550,10 @@ void func_80937FC8(ObjBean* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { if (Player_GetExchangeItemAction(play) == PLAYER_IA_MAGIC_BEANS) { func_809383B4(this); - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 0)); } - if (Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0))) { + if (Flags_GetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0))) { this->unk_1E4 = 5; } else { s32 pad; @@ -566,7 +568,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) { ((this->unk_1FF != 0) && (this->unk_1FE & 4) && (this->dyna.actor.xzDistToPlayer < 300.0f) && func_800FE9B4(play))) { func_809375C8(this, play); - Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_2(&this->dyna.actor, 1)); this->unk_1E4 = 6; func_80938670(this); } else if (this->unk_1FF != 0) { @@ -614,7 +616,7 @@ void func_80938298(ObjBean* this, PlayState* play) { if (this->unk_1E0 >= 3) { this->unk_1E4 = 3; - Flags_SetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 0)); + Flags_SetSwitch(play, OBJBEAN_GET_SWITCH_FLAG_1(&this->dyna.actor, 0)); this->unk_1E4 = 5; func_8093833C(this); } else if (this->unk_1E4 == 4) { diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h index 1a22de390..f21610891 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h @@ -8,10 +8,10 @@ struct ObjBean; typedef void (*ObjBeanActionFunc)(struct ObjBean*, PlayState*); typedef void (*ObjBeanUnkFunc)(struct ObjBean*); -#define OBJBEAN_GET_7F(thisx, x) (((thisx)->params + (x)) & 0x7F) +#define OBJBEAN_GET_SWITCH_FLAG_1(thisx, offset) (((thisx)->params + (offset)) & 0x7F) #define OBJBEAN_GET_80(thisx) (((thisx)->params >> 7) & 1) #define OBJBEAN_GET_3F00(thisx) (((thisx)->params >> 8) & 0x3F) -#define OBJBEAN_GET_3F80(thisx, x) ((((thisx)->params >> 7) + (x)) & 0x7F) +#define OBJBEAN_GET_SWITCH_FLAG_2(thisx, offset) ((((thisx)->params >> 7) + (offset)) & 0x7F) #define OBJBEAN_GET_C000(thisx) (((thisx)->params >> 0xE) & 3) #define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3) diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c index 61805fd49..afcf7aaa0 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -111,7 +111,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) { } Actor_SetScale(&this->actor, sp28 * 0.001f); - this->actor.params &= 0xFF; + this->actor.params = OBJBIGICLE_GET_SWITCH_FLAG_MASK(&this->actor); this->actor.colChkInfo.mass = MASS_IMMOVABLE; sp30 = sp28 * (1.0f / 60.0f); @@ -125,7 +125,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) { this->collider2.dim.height = this->collider2.dim.height * sp30; this->collider2.dim.yShift = this->collider2.dim.yShift * sp30; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -248,7 +248,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) { temp_f0 = this->actor.world.pos.y - icePoly->actor.world.pos.y; if ((temp_f0 < icePoly->colliders1[0].dim.height) && (temp_f0 > 0.0f) && (Actor_WorldDistXZToActor(&this->actor, &icePoly->actor) < icePoly->colliders1[0].dim.radius)) { - Flags_SetSwitch(play, this->actor.params); + Flags_SetSwitch(play, OBJBIGICLE_GET_SWITCH_FLAG(&this->actor)); this->actionFunc = func_80AE939C; return; } diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h index 2eb5a00bd..fc506e62b 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h @@ -7,6 +7,8 @@ struct ObjBigicicle; typedef void (*ObjBigicicleActionFunc)(struct ObjBigicicle*, PlayState*); +#define OBJBIGICLE_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF) +#define OBJBIGICLE_GET_SWITCH_FLAG(thisx) ((thisx)->params) #define OBJBIGICLE_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) typedef struct ObjBigicicle { 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 a4f44973f..f21ebff2b 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c @@ -32,7 +32,7 @@ ActorInit Obj_Blockstop_InitVars = { void ObjBlockstop_Init(Actor* thisx, PlayState* play) { ObjBlockstop* this = THIS; - if (Flags_GetSwitch(play, this->actor.params)) { + if (Flags_GetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } this->actionFunc = ObjBlockstop_CheckForBlock; @@ -58,7 +58,7 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) { void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { - Flags_SetSwitch(play, this->actor.params); + Flags_SetSwitch(play, OBJBLOCKSTOP_GET_SWITCH_FLAG(&this->actor)); if (CutsceneManager_GetLength(this->actor.csId) != -1) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); } diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h index 15d45a90b..e6ad9f696 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h @@ -7,6 +7,8 @@ struct ObjBlockstop; typedef void (*ObjBlockstopActionFunc)(struct ObjBlockstop*, PlayState*); +#define OBJBLOCKSTOP_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjBlockstop { /* 0x000 */ Actor actor; /* 0x144 */ ObjBlockstopActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c index a2ecc448e..95ff47db2 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -182,7 +182,7 @@ void ObjBombiwa_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -342,7 +342,7 @@ void func_80939EF4(ObjBombiwa* this, PlayState* play) { } if (sp28->unk_0C(&this->actor)) { - Flags_SetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor)); + Flags_SetSwitch(play, OBJBOMBIWA_GET_SWITCH_FLAG(&this->actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN); if (OBJBOMBIWA_GET_8000(&this->actor)) { Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME); diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h index b49a89323..911d804fc 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h @@ -7,7 +7,7 @@ struct ObjBombiwa; typedef void (*ObjBombiwaActionFunc)(struct ObjBombiwa*, PlayState*); -#define OBJBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1) #define OBJBOMBIWA_GET_8000(thisx) (((thisx)->params >> 0xF) & 1) diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index fde4fa4b3..8f326af48 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -191,7 +191,7 @@ void ObjChan_InitChandelier(ObjChan* this, PlayState* play) { } } - if (Flags_GetSwitch(play, thisx->params & 0x7F)) { + if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) { this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->stateFlags |= OBJCHAN_STATE_ON_FIRE; @@ -261,9 +261,9 @@ void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) { } } if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) { - Flags_SetSwitch(play, thisx->params & 0x7F); + Flags_SetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx)); } - if (Flags_GetSwitch(play, thisx->params & 0x7F)) { + if (Flags_GetSwitch(play, OBJCHAN_GET_SWITCH_FLAG(thisx))) { if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) { this->rotationSpeed = 0; this->flameSize = 0.0f; diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h index 0e6fbca86..f97ecccda 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h @@ -5,6 +5,8 @@ struct ObjChan; +#define OBJCHAN_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + #define OBJCHAN_SUBTYPE(thisx) (((thisx)->params >> 12) & 0xF) #define OBJCHAN_SUBTYPE_CHANDELIER 0 #define OBJCHAN_SUBTYPE_POT 1 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 ee76dd9d4..a809da57a 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -32,8 +32,8 @@ ActorInit Obj_Demo_InitVars = { void ObjDemo_Init(Actor* thisx, PlayState* play) { ObjDemo* this = THIS; - thisx->params = OBJDEMO_GET_FF(thisx); - if ((thisx->params != OBJDEMO_FF_FF) && (Flags_GetSwitch(play, thisx->params))) { + thisx->params = OBJDEMO_GET_SWITCH_FLAG_MASK(thisx); + if ((OBJDEMO_GET_SWITCH_FLAG(thisx) != 0xFF) && (Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(thisx)))) { Actor_Kill(&this->actor); return; } @@ -93,8 +93,8 @@ void func_80983704(ObjDemo* this, PlayState* play) { } this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); if (this->actor.csId == CS_ID_NONE) { - if (this->actor.params != 0xFF) { - Flags_SetSwitch(play, this->actor.params); + if (OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) { + Flags_SetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor)); } Actor_Kill(&this->actor); } @@ -108,7 +108,8 @@ void func_80983704(ObjDemo* this, PlayState* play) { void ObjDemo_Update(Actor* thisx, PlayState* play) { ObjDemo* this = THIS; - if ((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params)) { + if ((OBJDEMO_GET_SWITCH_FLAG(&this->actor) != 0xFF) && + Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h index 065a21fe9..6b9d39db3 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h @@ -3,12 +3,13 @@ #include "global.h" -#define OBJDEMO_GET_FF(thisx) ((thisx)->params & 0xFF) -#define OBJDEMO_FF_FF 0xFF struct ObjDemo; typedef void (*ObjDemoActionFunc)(struct ObjDemo*, PlayState*); +#define OBJDEMO_GET_SWITCH_FLAG_MASK(thisx) ((thisx)->params & 0xFF) +#define OBJDEMO_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjDemo { /* 0x000 */ Actor actor; /* 0x144 */ ObjDemoActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c index c1b46fce7..ac31cbc64 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -131,7 +131,7 @@ void ObjDhouse_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) { this->dyna.actor.draw = func_80B13E40; func_80B13908(this); } else { @@ -434,7 +434,7 @@ void func_80B13940(ObjDhouse* this, PlayState* play2) { PlayState* play = play2; s32 sp20 = false; - if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJDHOUSE_GET_SWITCH_FLAG(&this->dyna.actor))) { sp20 = true; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EXPLSION_LONG); } diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h index c03dbed7d..46f1af83b 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h @@ -7,7 +7,7 @@ struct ObjDhouse; typedef void (*ObjDhouseActionFunc)(struct ObjDhouse*, PlayState*); -#define OBJDHOUSE_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJDHOUSE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct { /* 0x00 */ Vec3f unk_00; diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index 771833c58..9933b36f2 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -88,7 +88,7 @@ void func_80A4CABC(ObjFireshield* this) { s32 pad; if (CutsceneManager_IsNext(this->actor.csId)) { - s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_a0 = (sp18 & ~0x1F) >> 5; CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); @@ -103,7 +103,7 @@ void func_80A4CABC(ObjFireshield* this) { void func_80A4CB7C(ObjFireshield* this) { s32 pad; - s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp18 = OBJFIRESHIELD_GET_FLAGS(&this->actor); if (this->unk_194 > 0) { if (this->unk_194 == 20) { @@ -119,7 +119,7 @@ void func_80A4CB7C(ObjFireshield* this) { } void func_80A4CC54(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_v1 = 1 << (temp_v0 & 0x1F); this->actionFunc = func_80A4CCBC; @@ -128,7 +128,7 @@ void func_80A4CC54(ObjFireshield* this) { } void func_80A4CCBC(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); this->actionFunc = func_80A4CD28; D_80A4D884[(temp_v0 & ~0x1F) >> 5] &= ~(1 << (temp_v0 & 0x1F)); @@ -141,7 +141,7 @@ void func_80A4CD28(ObjFireshield* this) { void func_80A4CD34(Actor* thisx, PlayState* play) { s32 pad; ObjFireshield* this = THIS; - s32 sp24 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_7F(&this->actor)); + s32 isSwitchFlagSet = Flags_GetSwitch(play, OBJFIRESHIELD_GET_FLAGS(&this->actor)); s32 phi_v1; s32 phi_a0; @@ -154,13 +154,13 @@ void func_80A4CD34(Actor* thisx, PlayState* play) { phi_a0 = false; } } else { - phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor)); + phi_a0 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor)); phi_v1 = false; } if (phi_v1 || phi_a0) { this->unk_19C = 0; - } else if (sp24) { + } else if (isSwitchFlagSet) { this->unk_19C = 0; } else { this->unk_19C = 1; @@ -175,7 +175,7 @@ void func_80A4CD34(Actor* thisx, PlayState* play) { void func_80A4CE28(ObjFireshield* this, PlayState* play) { s32 pad; - s32 sp30 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp30 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 pad2[2]; s32 sp24; s32 sp20; @@ -189,7 +189,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) { sp20 = false; } } else { - sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_3F80(&this->actor)); + sp20 = Flags_GetSwitch(play, OBJFIRESHIELD_GET_SWITCH_FLAG(&this->actor)); sp24 = false; } @@ -251,7 +251,7 @@ void func_80A4CE28(ObjFireshield* this, PlayState* play) { } void func_80A4D174(ObjFireshield* this) { - s32 temp_v0 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 temp_v0 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_v1 = 1 << (temp_v0 & 0x1F); if (!(D_80A4D864[(temp_v0 & ~0x1F) >> 5] & temp_v1)) { @@ -318,7 +318,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { s32 pad; ObjFireshield* this = THIS; s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor); - s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor); + s32 sp40 = OBJFIRESHIELD_GET_FLAGS(&this->actor); s32 temp_a0; s32 temp_v1; diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h index ffe1d7a35..772f839bb 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h @@ -7,10 +7,10 @@ struct ObjFireshield; typedef void (*ObjFireshieldActionFunc)(struct ObjFireshield*); -#define OBJFIRESHIELD_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJFIRESHIELD_GET_FLAGS(thisx) ((thisx)->params & 0x7F) #define OBJFIRESHIELD_GET_1F00(thisx) (((thisx)->params >> 8) & 0x1F) #define OBJFIRESHIELD_GET_2000(thisx) (((thisx)->params >> 0xD) & 1) -#define OBJFIRESHIELD_GET_3F80(thisx) (((thisx)->params >> 7) & 0x7F) +#define OBJFIRESHIELD_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 7) & 0x7F) #define OBJFIRESHIELD_GET_C000(thisx) (((thisx)->params >> 0xE) & 3) #define OBJFIRESHIELD_GET_ROTX(thisx) ((thisx)->home.rot.x & 1) diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index 6db03e1ca..8802a257d 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -112,7 +112,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp7C); this->unk_19A = 0; this->unk_198 = 0; - this->switchFlag = OBJHAKAISI_GET_SWITCHFLAG(thisx); + this->switchFlag = OBJHAKAISI_GET_SWITCH_FLAG(thisx); this->csId = this->dyna.actor.csId; if (this->switchFlag == 0xFF) { diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h index 1454181dd..7ee84768a 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h @@ -8,7 +8,7 @@ struct ObjHakaisi; typedef void (*ObjHakaisiActionFunc)(struct ObjHakaisi*, PlayState*); #define OBJHAKAISI_GET_FF(thisx) ((thisx)->params & 0xFF) -#define OBJHAKAISI_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFF00) >> 8) +#define OBJHAKAISI_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF00) >> 8) typedef struct ObjHakaisi { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c index f9d1f0252..5ccbf3d50 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -180,7 +180,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) { func_809A13A0(this, play); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 2.3f); - if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor))) { + if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -232,7 +232,7 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) { } else { func_809A10F4(this, play); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_WALL_BROKEN); - Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h index 962a59612..48ea889d5 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h @@ -5,7 +5,7 @@ struct ObjHamishi; -#define OBJHAMISHI_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJHAMISHI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct ObjHamishi { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c index 5c63e0561..3dde506b9 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c @@ -44,7 +44,7 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->isHidden = OBJHSSTUMP_GET_ISHIDDEN(thisx); - this->switchFlag = OBJHSSTUMP_GET_SWITCHFLAG(thisx); + this->switchFlag = OBJHSSTUMP_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_hsstump_Colheader_0011B0); switch (this->isHidden) { @@ -71,7 +71,7 @@ void ObjHsStump_SetupIdle(ObjHsStump* this, PlayState* play) { } void ObjHsStump_Idle(ObjHsStump* this, PlayState* play) { - if (this->isHidden == true && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->isHidden == true) && Flags_GetSwitch(play, this->switchFlag)) { ObjHsStump_SetupAppear(this, play); } } diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h index 0f06fdfaf..479e17207 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJHSSTUMP_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJHSSTUMP_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJHSSTUMP_GET_ISHIDDEN(thisx) (((thisx)->params >> 12) & 0xF) struct ObjHsStump; diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c index 40e8b9323..5cced7f48 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c @@ -78,7 +78,7 @@ void ObjHsblock_Init(Actor* thisx, PlayState* play) { func_8093E03C(this); break; case 1: - if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(thisx))) { + if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(thisx))) { func_8093E03C(this); } else { func_8093E05C(this); @@ -106,7 +106,7 @@ void func_8093E05C(ObjHsblock* this) { } void func_8093E0A0(ObjHsblock* this, PlayState* play) { - if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJHSBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { func_8093E0E8(this); } } diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h index f91926409..ca2d81c63 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJHSBLOCK_GET_SWITCH(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJHSBLOCK_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJHSBLOCK_GET_3(thisx) ((thisx)->params & 3) #define OBJHSBLOCK_GET_5(thisx) (((thisx)->params >> 5) & 1) #define OBJHSBLOCK_GET_6(thisx) (((thisx)->params >> 6) & 3) diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c index b04dff8a0..a2b376a28 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -340,7 +340,7 @@ void ObjHugebombiwa_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor))) { + if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -409,19 +409,19 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) { if (CutsceneManager_IsNext(this->actor.csId)) { CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor); - Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor)); - if (!(ENHUGEBOMBIWA_GET_100(&this->actor)) && + Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_SWITCH_FLAG(&this->actor)); + if (!ENHUGEBOMBIWA_GET_100(&this->actor) && ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) { SET_WEEKEVENTREG(WEEKEVENTREG_19_02); } - if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) { + if (!ENHUGEBOMBIWA_GET_100(&this->actor)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN); } else { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_SNOWBALL_BROKEN); } - if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) { + if (!ENHUGEBOMBIWA_GET_100(&this->actor)) { func_80A53BE0(play, &this->actor.world.pos); func_80A54E10(this); } else { diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h index 932a61c3d..bb34c5013 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h @@ -7,7 +7,7 @@ struct ObjHugebombiwa; typedef void (*ObjHugebombiwaActionFunc)(struct ObjHugebombiwa*, PlayState*); -#define ENHUGEBOMBIWA_GET_7F(thisx) ((thisx)->params & 0x7F) +#define ENHUGEBOMBIWA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENHUGEBOMBIWA_GET_100(thisx) (((thisx)->params >> 8) & 1) typedef struct { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index f44033861..8ee8520ed 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -65,20 +65,20 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP), }; -s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) { +s32 func_80B9C450(PlayState* play, s32 switchFlagBase, s32 arg2) { s32 sp2C = 1; if (arg2 < ARRAY_COUNT(D_80B9DC70)) { - s32 val = D_80B9DC70[arg2].unk_00; + s32 switchFlagOffset = D_80B9DC70[arg2].unk_00; s32 val3 = D_80B9DC70[arg2].unk_01; - while (val--) { - if ((1 << val) & val3) { - if (!Flags_GetSwitch(play, arg1 + val)) { + while (switchFlagOffset--) { + if ((1 << switchFlagOffset) & val3) { + if (!Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } - } else if (Flags_GetSwitch(play, arg1 + val)) { + } else if (Flags_GetSwitch(play, switchFlagBase + switchFlagOffset)) { sp2C = 0; break; } @@ -87,23 +87,26 @@ s32 func_80B9C450(PlayState* play, s32 arg1, s32 arg2) { sp2C = 0; switch (arg2) { case 14: - if (!Flags_GetSwitch(play, arg1)) { + if (!Flags_GetSwitch(play, switchFlagBase)) { sp2C = 1; } - if (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3)) { + if (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3)) { sp2C += 2; } break; case 15: - if (!Flags_GetSwitch(play, arg1) || - (Flags_GetSwitch(play, arg1 + 1) && Flags_GetSwitch(play, arg1 + 2) && - Flags_GetSwitch(play, arg1 + 3))) { + if (!Flags_GetSwitch(play, switchFlagBase) || + (Flags_GetSwitch(play, switchFlagBase + 1) && Flags_GetSwitch(play, switchFlagBase + 2) && + Flags_GetSwitch(play, switchFlagBase + 3))) { sp2C = 1; } break; + + default: + break; } } return sp2C; @@ -204,7 +207,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_160 = OBJHUNSUI_GET_F000(thisx); this->unk_164 = OBJHUNSUI_GET_F80(thisx); - this->unk_168 = OBJHUNSUI_GET_7F(thisx); + this->switchFlag = OBJHUNSUI_GET_SWITCH_FLAG(thisx); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 != OBJHUNSUI_F000_5) && (this->unk_160 != OBJHUNSUI_F000_6)) { @@ -279,7 +282,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { case OBJHUNSUI_F000_1: this->dyna.actor.draw = func_80B9DA60; - if ((this->unk_172 & 1) && func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) && func_80B9C450(play, this->switchFlag, this->unk_164)) { this->unk_174 = 240.0f; this->unk_172 |= 4; this->unk_184 = 0xFF0; @@ -289,7 +292,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { this->unk_184 = 0; } this->unk_178 = this->unk_174; - this->unk_180 = func_80B9C450(play, this->unk_168, this->unk_164); + this->unk_180 = func_80B9C450(play, this->switchFlag, this->unk_164); this->actionFunc = func_80B9CE64; break; @@ -304,7 +307,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { func_80B9D2BC(this, play); this->unk_178 = this->unk_174; } else { - if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) { func_80B9D4D0(this, play); } else { func_80B9D0FC(this, play); @@ -351,7 +354,7 @@ void func_80B9CE64(ObjHunsui* this, PlayState* play) { this->unk_18A += 0x71C; Math_SmoothStepToF(&this->unk_190, this->unk_194, 1.0f, 0.2f, 0.01f); - sp2C = func_80B9C450(play, this->unk_168, this->unk_164); + sp2C = func_80B9C450(play, this->switchFlag, this->unk_164); if (!(this->unk_172 & 1)) { if (sp2C != this->unk_180) { @@ -446,7 +449,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) { this->unk_172 |= 2; } - if (func_80B9C450(play, this->unk_168, this->unk_164)) { + if (func_80B9C450(play, this->switchFlag, this->unk_164)) { this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D4D0(this, play); @@ -463,7 +466,7 @@ s32 func_80B9D288(PlayState* play, Actor* thisx, Actor* iter, void* verifyData) } void func_80B9D2BC(ObjHunsui* this, PlayState* play) { - if ((this->unk_172 & 1) || func_80B9C450(play, this->unk_168, this->unk_164)) { + if ((this->unk_172 & 1) || func_80B9C450(play, this->switchFlag, this->unk_164)) { func_80B9D4D0(this, play); } else { this->unk_172 |= 2; @@ -559,7 +562,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) { this->unk_1B0 += -8.0f + (0.9f * (this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y)); } - if (!(this->unk_172 & 1) && !func_80B9C450(play, this->unk_168, this->unk_164)) { + if (!(this->unk_172 & 1) && !func_80B9C450(play, this->switchFlag, this->unk_164)) { this->csId = this->csIdList[0]; this->unk_172 |= 0x40; func_80B9D0FC(this, play); @@ -576,7 +579,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { (this->unk_16D != play->roomCtx.curRoom.num) && (this->unk_16D != play->roomCtx.prevRoom.num)) { Actor_Kill(&this->dyna.actor); } else { - if (Flags_GetSwitch(play, this->unk_168)) { + if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_172 &= ~2; this->unk_172 |= 0x10; csId = this->dyna.actor.csId; @@ -600,7 +603,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 800.0f, 0.1f, 8.0f, 1.0f) < 0.5f) { if (DECR(this->unk_16E) == 0) { - Flags_UnsetSwitch(play, this->unk_168); + Flags_UnsetSwitch(play, this->switchFlag); } } this->dyna.actor.velocity.y = this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y; diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h index 1f0450b28..a0b42a648 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h @@ -8,7 +8,7 @@ struct ObjHunsui; typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*); -#define OBJHUNSUI_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJHUNSUI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) @@ -27,7 +27,7 @@ typedef struct ObjHunsui { /* 0x15C */ ObjHunsuiActionFunc actionFunc; /* 0x160 */ s16 unk_160; /* 0x164 */ s32 unk_164; - /* 0x168 */ s32 unk_168; + /* 0x168 */ s32 switchFlag; /* 0x16C */ s8 unk_16C; /* 0x16D */ s8 unk_16D; /* 0x16E */ s8 unk_16E; diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index 9b3a08bda..8df527f37 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -81,7 +81,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { ObjIcePoly* this = THIS; s32 i; - this->unk_149 = OBJICEPOLY_GET_FF00(thisx); + this->switchFlag = OBJICEPOLY_GET_SWITCH_FLAG(thisx); thisx->params &= 0xFF; thisx->uncullZoneForward = 5600.0f; @@ -115,7 +115,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { thisx->shape.rot.x = 0x500; thisx->shape.rot.z = -0x500; - if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) || + if (((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) || ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { Actor_Kill(thisx); return; @@ -219,7 +219,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { } } while (actor != NULL); } - } else if ((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) { + } else if ((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) { CutsceneManager_Queue(this->actor.csId); this->unk_14A = 1; this->actionFunc = func_80931E58; @@ -328,8 +328,8 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) { if (this->unk_14A == 0) { CutsceneManager_Stop(this->actor.csId); - if (this->unk_149 != OBJICEPOLY_FF_FF) { - Flags_SetSwitch(play, this->unk_149); + if (this->switchFlag != 0xFF) { + Flags_SetSwitch(play, this->switchFlag); } Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h index b081a7250..3e59cd92e 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h @@ -7,15 +7,13 @@ struct ObjIcePoly; typedef void (*ObjIcePolyActionFunc)(struct ObjIcePoly*, PlayState*); -#define OBJICEPOLY_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) - -#define OBJICEPOLY_FF_FF 0xFF +#define OBJICEPOLY_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) typedef struct ObjIcePoly { /* 0x000 */ Actor actor; /* 0x144 */ ObjIcePolyActionFunc actionFunc; /* 0x148 */ u8 unk_148; - /* 0x149 */ u8 unk_149; + /* 0x149 */ u8 switchFlag; /* 0x14A */ s16 unk_14A; /* 0x14C */ ColliderCylinder colliders1[2]; /* 0x1E4 */ ColliderCylinder colliders2[2]; diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c index 1ca298f79..00f5e9957 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -46,7 +46,7 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col); - this->switchFlag = KZSAKU_GET_SWITCHFLAG(thisx); + this->switchFlag = KZSAKU_GET_SWITCH_FLAG(thisx); this->raisedAmount = 0.0f; if (Flags_GetSwitch(play, this->switchFlag)) { diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h index 0a6f00187..2af2db8ab 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h @@ -3,7 +3,7 @@ #include "global.h" -#define KZSAKU_GET_SWITCHFLAG(thisx) (((thisx)->params & 0x7F00) >> 8) +#define KZSAKU_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x7F00) >> 8) struct ObjKzsaku; diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c index 88d04b780..9e92dcb11 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -101,7 +101,7 @@ void ObjLift_Init(Actor* thisx, PlayState* play) { this->unk_178 = this->dyna.actor.home.rot.z; this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z; DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)))) { + if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { Actor_Kill(&this->dyna.actor); return; } @@ -196,7 +196,7 @@ void func_8093DA48(ObjLift* this, PlayState* play) { func_8093DB70(this); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - Flags_SetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h index b7f2af050..ae973ecbf 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h @@ -5,7 +5,7 @@ #define OBJLIFT_GET_1(thisx) ((thisx)->params & 1) #define OBJLIFT_GET_7(thisx) (((thisx)->params >> 8) & 7) -#define OBJLIFT_GET_7F(thisx) (((thisx)->params >> 1) & 0x7F) +#define OBJLIFT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 1) & 0x7F) struct ObjLift; diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index f8ee482df..90feb9634 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -93,7 +93,7 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->dyna.actor, typeVars->scale); DynaPolyActor_Init(&this->dyna, 0); Collider_InitCylinder(play, &this->collider); - if (Flags_GetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor))) { + if (Flags_GetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -152,7 +152,7 @@ void ObjLightblock_SetupPlayCutscene(ObjLightblock* this) { void ObjLightblock_PlayCutscene(ObjLightblock* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor)); + Flags_SetSwitch(play, LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(&this->dyna.actor)); ObjLightblock_SpawnEffect(this, play); ObjLightblock_SetupFadeAway(this); } else { diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h index 63a106dac..c1c1bcbb7 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h @@ -4,7 +4,7 @@ #include "global.h" #define LIGHTBLOCK_TYPE(thisx) ((thisx)->params & 1) -#define LIGHTBLOCK_DESTROYED(thisx) (((thisx)->params >> 8) & 0x7F) +#define LIGHTBLOCK_GET_DESTROYED_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) struct ObjLightblock; diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c index 39cb3abd2..1acb015ea 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -100,9 +100,9 @@ void ObjLightswitch_UpdateSwitchFlags(ObjLightswitch* this, PlayState* play, s32 if (this) {} if (set) { - Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + Flags_SetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); } else { - Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + Flags_UnsetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); } } @@ -150,7 +150,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) { u32 isSwitchActivated; s32 isTriggered; - isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor)); + isSwitchActivated = Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor)); isTriggered = false; Actor_ProcessInitChain(&this->actor, sInitChain); Actor_SetFocus(&this->actor, 0.0f); @@ -264,7 +264,7 @@ void ObjLightSwitch_Enabled(ObjLightswitch* this, PlayState* play) { if (actorType == LIGHTSWITCH_TYPE_REGULAR) { // switch can be disabled outside of this actor by flag - if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCHFLAG(&this->actor))) { + if (!Flags_GetSwitch(play, LIGHTSWITCH_GET_SWITCH_FLAG(&this->actor))) { ObjLightSwitch_SetupDisabled(this); } } else if (actorType == LIGHTSWITCH_TYPE_FLIP) { diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h index c26dab262..c81a87057 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h @@ -40,6 +40,6 @@ typedef struct ObjLightswitch { #define LIGHTSWITCH_GET_TYPE(thisx) (((thisx)->params >> 4) & 0x3) #define LIGHTSWITCH_GET_INVISIBLE(thisx) (((thisx)->params >> 3) & 1) -#define LIGHTSWITCH_GET_SWITCHFLAG(thisx) (((thisx)->params >> 8) & 0x7F) +#define LIGHTSWITCH_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #endif // Z_OBJ_LIGHTSWITCH_H diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c index da16d938f..c7605c825 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c @@ -53,7 +53,7 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) { if (!func_8099FA40(this, play)) { this->unk144 = -1; } - if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); } } @@ -62,7 +62,7 @@ void ObjMakekinsuta_Destroy(Actor* thisx, PlayState* play) { ObjMakekinsuta* this = THIS; if (func_8099FA40(this, play)) { - Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx)); + Flags_UnsetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx)); } } @@ -107,7 +107,7 @@ void func_8099FB64(Actor* thisx, PlayState* play) { void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) { ObjMakekinsuta* this = THIS; - if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) { + if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx))) { this->actor.update = func_8099FD7C; CutsceneManager_Queue(this->actor.csId); } else { diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h index 17c9220e2..6afe50e1a 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h @@ -8,7 +8,7 @@ struct ObjMakekinsuta; #define OBJMAKEKINSUTA_GET_1F(thisx) (((thisx)->params >> 8) & 0x1F) #define OBJMAKEKINSUTA_GETS_3(params) ((params & 3) & 0xFF) #define OBJMAKEKINSUTA_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF) -#define OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx) ((thisx)->params & 0x7F) +#define OBJMAKEKINSUTA_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) typedef struct ObjMakekinsuta { /* 0x000 */ Actor actor; 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 bcef92843..76ccba1b1 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -27,8 +27,8 @@ ActorInit Obj_Makeoshihiki_InitVars = { s32 ObjMakeoshihiki_GetChildSpawnPointIndex(ObjMakeoshihiki* this, PlayState* play) { s32 pad; - s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor)) ? 1 : 0; - s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor)) ? 2 : 0; + s32 pathIndexOffset1 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor)) ? 1 : 0; + s32 pathIndexOffset2 = Flags_GetSwitch(play, OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor)) ? 2 : 0; return pathIndexOffset1 + pathIndexOffset2; } @@ -39,8 +39,8 @@ void ObjMakeoshihiki_SetSwitchFlags(ObjMakeoshihiki* this, PlayState* play, s32 s32 switchFlag1; s32 switchFlag2; - switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(&this->actor); - switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(&this->actor); + switchFlag2 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(&this->actor); + switchFlag1 = OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(&this->actor); if (pathIndex & 2) { Flags_SetSwitch(play, switchFlag2); diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h index fbe8c1283..c9ae90921 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h @@ -6,8 +6,8 @@ struct ObjMakeoshihiki; #define OBJMAKEOSHIHIKI_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x7F) -#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(thisx) ((thisx)->home.rot.z & 0x7F) -#define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(thisx) ((thisx)->params & 0x7F) +#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_1(thisx) ((thisx)->home.rot.z & 0x7F) +#define OBJMAKEOSHIHIKI_GET_SWITCH_FLAG_2(thisx) ((thisx)->params & 0x7F) typedef struct ObjMakeoshihiki { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c index 10f12c64a..d894c64a6 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -134,7 +134,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { if ((*collectible != NULL) && !((this->unk164 >> i) & 1)) { if ((*collectible)->unk1A4 != 0) { - Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&this->actor)); + Flags_SetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor)); } if ((*collectible)->actor.update == NULL) { this->unk164 |= (1 << i); @@ -147,7 +147,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { void ObjMure3_Init(Actor* thisx, PlayState* play) { ObjMure3* this = THIS; - if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJMURE3_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h index 336a092b4..fb79e3440 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F) +#define OBJMURE3_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) struct ObjMure3; diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index 770f2131d..fdedd55a1 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -174,7 +174,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) { play->actorCtx.flags |= ACTORCTX_FLAG_7; } - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { return; } } @@ -209,10 +209,10 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) { Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 200.0f, this->dyna.actor.velocity.y); if (OBJNOZOKI_GET_200(&this->dyna.actor)) { - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { return; } - } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { s32 csId = this->dyna.actor.csId; if (csId == this->csId) { @@ -252,20 +252,20 @@ void func_80BA2AB4(ObjNozoki* this, PlayState* play) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_5)) { if (!(OBJNOZOKI_GET_200(&this->dyna.actor)) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { func_80BA2790(this); } } } -void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 arg3) { +void func_80BA2B64(ObjNozoki* this, PlayState* play, s32 arg2, s32 switchFlag) { this->unk_15D = arg2; this->unk_15E = 80; - Flags_UnsetSwitch(play, arg3); + Flags_UnsetSwitch(play, switchFlag); } void func_80BA2BA4(ObjNozoki* this, PlayState* play) { - if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (!Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { this->dyna.actor.shape.rot.x = -0x1F40; this->unk_15E = 80; } else if (DECR(this->unk_15E) == 0) { @@ -331,7 +331,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) { Actor_Kill(&this->dyna.actor); } } else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) && (GET_PLAYER(play)->actor.id == ACTOR_PLAYER) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) { static Vec3f D_80BA34F0 = { 0.0f, 0.0f, 50.0f }; play->actorCtx.flags |= ACTORCTX_FLAG_6; @@ -374,7 +374,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) { this->unk_15E = 20; Math_Vec3f_Copy(&this->dyna.actor.world.pos, sp1C); } else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) && - Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { sp1C = &this->dyna.actor.home.pos; } } else if (DECR(this->unk_15E) == 0) { @@ -386,7 +386,7 @@ void func_80BA3044(ObjNozoki* this, PlayState* play) { void func_80BA311C(ObjNozoki* this, PlayState* play) { if (this->unk_15D == 0) { - if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCH_FLAG1(&this->dyna.actor))) { this->unk_15D = 1; this->unk_15E = 70; } diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h index 8bfc9818e..33c97db69 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h @@ -7,11 +7,11 @@ struct ObjNozoki; typedef void (*ObjNozokiActionFunc)(struct ObjNozoki*, PlayState*); -#define OBJNOZOKI_GET_SWITCHFLAG1(thisx) ((thisx)->params & 0x7F) +#define OBJNOZOKI_GET_SWITCH_FLAG1(thisx) ((thisx)->params & 0x7F) #define OBJNOZOKI_GET_180(thisx) (((thisx)->params >> 7) & 3) #define OBJNOZOKI_GET_200(thisx) ((thisx)->params & 0x200) #define OBJNOZOKI_GET_400(thisx) ((thisx)->params & 0x400) -#define OBJNOZOKI_GET_SWITCHFLAG2(thisx) (((thisx)->params >> 9) & 0x7F) +#define OBJNOZOKI_GET_SWITCH_FLAG2(thisx) (((thisx)->params >> 9) & 0x7F) #define OBJNOZOKI_400 0x400 diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c index 736d80d10..9d49067fe 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -134,26 +134,26 @@ void ObjOshihiki_UpdateInitPos(ObjOshihiki* this) { } s32 ObjOshihiki_NoSwitchPress(ObjOshihiki* this, DynaPolyActor* dyna, PlayState* play) { - s16 dynaSwitchFlag; + s16 switchFlag; if (dyna == NULL) { return true; } if (dyna->actor.id == ACTOR_OBJ_SWITCH) { - dynaSwitchFlag = OBJSWITCH_GET_7F00(&dyna->actor); + switchFlag = OBJSWITCH_GET_7F00(&dyna->actor); switch (OBJSWITCH_GET_33(&dyna->actor)) { case OBJSWITCH_NORMAL_BLUE: - if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) && - Flags_GetSwitch(play, dynaSwitchFlag)) { + if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) && + Flags_GetSwitch(play, switchFlag)) { return false; } break; case OBJSWITCH_INVERSE_BLUE: - if ((dynaSwitchFlag == OBJOSHIHIKI_GET_7F00(&this->dyna.actor)) && - !Flags_GetSwitch(play, dynaSwitchFlag)) { + if ((switchFlag == OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor)) && + !Flags_GetSwitch(play, switchFlag)) { return false; } break; @@ -200,13 +200,16 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) { if ((OBJOSHIHIKI_GET_FF00(&this->dyna.actor) >= OBJOSHIHIKI_FF00_0) && (OBJOSHIHIKI_GET_FF00(&this->dyna.actor) < OBJOSHIHIKI_FF00_80)) { - if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJOSHIHIKI_GET_SWITCH_FLAG(&this->dyna.actor))) { switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) { case OBJOSHIHIKI_F_0: case OBJOSHIHIKI_F_1: case OBJOSHIHIKI_F_2: Actor_Kill(&this->dyna.actor); return; + + default: + break; } } else { switch (OBJOSHIHIKI_GET_F(&this->dyna.actor)) { @@ -215,6 +218,9 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) { case OBJOSHIHIKI_F_5: Actor_Kill(&this->dyna.actor); return; + + default: + break; } } } diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h index 4740b907a..6a400f2dc 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h @@ -9,7 +9,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*); #define OBJOSHIHIKI_GET_F(thisx) ((thisx)->params & 0xF) #define OBJOSHIHIKI_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -#define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJOSHIHIKI_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) typedef enum { diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index 9a0c9d1c3..e89b6cd7f 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -211,7 +211,7 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) { if (sp28 == 0) { func_809A3D1C(this); - } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor))) { + } else if (Flags_GetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor))) { if (sp2C == 0) { this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x + (sp28 * 60); func_809A3D1C(this); @@ -295,7 +295,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) { } } else { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); - Flags_SetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJPZLBLOCK_GET_SWITCH_FLAG(&this->dyna.actor)); sp20 = 1; } diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h index 5cf67efcc..a6c205fb3 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h @@ -7,7 +7,7 @@ struct ObjPzlblock; typedef void (*ObjPzlblockActionFunc)(struct ObjPzlblock*, PlayState*); -#define OBJPZLBLOCK_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJPZLBLOCK_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJPZLBLOCK_GET_700(thisx) (((thisx)->params >> 8) & 7) #define OBJPZLBLOCK_GET_1000(thisx) (((thisx)->params >> 0xC) & 1) #define OBJPZLBLOCK_GET_ROTZ(thisx) ((thisx)->home.rot.z & 7) diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c index 93845b55e..dc5e9e315 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -92,7 +92,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) { this->direction = 1; this->points = Lib_SegmentedToVirtual(path->points); ObjRaillift_UpdatePosition(this, this->curPoint); - if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) { + if (OBJRAILLIFT_HAS_FLAG(thisx) && !Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) { this->actionFunc = ObjRaillift_Idle; } else { this->actionFunc = ObjRaillift_Move; @@ -120,7 +120,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) { Vec3s* endPoint; if (OBJRAILLIFT_HAS_FLAG(thisx)) { - if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(thisx))) { + if (!Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(thisx))) { this->actionFunc = ObjRaillift_Idle; return; } @@ -196,7 +196,7 @@ void ObjRaillift_Wait(ObjRaillift* this, PlayState* play) { } void ObjRaillift_Idle(ObjRaillift* this, PlayState* play) { - if (Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJRAILLIFT_GET_SWITCH_FLAG(&this->dyna.actor))) { this->dyna.actor.speed = 0.0f; CutsceneManager_Queue(this->dyna.actor.csId); this->actionFunc = ObjRaillift_StartCutscene; diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h index dc197432f..64aa01130 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h @@ -9,7 +9,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*); #define OBJRAILLIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1) #define OBJRAILLIFT_HAS_FLAG(thisx) (((thisx)->params >> 0xD) & 1) -#define OBJRAILLIFT_GET_FLAG(thisx) ((thisx)->home.rot.x & 0x7F) +#define OBJRAILLIFT_GET_SWITCH_FLAG(thisx) ((thisx)->home.rot.x & 0x7F) #define OBJRAILLIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c index 158d8f874..1fe208ba8 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -33,7 +33,7 @@ ActorInit Obj_Roomtimer_InitVars = { void ObjRoomtimer_Init(Actor* thisx, PlayState* play) { ObjRoomtimer* this = THIS; - this->switchFlag = ROOMTIMER_GET_SWITCHFLAG(thisx); + this->switchFlag = ROOMTIMER_GET_SWITCH_FLAG(thisx); this->actor.params &= 0x1FF; if (this->actor.params != 0x1FF) { diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h index 5ce7d13d4..d976de5e3 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h @@ -3,7 +3,7 @@ #include "global.h" -#define ROOMTIMER_GET_SWITCHFLAG(thisx) (((thisx)->params >> 9) & 0x7F) +#define ROOMTIMER_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 9) & 0x7F) struct ObjRoomtimer; diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index edc780007..06de02581 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -110,7 +110,7 @@ void func_80B02CD0(ObjSnowball* this, PlayState* play) { } void func_80B02D58(ObjSnowball* this, PlayState* play) { - s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_3F(&this->actor)); + s32 temp_v0 = func_800A8150(OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor)); if (temp_v0 >= 0) { Item_DropCollectible(play, &this->actor.home.pos, (OBJSNOWBALL_GET_7F00(&this->actor) << 8) | temp_v0); @@ -443,7 +443,7 @@ void func_80B03FF8(ObjSnowball* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN); if (rotY == 5) { - Flags_SetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor)); + Flags_SetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor)); } } @@ -509,7 +509,7 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) { func_80B04338(this, play); - if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor))) { + if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_SWITCH_FLAG(&this->actor))) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h index 804c2596c..16ce58f91 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h @@ -7,7 +7,7 @@ struct ObjSnowball; typedef void (*ObjSnowballActionFunc)(struct ObjSnowball*, PlayState*); -#define OBJSNOWBALL_GET_3F(thisx) ((thisx)->params & 0x3F) +#define OBJSNOWBALL_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x3F) #define OBJSNOWBALL_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct { diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c index ff308a478..785a3ea5a 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -564,7 +564,7 @@ void ObjSpidertent_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); Collider_InitTris(play, &this->collider); - if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } @@ -681,7 +681,7 @@ void func_80B30A4C(ObjSpidertent* this, PlayState* play) { if (this->dyna.actor.csId >= 0) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } - Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor)); + Flags_SetSwitch(play, OBJSPIDERTENT_GET_SWITCH_FLAG(&this->dyna.actor)); func_80B30AD4(this); } else { CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h index 881a816a7..880921535 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h @@ -8,7 +8,7 @@ struct ObjSpidertent; typedef void (*ObjSpidertentActionFunc)(struct ObjSpidertent*, PlayState*); #define OBJSPIDERTENT_GET_1(thisx) ((thisx)->params & 1) -#define OBJSPIDERTENT_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) +#define OBJSPIDERTENT_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F) typedef struct ObjSpidertent { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 295181b8d..52652c8bb 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -250,13 +250,13 @@ Actor* ObjSwitch_SpawnIce(ObjSwitch* this, PlayState* play) { void ObjSwitch_SetSwitchFlagState(ObjSwitch* this, PlayState* play, s32 setFlag) { if (setFlag) { - s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); - Flags_SetSwitch(play, flag); + Flags_SetSwitch(play, switchFlag); } else { - s32 flag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); + s32 switchFlag = OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor); - Flags_UnsetSwitch(play, flag); + Flags_UnsetSwitch(play, switchFlag); } } diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c index 6eac0ddbc..e8389e91f 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -203,7 +203,7 @@ void ObjTaru_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); if (OBJ_TARU_GET_80(thisx)) { - if (Flags_GetSwitch(play, OBJ_TARU_GET_7F(thisx))) { + if (Flags_GetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->dyna.actor); } else { DynaPolyActor_LoadMesh(play, &this->dyna, &object_taru_Colheader_001CB0); @@ -298,7 +298,7 @@ void func_80B9C174(ObjTaru* this, PlayState* play) { void func_80B9C1A0(ObjTaru* this, PlayState* play) { if (CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); - Flags_SetSwitch(play, OBJ_TARU_GET_7F(&this->dyna.actor)); + Flags_SetSwitch(play, OBJ_TARU_GET_SWITCH_FLAG(&this->dyna.actor)); Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h index 629bc57a5..e7620f458 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h @@ -6,7 +6,7 @@ #define OBJ_TARU_GET_100(thisx) ((thisx)->params & 0x100) #define OBJ_TARU_GET_1F(thisx) ((thisx)->params & 0x1F) #define OBJ_TARU_GET_3F(thisx) ((thisx)->params & 0x3F) -#define OBJ_TARU_GET_7F(thisx) ((thisx)->params & 0x7F) +#define OBJ_TARU_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define OBJ_TARU_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJ_TARU_GET_80(thisx) ((thisx)->params & 0x80) #define OBJ_TARU_GET_8000(thisx) (((thisx)->params >> 0xF) & 1) 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 00b4e9acf..a44f2cbb1 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -41,13 +41,13 @@ void func_808A7954(ObjWturn* this) { void func_808A7968(ObjWturn* this, PlayState* play) { if ((play->msgCtx.ocarinaMode >= OCARINA_MODE_WARP_TO_GREAT_BAY_COAST) && (play->msgCtx.ocarinaMode <= OCARINA_MODE_WARP_TO_ENTRANCE)) { - Flags_UnsetSwitch(play, this->actor.params); + Flags_UnsetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)); Actor_Kill(&this->actor); return; } - if ((Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F40)) || - (!Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F41))) { + if ((Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F40)) || + (!Flags_GetSwitch(play, OBJWTURN_GET_SWITCH_FLAG(&this->actor)) && (play->sceneId == SCENE_F41))) { func_808A7A24(this); } } diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h index 2e2963d0e..9aee7e2ad 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h @@ -7,6 +7,8 @@ struct ObjWturn; typedef void (*ObjWturnActionFunc)(struct ObjWturn*, PlayState*); +#define OBJWTURN_GET_SWITCH_FLAG(thisx) ((thisx)->params) + typedef struct ObjWturn { /* 0x000 */ Actor actor; /* 0x144 */ ObjWturnActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c index f2085694a..d1b39bb24 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c @@ -96,15 +96,15 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { DREG(87) = 0; } - if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) { - Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) { + Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } else { - Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } } if (this->settleTimer == 0) { - if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) { + if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor))) { s16 csId = this->dyna.actor.csId; if (this->openTimer == 0) { @@ -125,7 +125,7 @@ void ObjY2shutter_Update(Actor* thisx, PlayState* play) { targetVelocityY = info->openVelocity; accelY = info->openAccel; if (this->openTimer < 2) { - Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor)); + Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); } else { this->openTimer--; } diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h index a1b32bbe9..8ff346f74 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h @@ -18,6 +18,6 @@ typedef enum { } ShutterType; #define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1) -#define OBJY2SHUTTER_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) +#define OBJY2SHUTTER_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #endif // Z_OBJ_Y2SHUTTER_H From 03d1a794e1fe3995ae3f4ca99e244e4b14310092 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 4 Oct 2023 22:08:08 -0700 Subject: [PATCH 48/74] z_kankyo pt 1 (#1377) * z64environment.h * remove todo * Cleanup * data + bss + 2 functions * Bring over simple functions * Remove lerp comment * code functions csv * Remove docs changes * ZBufValToFixedPoint * Remove leading 0's * SEGMENT macros * eventDayCount * format * z64bombers_notebook.h * fix merge * Comments --------- Co-authored-by: angie --- include/functions.h | 85 +- include/gfx.h | 4 +- include/segment_symbols.h | 5 + include/variables.h | 67 -- include/z64.h | 67 +- include/z64environment.h | 327 ++++++ include/z64light.h | 22 +- include/z64save.h | 2 +- spec | 2 - src/code/graph.c | 1 + src/code/sys_cfb.c | 1 + src/code/z_common_data.c | 2 +- src/code/z_demo.c | 43 +- src/code/z_game_over.c | 8 +- src/code/z_kankyo.c | 955 ++++++++++++++++-- src/code/z_lib.c | 2 +- src/code/z_lights.c | 14 +- src/code/z_parameter.c | 2 +- src/code/z_play.c | 50 +- src/code/z_room.c | 8 +- src/code/z_scene.c | 10 +- src/code/z_sram_NES.c | 6 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 12 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 4 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 20 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 8 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 22 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 4 +- src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c | 11 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 12 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 21 +- .../actors/ovl_Eff_Change/z_eff_change.c | 4 +- .../z_eff_kamejima_wave.c | 4 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 8 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 32 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 32 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 6 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 6 +- .../actors/ovl_En_Encount3/z_en_encount3.c | 8 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 30 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 36 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 2 +- src/overlays/actors/ovl_En_Hata/z_en_hata.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../z_en_invadepoh_demo.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- .../z_en_okarina_effect.c | 18 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 44 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 30 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 3 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- .../actors/ovl_En_Viewer/z_en_viewer.c | 10 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 86 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 77 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 2 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 71 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_player_actor/z_player.c | 47 +- .../z_eff_ss_lightning.c | 2 +- .../gamestates/ovl_daytelop/z_daytelop.c | 2 +- .../ovl_file_choose/z_file_choose_NES.c | 4 +- src/overlays/gamestates/ovl_select/z_select.c | 2 +- tools/disasm/functions.txt | 106 +- tools/disasm/variables.txt | 93 +- tools/namefixer.py | 77 +- tools/sizes/code_functions.csv | 104 +- 73 files changed, 1895 insertions(+), 884 deletions(-) create mode 100644 include/z64environment.h diff --git a/include/functions.h b/include/functions.h index 9f4aea656..634ce16d9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -527,89 +527,6 @@ void Font_LoadChar(PlayState* play, u16 codePointIndex, s32 offset); void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset); void Font_LoadMessageBoxEndIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); -// void func_800F5090(void); -s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); -void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2); -u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5); -f32 Environment_LerpWeight(u16 max, u16 min, u16 val); -// void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxContext* skyboxCtx); -void func_800F6834(PlayState* play, s32 waterLightsIndex); -void func_800F694C(PlayState* play); -// void func_800F6A04(void); -// void func_800F6A40(void); -// void func_800F6AB8(void); -void func_800F6B44(PlayState* play, EnvironmentContext* envCtx, s32 iParm3, s32 iParm4, s16* param_5); -// void func_800F6CEC(void); -// void func_800F6EA4(void); -// UNK_TYPE4 Kankyo_IsSceneUpsideDown(PlayState* play); -void func_800F6FF8(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx); -// void func_800F8554(void); -// void func_800F88C4(void); -// void func_800F8970(void); -// void func_800F8A9C(void); -void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx, - PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx, - GraphicsContext* gfxCtx); -// void func_800F8D84(void); -void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f pos); -void func_800F9824(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f vec, f32 arg5, f32 arg6, s8 arg7, s8 arg8); -// void func_800FA39C(void); -// void func_800FA3C4(void); -void Environment_DrawRain(PlayState* play, View* view, GraphicsContext* gfxCtx); -void func_800FAAB4(PlayState* play, u8 arg1); -// void func_800FAC20(void); -// void func_800FAF74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5); -// void func_800FB010(void); -void Environment_AddLightningBolts(PlayState* play, u8 num); -// void func_800FB388(void); -void func_800FB758(PlayState* play); -// void func_800FB9B4(void); -void Environment_DrawCustomLensFlare(PlayState* play); -void Kankyo_InitGameOverLights(PlayState* play); -void Kankyo_FadeInGameOverLights(PlayState* play); -void Kankyo_FadeOutGameOverLights(PlayState* play); -// void func_800FC3DC(void); -void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags); -void Environment_DrawSandstorm(PlayState* play, u8 sandstormState); -s32 func_800FD2B4(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4); -void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4); -void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp); -void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 zFarTarget, f32 lerp); -// u32 get_days_elapsed(void); -// void reset_days_elapsed(void); -// u32 get_current_day(void); -void func_800FD750(u16 seqId); -s32 func_800FD768(void); -void func_800FD78C(PlayState* play); -void func_800FD858(PlayState* play); -void func_800FD928(s32 param_1); -// void func_800FD980(void); -// void func_800FDAF8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_800FDC94(void); -void func_800FE390(PlayState* play); -void func_800FE3E0(PlayState* play); -void Environment_StopTime(void); -void Environment_StartTime(void); -u8 Environment_IsTimeStopped(void); -u32 func_800FE4B8(PlayState* play); -s32 func_800FE590(PlayState* play); -// void func_800FE5D0(void); -// UNK_TYPE4 func_800FE610(void); -u32 func_800FE620(PlayState* play); -void func_800FE658(f32 arg0); -// UNK_TYPE4 func_800FE6F8(UNK_TYPE4 param_1, s16 param_2, s16 param_3); -// void func_800FE778(void); -// void func_800FE788(void); -// void func_800FE798(void); -void func_800FE7A8(Color_RGBA8* inColor, Color_RGBA8* outColor); -s32 func_800FE9B4(PlayState* play); -void func_800FEA50(PlayState* play); -void func_800FEAB0(void); -// void func_800FEAC0(void); -void func_800FEAF4(EnvironmentContext* envCtx); void* Lib_MemCpy(void* dest, void* src, size_t size); void* Lib_MemSet(void* buffer, s32 value, size_t size); @@ -620,7 +537,7 @@ void Lib_PlaySfx(u16 sfxId); void Lib_PlaySfx_2(u16 sfxId); void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId); void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst); -void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); +void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); void Lib_Nop801004FC(void); void* Lib_SegmentedToVirtual(void* ptr); void* Lib_SegmentedToVirtualNull(void* ptr); diff --git a/include/gfx.h b/include/gfx.h index 790279368..63b3eadfc 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -146,8 +146,8 @@ typedef struct GraphicsContext { /* 0x2D8 */ char unk_2D8[0x2]; /* 0x2DA */ u8 updateViMode; /* 0x2DB */ u8 framebufferIndex; - /* 0x2DC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2E0 */ u32 callbackArg; + /* 0x2DC */ void (*callback)(struct GraphicsContext*, void*); + /* 0x2E0 */ void* callbackArg; /* 0x2E4 */ f32 xScale; /* 0x2E8 */ f32 yScale; /* 0x2EC */ GfxMasterList* masterList; diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 6bf163379..f2f40820a 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -32,6 +32,11 @@ #define SEGMENT_BSS_END(segment) (_ ## segment ## SegmentBssEnd) #define SEGMENT_BSS_SIZE(segment) ((uintptr_t)SEGMENT_BSS_END(segment) - (uintptr_t)SEGMENT_BSS_START(segment)) +#define ROM_FILE(name) \ + { (uintptr_t)SEGMENT_ROM_START(name), (uintptr_t)SEGMENT_ROM_END(name) } +#define ROM_FILE_UNSET \ + { 0 } + DECLARE_SEGMENT(boot) DECLARE_ROM_SEGMENT(boot) diff --git a/include/variables.h b/include/variables.h index 8a2e66960..df924135a 100644 --- a/include/variables.h +++ b/include/variables.h @@ -99,36 +99,6 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; // extern UNK_TYPE4 D_801BDAF8; extern u8 kanfontOrdering[92]; -// extern UNK_TYPE4 D_801BDB90; -// extern UNK_TYPE4 D_801BDB94; -// extern UNK_TYPE4 D_801BDB98; -// extern UNK_TYPE2 D_801BDB9C; -// extern UNK_TYPE1 D_801BDBA0; -// extern UNK_TYPE1 D_801BDBA4; -// extern UNK_TYPE1 D_801BDBA8; -extern u8 gWeatherMode; -// extern UNK_TYPE1 D_801BDBB4; -// extern UNK_TYPE1 D_801BDBB8; -// extern UNK_TYPE1 D_801BDBBC; -// extern UNK_TYPE1 D_801BDBC0; -// extern UNK_TYPE1 D_801BDBC4; -extern u8 D_801BDBC8; -// extern UNK_TYPE1 D_801BDBCC; -// extern UNK_TYPE1 D_801BDCF4; -// extern UNK_TYPE1 D_801BE38E; -// extern UNK_TYPE1 D_801BE38F; -// extern UNK_TYPE1 D_801BE390; -// extern UNK_TYPE1 D_801BE4D4; -// extern UNK_TYPE1 D_801BE4F4; -// extern UNK_TYPE1 D_801BE534; -// extern UNK_TYPE1 D_801BE6D4; -// extern UNK_TYPE1 D_801BE874; -// extern UNK_TYPE4 D_801BE894; -// extern UNK_TYPE4 D_801BE8BC; -// extern UNK_TYPE4 D_801BE8E4; -// extern UNK_TYPE1 D_801BE90C; -// extern UNK_TYPE1 D_801BE92C; -// extern UNK_TYPE1 D_801BE944; // extern actor_init_var_func sInitChainHandlers[11]; // extern UNK_TYPE4 D_801BEAD4; // extern UNK_TYPE4 D_801BEAD8; @@ -1683,43 +1653,6 @@ extern TriNorm D_801EF638; extern SaveContext gSaveContext; // extern UNK_TYPE1 D_801F4E20; -extern u8 D_801F4E30; -// extern UNK_TYPE1 D_801F4E31; -extern s8 D_801F4E32; -extern Vec3f D_801F4E38; -extern f32 D_801F4E44; -extern f32 D_801F4E48; -extern s16 D_801F4E4C; -extern s8 D_801F4E4E; -extern Vec3f D_801F4E50; -extern f32 D_801F4E5C; -extern f32 D_801F4E60; -extern s16 D_801F4E64; -extern u8 D_801F4E68; -extern f32 D_801F4E70; -// extern UNK_TYPE1 D_801F4E74; -extern u16 D_801F4E78; -extern s16 D_801F4E7A; -// extern UNK_TYPE1 D_801F4E80; -// extern UNK_TYPE1 D_801F4EE0; -// extern UNK_TYPE1 D_801F4EE8; -// extern UNK_TYPE1 D_801F4EF8; -// extern UNK_TYPE1 D_801F4F00; -// extern UNK_TYPE1 D_801F4F10; -// extern UNK_TYPE1 D_801F4F14; -// extern UNK_TYPE1 D_801F4F18; -// extern UNK_TYPE1 D_801F4F1C; -// extern UNK_TYPE1 D_801F4F20; -// extern UNK_TYPE1 D_801F4F24; -// extern UNK_TYPE1 D_801F4F28; -// extern UNK_TYPE1 D_801F4F2C; -// extern UNK_TYPE1 D_801F4F2E; -// extern UNK_TYPE1 D_801F4F30; -// extern UNK_TYPE1 D_801F4F31; -// extern UNK_TYPE1 D_801F4F32; -// extern UNK_TYPE1 D_801F4F33; -// extern UNK_TYPE1 D_801F4F34; -// extern UNK_TYPE1 D_801F4F38; // extern UNK_TYPE1 sBeatingHeartsDDPrim; // extern UNK_TYPE1 sBeatingHeartsDDEnv; // extern UNK_TYPE1 sHeartsDDPrim; diff --git a/include/z64.h b/include/z64.h index 63aec32ef..57c25047e 100644 --- a/include/z64.h +++ b/include/z64.h @@ -40,6 +40,7 @@ #include "z64dma.h" #include "z64eff_footmark.h" #include "z64effect.h" +#include "z64environment.h" #include "z64frameadvance.h" #include "z64game_over.h" #include "z64game.h" @@ -60,11 +61,13 @@ #include "z64skybox.h" #include "z64sound_source.h" #include "z64subs.h" +#include "z64rumble.h" #include "z64transition.h" #include "z64view.h" #include "regs.h" -typedef struct { + +typedef struct PauseContext { /* 0x000 */ View view; /* 0x168 */ u8* iconItemSegment; /* 0x16C */ u8* iconItem24Segment; @@ -163,68 +166,6 @@ typedef enum { /* 0x02 */ KALEID_OVL_MAX } KaleidoMgrOverlayType; -typedef struct { - /* 0x00 */ u16 unk_0; - /* 0x02 */ u16 sceneTimeSpeed; - /* 0x04 */ Vec3f sunPos; - /* 0x10 */ u8 skybox1Index; - /* 0x11 */ u8 skybox2Index; - /* 0x12 */ u8 unk_12; - /* 0x13 */ u8 skyboxBlend; - /* 0x14 */ u8 unk_14; - /* 0x15 */ u8 skyboxDisabled; - /* 0x16 */ u8 sunMoonDisabled; - /* 0x17 */ u8 skyboxConfig; - /* 0x18 */ u8 changeSkyboxNextConfig; - /* 0x19 */ u8 changeSkyboxState; - /* 0x1A */ u16 changeSkyboxTimer; - /* 0x1C */ u16 unk_1C; - /* 0x1E */ u8 lightMode; - /* 0x1F */ u8 lightConfig; - /* 0x20 */ u8 changeLightNextConfig; - /* 0x21 */ u8 changeLightEnabled; - /* 0x22 */ u16 changeLightTimer; - /* 0x24 */ u16 changeDuration; - /* 0x26 */ u8 unk_26; - /* 0x28 */ LightInfo dirLight1; // sun 1 - /* 0x36 */ LightInfo unk_36; // sun 2 - /* 0x44 */ s8 skyboxDmaState; - /* 0x48 */ DmaRequest dmaRequest; - /* 0x68 */ OSMesgQueue loadQueue; - /* 0x80 */ OSMesg loadMsg; - /* 0x84 */ f32 glareAlpha; - /* 0x88 */ f32 lensFlareAlphaScale; - /* 0x8C */ EnvLightSettings lightSettings; - /* 0xA8 */ f32 unk_A8; - /* 0xAC */ Vec3s windDir; - /* 0xB4 */ f32 windSpeed; - /* 0xB8 */ u8 numLightSettings; - /* 0xBC */ LightSettings* lightSettingsList; - /* 0xC0 */ u8 lightBlendEnabled; - /* 0xC1 */ u8 lightSetting; - /* 0xC2 */ u8 prevLightSetting; - /* 0xC3 */ u8 lightSettingOverride; - /* 0xC4 */ LightSettings unk_C4; - /* 0xDA */ u16 lightBlendRateOverride; - /* 0xDC */ f32 lightBlend; - /* 0xE0 */ u8 unk_E0; - /* 0xE1 */ u8 unk_E1; - /* 0xE2 */ s8 unk_E2; - /* 0xE3 */ u8 unk_E3; // modified by unused func in EnWeatherTag - /* 0xE4 */ u8 unk_E4; - /* 0xE5 */ u8 fillScreen; - /* 0xE6 */ u8 screenFillColor[4]; - /* 0xEA */ u8 sandstormState; - /* 0xEB */ u8 sandstormPrimA; - /* 0xEC */ u8 sandstormEnvA; - /* 0xED */ u8 unk_ED; - /* 0xEE */ u8 unk_EE[4]; - /* 0xF2 */ u8 unk_F2[8]; // [3] is used by both DemoKankyo and ObjectKankyo effect count - /* 0xFA */ u8 unk_FA[4]; -} EnvironmentContext; // size = 0x100 - -struct PlayState; - typedef struct { /* 0x0 */ u8 seqId; /* 0x1 */ u8 ambienceId; diff --git a/include/z64environment.h b/include/z64environment.h new file mode 100644 index 000000000..18e1fbf70 --- /dev/null +++ b/include/z64environment.h @@ -0,0 +1,327 @@ +#ifndef Z64ENVIRONMENT_H +#define Z64ENVIRONMENT_H + +#include "PR/ultratypes.h" +#include "PR/os_message.h" +#include "z64math.h" +#include "z64dma.h" +#include "unk.h" + +struct GameOverContext; +struct GraphicsContext; +struct LightContext; +struct MessageContext; +struct PauseContext; +struct PlayState; +struct SkyboxContext; +struct View; + +#define FILL_SCREEN_OPA (1 << 0) +#define FILL_SCREEN_XLU (1 << 1) + +#define NEXT_TIME_NONE 0xFFFF +#define NEXT_TIME_DAY CLOCK_TIME(12, 0) +#define NEXT_TIME_NIGHT CLOCK_TIME(0, 0) +#define NEXT_TIME_DAY_SET 0xFFFE +#define NEXT_TIME_NIGHT_SET 0xFFFD + +#define LIGHT_SETTING_MAX 31 +#define LIGHT_SETTING_OVERRIDE_NONE 0xFF + +// This mode disables the updating of lights in both light modes. +// With this mode enabled, the only way lights can change is via the adjustment arrays. +// This mode is not used in the original game. +#define LIGHT_SETTING_OVERRIDE_FULL_CONTROL 0xFE + +#define LIGHT_BLENDRATE_OVERRIDE_NONE 0xFFFF +#define LIGHT_BLEND_OVERRIDE_NONE 0 +#define LIGHT_BLEND_OVERRIDE_ON 1 + +// This mode disables the light system's automatic blending between +// light settings for `LIGHT_MODE_SETTINGS` (or using a light setting override). +// This is a bit of a hack used only by bosses in the original game. +#define LIGHT_BLEND_OVERRIDE_FULL_CONTROL 2 + +typedef enum { + /* 0 */ LIGHT_MODE_TIME, // environment lights use `lightConfig` and change based on time of day + /* 1 */ LIGHT_MODE_SETTINGS // environment lights use `lightSetting` +} LightMode; + +typedef enum { + /* 0 */ LIGHTNING_OFF, // no lightning + /* 1 */ LIGHTNING_ON, // request ligtning strikes at random intervals + /* 2 */ LIGHTNING_LAST // request one lightning strike before turning off +} LightningState; + +typedef enum { + /* 0 */ LIGHTNING_STRIKE_WAIT, // wait between lightning strikes. request bolts when timer hits 0 + /* 1 */ LIGHTNING_STRIKE_START, // fade in the flash. note: bolts are requested in the previous state + /* 2 */ LIGHTNING_STRIKE_END // fade out the flash and go back to wait +} LightningStrikeState; + +typedef enum { + /* 0 */ WEATHER_MODE_CLEAR, + /* 1 */ WEATHER_MODE_1, // rain? + /* 2 */ WEATHER_MODE_2, + /* 3 */ WEATHER_MODE_SNOW +} WeatherMode; + +typedef enum { + /* 0 */ CHANGE_SKYBOX_INACTIVE, + /* 1 */ CHANGE_SKYBOX_REQUESTED, + /* 2 */ CHANGE_SKYBOX_WAIT, + /* 3 */ CHANGE_SKYBOX_ACTIVE +} ChangeSkyboxState; + +typedef enum { + /* 0 */ SKYBOX_DMA_INACTIVE, + /* 1 */ SKYBOX_DMA_TEXTURE1_START, + /* 11 */ SKYBOX_DMA_TEXTURE2_START = 11 +} SkyboxDmaState; + +//! @TODO: Verify from OoT (may not be the same) +typedef enum { + /* 0 */ PRECIP_RAIN_MAX, // max number of raindrops that can draw; uses this or SOS_MAX, whichever is larger + /* 1 */ PRECIP_RAIN_CUR, // current number of rain drops being drawn on screen + /* 2 */ PRECIP_SNOW_CUR, // current number of snowflakes being drawn on screen + /* 3 */ PRECIP_SNOW_MAX, // max number of snowflakes that can draw + /* 4 */ PRECIP_SOS_MAX, // max number of rain drops requested from song of storms specifically + /* 5 */ PRECIP_MAX +} PrecipitationData; + +typedef enum { + /* 0 */ STORM_REQUEST_NONE, + /* 1 */ STORM_REQUEST_START, + /* 2 */ STORM_REQUEST_STOP +} StormRequest; + +typedef enum { + /* 0 */ STORM_STATE_OFF, + /* 1 */ STORM_STATE_ON +} StormState; + +typedef enum { + /* 0x00 */ TIMESEQ_DAY_BGM, + /* 0x01 */ TIMESEQ_FADE_DAY_BGM, + /* 0x02 */ TIMESEQ_NIGHT_BEGIN_SFX, + /* 0x03 */ TIMESEQ_EARLY_NIGHT_CRITTERS, + /* 0x04 */ TIMESEQ_NIGHT_DELAY, + /* 0x05 */ TIMESEQ_NIGHT_CRITTERS, + /* 0x06 */ TIMESEQ_DAY_BEGIN_SFX, + /* 0x07 */ TIMESEQ_MORNING_CRITTERS, + /* 0x08 */ TIMESEQ_DAY_DELAY, + /* 0xFE */ TIMESEQ_REQUEST = 0xFE, + /* 0xFF */ TIMESEQ_DISABLED +} TimeBasedSeqState; + +#define SCENESEQ_DEFAULT 0 +#define SCENESEQ_MORNING 0xFE + +typedef enum { + /* 0x0 */ SANDSTORM_OFF, + /* 0x1 */ SANDSTORM_FILL, + /* 0x2 */ SANDSTORM_UNFILL, + /* 0x3 */ SANDSTORM_ACTIVE, + /* 0x4 */ SANDSTORM_DISSIPATE, + /* 0x5 */ SANDSTORM_5, + /* 0x6 */ SANDSTORM_6, + /* 0x7 */ SANDSTORM_7, + /* 0x8 */ SANDSTORM_8, + /* 0x9 */ SANDSTORM_9, + /* 0xA */ SANDSTORM_A, + /* 0xB */ SANDSTORM_B, + /* 0xC */ SANDSTORM_C, + /* 0xD */ SANDSTORM_D +} SandstormState; + +typedef struct LightningStrike { + /* 0x00 */ u8 state; + /* 0x01 */ u8 flashRed; + /* 0x02 */ u8 flashGreen; + /* 0x03 */ u8 flashBlue; + /* 0x04 */ u8 flashAlphaTarget; + /* 0x08 */ f32 delayTimer; +} LightningStrike; // size = 0xC + +typedef struct { + /* 0x0 */ u16 startTime; + /* 0x2 */ u16 endTime; + /* 0x4 */ u8 skybox1Index; + /* 0x5 */ u8 skybox2Index; + /* 0x6 */ u8 color1Index; + /* 0x7 */ u8 color2Index; +} TimeBasedSkyboxEntry; // size = 0x8 + +#define ENV_FOGNEAR_MAX 996 +#define ENV_ZFAR_MAX 15000 + +typedef struct { + /* 0x00 */ u8 ambientColor[3]; + /* 0x03 */ s8 light1Dir[3]; + /* 0x06 */ u8 light1Color[3]; + /* 0x09 */ s8 light2Dir[3]; + /* 0x0C */ u8 light2Color[3]; + /* 0x0F */ u8 fogColor[3]; + /* 0x12 */ s16 fogNear; // ranges from 0-1000 (0: starts immediately, 1000: no fog), but is clamped to ENV_FOGNEAR_MAX + /* 0x14 */ s16 zFar; // Max depth (render distance) of the view as a whole. fogFar will always match zFar +} CurrentEnvLightSettings; // size = 0x16 + +// `EnvLightSettings` is very similar to `CurrentEnvLightSettings` with one key difference. +// The light settings data in the scene packs blend rate information with the fog near value. +// The blendRate determines how fast the current light settings fade to the next one +// (under LIGHT_MODE_SETTINGS, otherwise unused). + +// Get blend rate from `EnvLightSettings.blendRateAndFogNear` in 0-255 range +#define ENV_LIGHT_SETTINGS_BLEND_RATE_U8(blendRateAndFogNear) (((blendRateAndFogNear) >> 10) * 4) +#define ENV_LIGHT_SETTINGS_FOG_NEAR(blendRateAndFogNear) ((blendRateAndFogNear) & 0x3FF) + +typedef struct { + /* 0x00 */ u8 ambientColor[3]; + /* 0x03 */ s8 light1Dir[3]; + /* 0x06 */ u8 light1Color[3]; + /* 0x09 */ s8 light2Dir[3]; + /* 0x0C */ u8 light2Color[3]; + /* 0x0F */ u8 fogColor[3]; + /* 0x12 */ s16 blendRateAndFogNear; + /* 0x14 */ s16 zFar; +} EnvLightSettings; // size = 0x16 + +// ZAPD compatibility typedefs +// TODO: Remove when ZAPD adds support for them +typedef CurrentEnvLightSettings LightSettings; + +typedef struct EnvironmentContext { + /* 0x00 */ u16 unk_0; + /* 0x02 */ u16 sceneTimeSpeed; + /* 0x04 */ Vec3f sunPos; + /* 0x10 */ u8 skybox1Index; + /* 0x11 */ u8 skybox2Index; + /* 0x12 */ u8 unk_12; + /* 0x13 */ u8 skyboxBlend; + /* 0x14 */ u8 unk_14; + /* 0x15 */ u8 skyboxDisabled; + /* 0x16 */ u8 sunDisabled; + /* 0x17 */ u8 skyboxConfig; + /* 0x18 */ u8 changeSkyboxNextConfig; + /* 0x19 */ u8 changeSkyboxState; + /* 0x1A */ u16 changeSkyboxTimer; + /* 0x1C */ u16 unk_1C; + /* 0x1E */ u8 lightMode; + /* 0x1F */ u8 lightConfig; + /* 0x20 */ u8 changeLightNextConfig; + /* 0x21 */ u8 changeLightEnabled; + /* 0x22 */ u16 changeLightTimer; + /* 0x24 */ u16 changeDuration; + /* 0x26 */ u8 unk_26; + /* 0x28 */ LightInfo dirLight1; // sun 1 + /* 0x36 */ LightInfo dirLight2; // sun 2 + /* 0x44 */ s8 skyboxDmaState; + /* 0x48 */ DmaRequest dmaRequest; + /* 0x68 */ OSMesgQueue loadQueue; + /* 0x80 */ OSMesg loadMsg[1]; + /* 0x84 */ f32 glareAlpha; + /* 0x88 */ f32 lensFlareAlphaScale; + /* 0x8C */ AdjLightSettings adjLightSettings; + /* 0xA8 */ f32 unk_A8; + /* 0xAC */ Vec3s windDirection; + /* 0xB4 */ f32 windSpeed; + /* 0xB8 */ u8 numLightSettings; + /* 0xBC */ EnvLightSettings* lightSettingsList; // list of light settings from the scene file + /* 0xC0 */ u8 lightBlendEnabled; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xC1 */ u8 lightSetting; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xC2 */ u8 prevLightSetting; + /* 0xC3 */ u8 lightSettingOverride; + /* 0xC4 */ CurrentEnvLightSettings lightSettings; // settings for the currently "live" lights + /* 0xDA */ u16 lightBlendRateOverride; + /* 0xDC */ f32 lightBlend; + /* 0xE0 */ u8 lightBlendOverride; + /* 0xE1 */ u8 stormRequest; + /* 0xE2 */ u8 stormState; + /* 0xE3 */ u8 lightningState; // modified by unused func in EnWeatherTag + /* 0xE4 */ u8 timeSeqState; + /* 0xE5 */ u8 fillScreen; + /* 0xE6 */ u8 screenFillColor[4]; + /* 0xEA */ u8 sandstormState; + /* 0xEB */ u8 sandstormPrimA; + /* 0xEC */ u8 sandstormEnvA; + /* 0xED */ u8 customSkyboxFilter; + /* 0xEE */ u8 skyboxFilterColor[4]; + /* 0xF2 */ u8 precipitation[PRECIP_MAX]; + /* 0xF7 */ UNK_TYPE1 unk_FA[9]; +} EnvironmentContext; // size = 0x100 + +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); +void Environment_Init(struct PlayState* play2, EnvironmentContext* envCtx, s32 arg2); +u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep); +f32 Environment_LerpWeight(u16 max, u16 min, u16 val); +f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration); +void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, struct SkyboxContext* skyboxCtx); +void Environment_EnableUnderwaterLights(struct PlayState* play, s32 waterLightsIndex); +void Environment_DisableUnderwaterLights(struct PlayState* play); +void Environment_Update(struct PlayState* play, EnvironmentContext* envCtx, struct LightContext* lightCtx, + struct PauseContext* pauseCtx, struct MessageContext* msgCtx, struct GameOverContext* gameOverCtx, + struct GraphicsContext* gfxCtx); +void Environment_DrawSunLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f vec); +void Environment_DrawLensFlare(struct PlayState* play, EnvironmentContext* envCtx, struct View* view, struct GraphicsContext* gfxCtx, Vec3f pos, f32 scale, f32 colorIntensity, s16 glareStrength, u8 isSun); +void Environment_DrawRain(struct PlayState* play, struct View* view, struct GraphicsContext* gfxCtx); +void Environment_ChangeLightSetting(struct PlayState* play, u8 lightSetting); +void Environment_AddLightningBolts(struct PlayState* play, u8 num); +void Environment_PlaySceneSequence(struct PlayState* play); +void Environment_DrawCustomLensFlare(struct PlayState* play); +void Environment_InitGameOverLights(struct PlayState* play); +void Environment_FadeInGameOverLights(struct PlayState* play); +void Environment_FadeOutGameOverLights(struct PlayState* play); +void Environment_FillScreen(struct GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags); +void Environment_DrawSandstorm(struct PlayState* play, u8 sandstormState); +s32 Environment_AdjustLights(struct PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4); +void Environment_LerpAmbientColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpDiffuseColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpFogColor(struct PlayState* play, Color_RGB8* to, f32 lerp); +void Environment_LerpFog(struct PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp); +void Environment_ForcePlaySequence(u16 seqId); +s32 Environment_IsForcedSequenceDisabled(void); +void Environment_PlayStormNatureAmbience(struct PlayState* play); +void Environment_StopStormNatureAmbience(struct PlayState* play); +void Environment_Draw(struct PlayState* play); +void Environment_DrawSkyboxStars(struct PlayState* play); +void Environment_StopTime(void); +void Environment_StartTime(void); +u8 Environment_IsTimeStopped(void); +u32 Environment_GetStormState(struct PlayState* play); +u8 Environment_IsFinalHours(struct PlayState* play); +u16 Environment_GetTimeSpeed(struct PlayState* play); +void Environment_SetTimeJump(f32 minutes); +u8 func_800FE6F8(struct PlayState* play, s16 timeAdvanceScaling, s16 nextTimeLimit); +void Environment_LerpSandstormColors(Color_RGBA8* colorSrc, Color_RGBA8* colorDst); +u8 func_800FE9B4(struct PlayState* play); +void func_800FEA50(struct PlayState* play); +void func_800FEAB0(void); +void func_800FEAF4(EnvironmentContext* envCtx); + +// Data +extern u8 gWeatherMode; +extern u8 gLightConfigAfterUnderwater; +extern u8 gInterruptSongOfStorms; +extern u8 gSceneSeqState; + +// Bss +extern u8 D_801F4E30; + +extern u8 gCustomLensFlare1On; +extern Vec3f gCustomLensFlare1Pos; +extern f32 D_801F4E44; +extern f32 D_801F4E48; +extern s16 D_801F4E4C; + +extern u8 gCustomLensFlare2On; +extern Vec3f gCustomLensFlare2Pos; +extern f32 D_801F4E5C; +extern f32 D_801F4E60; +extern s16 D_801F4E64; + +extern struct LightningStrike gLightningStrike; +extern f32 D_801F4E74; +extern u16 D_801F4E78; +extern u16 gSkyboxNumStars; + +#endif diff --git a/include/z64light.h b/include/z64light.h index 706df2f4d..21b1920c3 100644 --- a/include/z64light.h +++ b/include/z64light.h @@ -8,26 +8,14 @@ struct PlayState; - -typedef struct { - /* 0x00 */ u8 ambientColor[3]; - /* 0x03 */ s8 diffuseDir1[3]; - /* 0x06 */ u8 diffuseColor1[3]; - /* 0x09 */ s8 diffusePos2[3]; - /* 0x0C */ u8 diffuseColor[3]; - /* 0x0F */ u8 fogColor[3]; - /* 0x12 */ s16 fogNear; - /* 0x14 */ s16 zFar; -} LightSettings; // size = 0x16 - typedef struct { /* 0x00 */ s16 ambientColor[3]; - /* 0x06 */ s16 diffuseColor1[3]; - /* 0x0C */ s16 diffuseColor2[3]; + /* 0x06 */ s16 light1Color[3]; + /* 0x0C */ s16 light2Color[3]; /* 0x12 */ s16 fogColor[3]; /* 0x18 */ s16 fogNear; /* 0x1A */ s16 zFar; -} EnvLightSettings; // size = 0x1C +} AdjLightSettings; // size = 0x1C typedef struct { /* 0x0 */ s16 x; @@ -77,8 +65,8 @@ typedef struct LightsBuffer { typedef struct LightContext { /* 0x0 */ LightNode* listHead; - /* 0x4 */ Color_RGB8 ambient; - /* 0x7 */ Color_RGB8 fogColor; + /* 0x4 */ u8 ambientColor[3]; + /* 0x7 */ u8 fogColor[3]; /* 0xA */ s16 fogNear; // how close until fog starts taking effect. range 0 - 996 /* 0xC */ s16 zFar; // draw distance. range 0 - 12800 } LightContext; // size = 0x10 diff --git a/include/z64save.h b/include/z64save.h index e22b2c58f..333953a76 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -327,7 +327,7 @@ typedef struct Save { /* 0x10 */ s32 isNight; // "asahiru_fg" /* 0x14 */ s32 timeSpeedOffset; // "change_zelda_time" /* 0x18 */ s32 day; // "totalday" - /* 0x1C */ s32 daysElapsed; // "eventday" + /* 0x1C */ s32 eventDayCount; // "eventday" /* 0x20 */ u8 playerForm; // "player_character" /* 0x21 */ u8 snowheadCleared; // "spring_flag" /* 0x22 */ u8 hasTatl; // "bell_flag" diff --git a/spec b/spec index dcd055a6f..339a701c8 100644 --- a/spec +++ b/spec @@ -476,8 +476,6 @@ beginseg include "build/src/code/z_kaleido_setup.o" include "build/src/code/z_kanfont.o" include "build/src/code/z_kankyo.o" - include "build/data/code/z_kankyo.data.o" - include "build/data/code/z_kankyo.bss.o" include "build/src/code/z_lib.o" include "build/src/code/z_lifemeter.o" include "build/src/code/z_lights.o" diff --git a/src/code/graph.c b/src/code/graph.c index ad4ad0286..3a178d2b8 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 383a35cc9..32600643a 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 976b0fd4d..f0805c46b 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -12,7 +12,7 @@ void SaveContext_Init(void) { gSaveContext.nextCutsceneIndex = 0xFFEF; gSaveContext.cutsceneTrigger = 0; gSaveContext.chamberCutsceneNum = 0; - gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.nextDayTime = NEXT_TIME_NONE; gSaveContext.skyboxTime = 0; gSaveContext.dogIsLost = true; gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 11d614fc1..300a3c20f 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,6 +1,4 @@ #include "PR/ultratypes.h" -#include "prevent_bss_reordering.h" -#include "prevent_bss_reordering2.h" // Variables are put before most headers as a hacky way to bypass bss reordering struct CutsceneCamera; @@ -13,6 +11,15 @@ static s16 sBssPad; u8 gDisablePlayerCsModeStartPos; s16 gDungeonBossWarpSceneId; +#include "prevent_bss_reordering.h" +#include "prevent_bss_reordering2.h" +// clang-format off +// Partial structs taken from "prevent_bss_reordering.h" +struct Dummy200 { int x; }; +struct Dummy201 { int x; }; +struct Dummy202 { int x; }; +// clang-format on + #include "global.h" #include "z64quake.h" #include "z64rumble.h" @@ -154,8 +161,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { switch (cmd->type) { case CS_MISC_RAIN: if (isFirstFrame) { - func_800FD78C(play); - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; } break; @@ -163,19 +170,19 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { if (isFirstFrame) { Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0); Environment_AddLightningBolts(play, 3); - D_801F4E68 = 1; + gLightningStrike.state = LIGHTNING_STRIKE_START; } break; case CS_MISC_LIFT_FOG: - if (play->envCtx.lightSettings.zFar < 12800) { - play->envCtx.lightSettings.zFar += 35; + if (play->envCtx.adjLightSettings.zFar < 12800) { + play->envCtx.adjLightSettings.zFar += 35; } break; case CS_MISC_CLOUDY_SKY: if (isFirstFrame) { - play->envCtx.changeSkyboxState = 1; + play->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED; play->envCtx.skyboxConfig = 1; play->envCtx.changeSkyboxNextConfig = 0; play->envCtx.changeSkyboxTimer = 60; @@ -238,16 +245,16 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_RED_PULSATING_LIGHTS: if (play->state.frames & 8) { - if (play->envCtx.lightSettings.ambientColor[0] < 40) { - play->envCtx.lightSettings.ambientColor[0] += 2; - play->envCtx.lightSettings.diffuseColor1[1] -= 3; - play->envCtx.lightSettings.diffuseColor1[2] -= 3; + if (play->envCtx.adjLightSettings.ambientColor[0] < 40) { + play->envCtx.adjLightSettings.ambientColor[0] += 2; + play->envCtx.adjLightSettings.light1Color[1] -= 3; + play->envCtx.adjLightSettings.light1Color[2] -= 3; } } else { - if (play->envCtx.lightSettings.ambientColor[0] > 2) { - play->envCtx.lightSettings.ambientColor[0] -= 2; - play->envCtx.lightSettings.diffuseColor1[1] += 3; - play->envCtx.lightSettings.diffuseColor1[2] += 3; + if (play->envCtx.adjLightSettings.ambientColor[0] > 2) { + play->envCtx.adjLightSettings.ambientColor[0] -= 2; + play->envCtx.adjLightSettings.light1Color[1] += 3; + play->envCtx.adjLightSettings.light1Color[2] += 3; } } break; @@ -262,7 +269,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_SANDSTORM_FILL: if (isFirstFrame) { - play->envCtx.sandstormState = 1; + play->envCtx.sandstormState = SANDSTORM_FILL; } Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG); break; @@ -409,7 +416,7 @@ void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdL play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1; play->envCtx.lightBlend = 1.0f; } else { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } } } diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index c3c6819be..003f5dd7b 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -15,7 +15,7 @@ void GameOver_FadeLights(PlayState* play) { if ((gameOverCtx->state >= GAMEOVER_DEATH_WAIT_GROUND && gameOverCtx->state < GAMEOVER_REVIVE_START) || (gameOverCtx->state >= GAMEOVER_REVIVE_RUMBLE && gameOverCtx->state < GAMEOVER_REVIVE_FADE_OUT)) { - Kankyo_FadeInGameOverLights(play); + Environment_FadeInGameOverLights(play); } } @@ -66,7 +66,7 @@ void GameOver_Update(PlayState* play) { gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; gSaveContext.hudVisibilityTimer = 0; - Kankyo_InitGameOverLights(play); + Environment_InitGameOverLights(play); sGameOverTimer = 20; Rumble_Request(0.0f, 126, 124, 63); gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND; @@ -92,7 +92,7 @@ void GameOver_Update(PlayState* play) { case GAMEOVER_REVIVE_START: gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE sGameOverTimer = 0; - Kankyo_InitGameOverLights(play); + Environment_InitGameOverLights(play); ShrinkWindow_Letterbox_SetSizeTarget(32); break; @@ -119,7 +119,7 @@ void GameOver_Update(PlayState* play) { break; case GAMEOVER_REVIVE_FADE_OUT: - Kankyo_FadeOutGameOverLights(play); + Environment_FadeOutGameOverLights(play); sGameOverTimer--; if (sGameOverTimer == 0) { gameOverCtx->state = GAMEOVER_INACTIVE; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 9346af59a..30ea04e16 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -1,156 +1,980 @@ +#include "ultra64.h" +#include "z64light.h" +#include "z64math.h" + +typedef struct { + /* 0x00 */ u8 state; + /* 0x04 */ Vec3f offset; + /* 0x10 */ Vec3f pos; + /* 0x1C */ s8 pitch; + /* 0x1D */ s8 roll; + /* 0x1E */ u8 textureIndex; + /* 0x1F */ u8 delayTimer; +} LightningBolt; // size = 0x20 + +// Variables are put before most headers as a hacky way to bypass bss reordering +struct LightningStrike; + +u8 D_801F4E30; +u8 D_801F4E31; +u8 gCustomLensFlare1On; +Vec3f gCustomLensFlare1Pos; +f32 D_801F4E44; +f32 D_801F4E48; +s16 D_801F4E4C; +u8 gCustomLensFlare2On; +Vec3f gCustomLensFlare2Pos; +f32 D_801F4E5C; +f32 D_801F4E60; +s16 D_801F4E64; +struct LightningStrike gLightningStrike; +f32 D_801F4E74; +u16 D_801F4E78; +u16 gSkyboxNumStars; +LightningBolt sLightningBolts[3]; +LightNode* sNGameOverLightNode; +LightInfo sNGameOverLightInfo; +LightNode* sSGameOverLightNode; +LightInfo sSGameOverLightInfo; +f32 sSunEnvAlpha; +f32 sSunColor; +f32 sSunScale; +f32 sSunPrimAlpha; +s32 sSunDepthTestX; +s32 sSunDepthTestY; +f32 D_801F4F28; +s16 sLightningFlashAlpha; +u16 sSandstormScroll; +u8 D_801F4F30; +u8 D_801F4F31; +u8 sEnvIsTimeStopped; +u8 D_801F4F33; +u8 sGameOverLightsIntensity; +Gfx* sSkyboxStarsDList; + +#include "z64environment.h" #include "global.h" +#include "sys_cfb.h" +#include "objects/gameplay_keep/gameplay_keep.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s") +// Data +f32 sSandstormLerpScale = 0.0f; +s32 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0); +s32 sEnvSkyboxNumStars = 0; +u16 sTimeJump = 0; +u8 sSandstormColorIndex = 0; +u8 sNextSandstormColorIndex = 0; +u8 D_801BDBA8 = 0; +u8 D_801BDBAC = 0; +u8 gWeatherMode = WEATHER_MODE_CLEAR; +u8 gLightConfigAfterUnderwater = 0; +u8 gInterruptSongOfStorms = false; +u8 sSkyboxIsChanging = false; +u8 D_801BDBC0 = 0; +u8 D_801BDBC4 = 0; +u8 gSceneSeqState = SCENESEQ_DEFAULT; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s") +typedef struct { + /* 0x0 */ u16 startTime; + /* 0x2 */ u16 endTime; + /* 0x4 */ u8 lightSetting; + /* 0x5 */ u8 nextLightSetting; +} TimeBasedLightEntry; // size = 0x6 + +TimeBasedLightEntry sTimeBasedLightConfigs[][7] = { + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 3, 3 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 3, 12 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 2 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 2, 3 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 3, 3 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 7, 7 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 7, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 4, 5 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 5, 5 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 5, 6 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 6, 7 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 7, 7 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 11, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 8, 9 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 9, 9 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 9, 10 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 10, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 15, 15 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 15, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 12, 13 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 13, 13 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 13, 14 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 14, 15 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 15, 15 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 19, 19 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 19, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 16, 17 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 17, 17 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 17, 18 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 18, 19 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 19, 19 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 23, 23 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 23, 20 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 20, 21 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 21, 21 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 21, 22 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 22, 23 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 23, 23 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 27, 27 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 27, 24 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 24, 25 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 25, 25 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 25, 26 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 26, 27 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 27, 27 }, + }, +}; + +TimeBasedSkyboxEntry sTimeBasedSkyboxConfigs[][9] = { + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 3, 3 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 3, 4 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 4, 4 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 0, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 2 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 2, 2 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 2, 3 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 3, 3 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 7, 7 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 7, 8 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 8, 8 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 4, 5 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 5, 5 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 5, 6 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 6, 6 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 6, 7 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 7, 7 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 11, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 8, 9 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 9, 9 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 9, 10 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 10, 10 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 10, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 15, 15 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 15, 16 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 16, 16 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 12, 13 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 13, 13 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 13, 14 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 14, 14 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 14, 15 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 15, 15 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 19, 19 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 19, 20 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 20, 20 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 16, 17 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 17, 17 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 17, 18 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 18, 18 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 18, 19 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 19, 19 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 23, 23 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 23, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 20, 21 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 21, 21 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 21, 22 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 22, 22 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 22, 23 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 23, 23 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 27, 27 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 27, 28 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 28, 28 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 24, 25 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 25, 25 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 25, 26 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 26, 26 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 26, 27 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 27, 27 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 31, 31 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 31, 32 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 32, 32 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 28, 29 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 29, 29 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 29, 30 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 30, 30 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 30, 31 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 31, 31 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 35, 35 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 35, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 32, 33 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 33, 33 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 33, 34 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 34, 34 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 34, 35 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 35, 35 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 39, 39 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 39, 40 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 40, 40 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 36, 37 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 37, 37 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 37, 38 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 38, 38 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 38, 39 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 39, 39 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 43, 43 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 43, 44 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 44, 44 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 40, 41 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 41, 41 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 41, 42 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 42, 42 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 42, 43 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 43, 43 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 47, 47 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 47, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 44, 45 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 45, 45 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 45, 46 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 46, 46 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 46, 47 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 47, 47 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 51, 51 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 51, 48 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 48, 49 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 49, 49 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 49, 49 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 49, 50 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 50, 50 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 50, 51 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 51, 51 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 55, 55 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 55, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 52, 53 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 53, 53 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 53, 54 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 54, 54 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 54, 54 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 55, 55 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 59, 59 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 59, 56 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 56, 56 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 56, 57 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 57, 57 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 57, 58 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 58, 58 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 58, 58 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 59, 59 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 63, 63 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 63, 60 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 60, 60 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 60, 61 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 61, 61 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 61, 62 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 62, 62 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 62, 62 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 63, 63 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 67, 67 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 67, 64 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 64, 64 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 64, 65 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 65, 65 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 65, 66 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 66, 66 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 66, 66 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 67, 67 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 1, 1 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 1, 1 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 71, 71 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 71, 72 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 72, 72 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 68, 69 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 69, 69 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 69, 70 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 70, 70 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 70, 71 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 71, 71 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 75, 75 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 75, 76 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 76, 76 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 72, 73 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 73, 73 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 73, 74 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 74, 74 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 74, 75 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 75, 75 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 79, 79 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 79, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 76, 77 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 77, 77 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 77, 78 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 78, 78 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 78, 79 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 79, 79 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 83, 83 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 83, 84 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 84, 84 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 80, 81 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 81, 81 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 81, 82 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 82, 82 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 82, 83 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 83, 83 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 87, 87 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 87, 88 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 88, 88 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 84, 85 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 85, 85 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 85, 86 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 86, 86 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 86, 87 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 87, 87 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 91, 91 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 91, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 88, 89 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 89, 89 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 89, 90 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 90, 90 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 90, 91 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 91, 91 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 11, 11 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 95, 95 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 95, 96 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 96, 96 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 92, 93 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 93, 93 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 93, 94 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 94, 94 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 94, 95 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 95, 95 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 99, 99 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 99, 100 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 100, 100 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 96, 97 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 97, 97 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 97, 98 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 98, 98 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 98, 99 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 99, 99 }, + }, + { + { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 103, 103 }, + { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 103, 52 }, + { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 }, + { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 100, 101 }, + { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 101, 101 }, + { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 101, 102 }, + { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 102, 102 }, + { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 102, 103 }, + { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 103, 103 }, + }, +}; + +typedef struct { + /* 0x0 */ RomFile file; + /* 0x8 */ RomFile palette; +} SkyboxFile; // size = 0x10 + +SkyboxFile sNormalSkyFiles[] = { + { + ROM_FILE(d2_fine_static), + ROM_FILE_UNSET, + }, + { + ROM_FILE(d2_cloud_static), + ROM_FILE_UNSET, + }, +}; + +void Environment_GraphCallback(GraphicsContext* gfxCtx, void* arg) { + PlayState* play = (PlayState*)arg; + + sSunScreenDepth = SysCfb_GetZBufferPixel(sSunDepthTestX, sSunDepthTestY); + Lights_GlowCheck(play); +} + +typedef struct { + /* 0x0 */ s32 mantissaShift; // shift applied to the mantissa of the z buffer value + /* 0x4 */ s32 base; // 15.3 fixed-point base value for the exponent +} ZBufValConversionEntry; // size = 0x8 + +ZBufValConversionEntry sZBufValConversionTable[1 << 3] = { + { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 }, + { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 }, +}; + +#define ZBUFVAL_EXPONENT(v) (((v) >> 15) & 7) +#define ZBUFVAL_MANTISSA(v) (((v) >> 4) & 0x7FF) + +/** + * Convert an 18-bits Z buffer value to a fixed point 15.3 value + * + * zBufferVal is 18 bits: + * 3: Exponent of z value + * 11: Mantissa of z value + * 4: dz value (unused) + */ +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal) { + // base[exp] + mantissa << shift[exp] + s32 ret = (ZBUFVAL_MANTISSA(zBufferVal) << sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].mantissaShift) + + sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].base; + + return ret; +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s") +u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep) { + s16 stepSize = 0; + s16 diff = target - *pvalue; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s") + if (target != *pvalue) { + stepSize = diff / scale; + if ((stepSize >= (s16)minStep) || ((s16)-minStep >= stepSize)) { + if ((s16)step < stepSize) { + stepSize = step; + } + if ((s16)-step > stepSize) { + stepSize = -step; + } + *pvalue += (u8)stepSize; + } else { + if (stepSize < (s16)minStep) { + stepSize = minStep; + *pvalue += (u8)stepSize; + if (target < *pvalue) { + *pvalue = target; + } + } + if ((s16)-minStep < stepSize) { + stepSize = -minStep; + *pvalue += (u8)stepSize; + if (*pvalue < target) { + *pvalue = target; + } + } + } + } + return diff; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s") +f32 Environment_LerpWeight(u16 max, u16 min, u16 val) { + f32 diff = max - min; + + if (diff != 0.0f) { + f32 ret = 1.0f - (max - val) / diff; + + if (!(ret >= 1.0f)) { + return ret; + } + } + + return 1.0f; +} + +f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration) { + f32 endFrameF; + f32 startFrameF; + f32 curFrameF; + f32 accelDurationF; + f32 decelDurationF; + f32 totalFrames; + f32 temp; + f32 framesElapsed; + f32 ret; + + if (curFrame <= startFrame) { + return 0.0f; + } + + if (curFrame >= endFrame) { + return 1.0f; + } + + endFrameF = (s32)endFrame; + startFrameF = (s32)startFrame; + curFrameF = (s32)curFrame; + totalFrames = endFrameF - startFrameF; + framesElapsed = curFrameF - startFrameF; + accelDurationF = (s32)accelDuration; + decelDurationF = (s32)decelDuration; + + if ((startFrameF >= endFrameF) || (accelDurationF + decelDurationF > totalFrames)) { + return 0.0f; + } + + temp = 1.0f / ((totalFrames * 2.0f) - accelDurationF - decelDurationF); + + if (accelDurationF != 0.0f) { + if (framesElapsed <= accelDurationF) { + return temp * framesElapsed * framesElapsed / accelDurationF; + } + ret = temp * accelDurationF; + } else { + ret = 0.0f; + } + + if (framesElapsed <= totalFrames - decelDurationF) { + ret += 2.0f * temp * (framesElapsed - accelDurationF); + return ret; + } + + ret += 2.0f * temp * (totalFrames - accelDurationF - decelDurationF); + + if (decelDurationF != 0.0f) { + ret += temp * decelDurationF; + if (framesElapsed < totalFrames) { + ret -= temp * (totalFrames - framesElapsed) * (totalFrames - framesElapsed) / decelDurationF; + } + } + + return ret; +} + +Color_RGBA8 sSkyboxPrimColors[] = { + { 181, 100, 72, 0 }, { 255, 255, 255, 0 }, { 255, 164, 63, 0 }, { 70, 90, 100, 0 }, { 180, 110, 70, 0 }, + { 140, 120, 90, 0 }, { 186, 107, 70, 0 }, { 50, 90, 120, 0 }, { 160, 104, 125, 0 }, { 225, 234, 150, 0 }, + { 243, 84, 33, 0 }, { 112, 37, 55, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, + { 10, 40, 90, 0 }, { 180, 120, 100, 0 }, { 140, 120, 110, 0 }, { 186, 107, 70, 0 }, { 0, 50, 60, 0 }, + { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 25, 45, 0 }, { 181, 100, 27, 0 }, + { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 10, 10, 50, 0 }, { 165, 110, 63, 0 }, { 150, 120, 90, 0 }, + { 166, 112, 65, 0 }, { 10, 40, 60, 0 }, { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, + { 100, 20, 40, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 0, 50, 70, 0 }, + { 180, 126, 70, 0 }, { 150, 140, 120, 0 }, { 225, 164, 63, 0 }, { 0, 70, 80, 0 }, { 160, 104, 215, 0 }, + { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 40, 65, 0 }, { 105, 72, 57, 0 }, { 150, 120, 90, 0 }, + { 80, 56, 21, 0 }, { 60, 46, 40, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, + { 210, 120, 180, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, + { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 25, 53, 235, 0 }, + { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, + { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 199, 126, 78, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, + { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, + { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 209, 135, 100, 0 }, + { 180, 177, 158, 0 }, { 196, 127, 79, 0 }, { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, + { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, { 198, 121, 88, 0 }, { 235, 250, 235, 0 }, { 255, 164, 70, 0 }, + { 55, 53, 91, 0 }, { 205, 140, 110, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, { 50, 90, 120, 0 }, + { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, +}; + +Color_RGBA8 sSkyboxEnvColors[] = { + { 102, 135, 99, 0 }, { 0, 15, 69, 0 }, { 110, 55, 110, 0 }, { 0, 0, 100, 0 }, { 70, 10, 10, 0 }, + { 40, 0, 10, 0 }, { 40, 40, 40, 0 }, { 20, 20, 30, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, + { 20, 25, 90, 0 }, { 0, 5, 25, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, + { 0, 0, 0, 0 }, { 70, 10, 10, 0 }, { 20, 0, 30, 0 }, { 40, 40, 40, 0 }, { 0, 0, 20, 0 }, + { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 30, 0 }, { 102, 135, 99, 0 }, + { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 20, 0 }, { 66, 10, 10, 0 }, { 46, 5, 2, 0 }, + { 66, 10, 10, 0 }, { 0, 20, 50, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, + { 0, 0, 20, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 40, 0 }, + { 90, 90, 100, 0 }, { 60, 20, 30, 0 }, { 110, 55, 110, 0 }, { 0, 0, 50, 0 }, { 60, 0, 10, 0 }, + { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 25, 0 }, { 10, 0, 0, 0 }, { 46, 5, 2, 0 }, + { 34, 14, 10, 0 }, { 21, 5, 13, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, + { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 177, 82, 93, 0 }, + { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, + { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 9, 6, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, + { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, + { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 12, 16, 0 }, + { 51, 10, 15, 0 }, { 50, 15, 58, 0 }, { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, + { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, + { 26, 7, 0, 0 }, { 70, 20, 45, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, { 0, 2, 28, 0 }, + { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, +}; #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F694C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A04.s") +void Environment_WipeRumbleRequests(void) { + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) { + Rumble_StateWipeRequests(); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A40.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6AB8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6B44.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6CEC.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6EA4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s") +s32 Environment_IsSceneUpsideDown(PlayState* play) { + s32 ret = false; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6FF8.s") + if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) { + ret = true; + } + return ret; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8554.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSun.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s") +typedef enum { + /* 0 */ LENS_FLARE_CIRCLE0, + /* 1 */ LENS_FLARE_CIRCLE1, + /* 2 */ LENS_FLARE_RING +} LensFlareType; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA39C.s") +static Color_RGB8 sLensFlareColors[] = { + { 155, 205, 255 }, // blue + { 255, 255, 205 }, // yellow + { 255, 255, 205 }, // yellow + { 255, 255, 205 }, // yellow + { 155, 255, 205 }, // green + { 205, 255, 255 }, // light blue + { 155, 155, 255 }, // dark blue + { 205, 175, 255 }, // purple + { 175, 255, 205 }, // light green + { 255, 155, 235 }, // pink +}; +static f32 sLensFlareScales[] = { + 23.0f, 12.0f, 7.0f, 5.0f, 3.0f, 10.0f, 6.0f, 2.0f, 3.0f, 1.0f, +}; +static u32 sLensFlareAlphas[] = { + 50, 10, 25, 40, 70, 30, 50, 70, 50, 40, +}; +static u32 sLensFlareTypes[] = { + LENS_FLARE_RING, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, + LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_RandCentered.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAC20.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAF74.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB010.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB388.s") +static TexturePtr sLightningTextures[] = { + gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex, + gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB758.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s") +u8 sSandstormPrimColors[] = { + 255, 255, 255, // + 255, 255, 255, // + 255, 255, 255, // + 255, 255, 255, // + 210, 156, 85, // + 255, 200, 100, // + 225, 160, 50, // + 105, 90, 40, // +}; + +u8 sSandstormEnvColors[] = { + 100, 100, 100, // + 100, 100, 100, // + 100, 100, 100, // + 100, 100, 100, // + 155, 106, 35, // + 200, 150, 50, // + 170, 110, 0, // + 50, 40, 0, // +}; + #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s") +void Environment_LerpRGB8(u8* from, Color_RGB8* to, f32 lerp, s16* dst) { + Color_RGB8 result; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s") + Color_RGB8_Lerp((Color_RGB8*)from, to, lerp, &result); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s") + dst[0] = result.r - from[0]; + dst[1] = result.g - from[1]; + dst[2] = result.b - from[2]; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s") +void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.ambientColor, to, lerp, play->envCtx.adjLightSettings.ambientColor); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s") +void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.light1Color, to, lerp, play->envCtx.adjLightSettings.light1Color); + Environment_LerpRGB8(play->envCtx.lightSettings.light2Color, to, lerp, play->envCtx.adjLightSettings.light2Color); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s") +void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp) { + Environment_LerpRGB8(play->envCtx.lightSettings.fogColor, to, lerp, play->envCtx.adjLightSettings.fogColor); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/reset_days_elapsed.s") +void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp) { + play->envCtx.adjLightSettings.fogNear = (fogNearTarget - play->envCtx.lightSettings.fogNear) * lerp; + play->envCtx.adjLightSettings.zFar = (fogFarTarget - play->envCtx.lightSettings.zFar) * lerp; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_current_day.s") +// Repurposed from OoT to be more general +u32 Environment_GetEventDayCount(void) { + return gSaveContext.save.eventDayCount; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD750.s") +// Repurposed from OoT to be more general +void Environment_ClearEventDayCount(void) { + gSaveContext.save.eventDayCount = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD768.s") +// Repurposed from OoT to be more general +u32 Environment_GetTotalDays(void) { + return gSaveContext.save.day; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD78C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD858.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD928.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD980.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDAF8.s") +void Environment_WarpSongLeave(PlayState* play) { + gWeatherMode = WEATHER_MODE_CLEAR; + gSaveContext.save.cutsceneIndex = 0; + gSaveContext.respawnFlag = -3; + play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDC94.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE390.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Draw.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s") +void Environment_StopTime(void) { + sEnvIsTimeStopped = true; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s") +void Environment_StartTime(void) { + sEnvIsTimeStopped = false; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE590.s") +u8 Environment_IsTimeStopped(void) { + return sEnvIsTimeStopped; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE5D0.s") +u32 Environment_GetStormState(PlayState* play) { + u32 stormState = play->envCtx.stormState; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE610.s") + if ((play->sceneId == SCENE_OMOYA) && (play->roomCtx.curRoom.num == 0)) { + stormState = ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) + ? STORM_STATE_ON + : STORM_STATE_OFF; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE620.s") + switch (play->sceneId) { + case SCENE_13HUBUKINOMITI: + case SCENE_11GORONNOSATO: + case SCENE_10YUKIYAMANOMURA: + case SCENE_14YUKIDAMANOMITI: + case SCENE_12HAKUGINMAE: + case SCENE_17SETUGEN: + case SCENE_GORONRACE: + if (gSaveContext.sceneLayer == 0) { + stormState = STORM_STATE_OFF; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE658.s") + case SCENE_10YUKIYAMANOMURA2: + if (gSaveContext.sceneLayer == 1) { + stormState = STORM_STATE_OFF; + } + break; + + default: + break; + } + + return stormState; +} + +u8 Environment_IsFinalHours(PlayState* play) { + u8 ret = false; + + if ((gSaveContext.save.day == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { + ret = true; + } + + return ret; +} + +u8 func_800FE5D0(PlayState* play) { + u8 ret = false; + + if (Entrance_GetSceneId(((void)0, gSaveContext.save.entrance)) < 0) { + ret = true; + } + + return ret; +} + +u32 func_800FE610(PlayState* play) { + return 0; +} + +u16 Environment_GetTimeSpeed(PlayState* play) { + u16 timeSpeed = 0; + + if (R_TIME_SPEED != 0) { + timeSpeed = R_TIME_SPEED + (u16)((void)0, gSaveContext.save.timeSpeedOffset); + } + + return timeSpeed; +} + +void Environment_SetTimeJump(f32 minutes) { + sTimeJump = CLOCK_TIME_F(0, minutes); +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE6F8.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE778.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE788.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE798.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE7A8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE9B4.s") @@ -158,6 +982,11 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAB0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAC0.s") +void Environment_JumpForwardInTime(void) { + if (sTimeJump != 0) { + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + sTimeJump; + sTimeJump = 0; + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAF4.s") diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 634f0a47f..a68d7c882 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -663,7 +663,7 @@ void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, dst->z = translation->z + (src->z * cos - src->x * sin); } -void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) { +void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) { f32 aF; aF = a->r; diff --git a/src/code/z_lights.c b/src/code/z_lights.c index ef1af66f5..e5b34f387 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -257,15 +257,15 @@ void LightContext_Init(PlayState* play, LightContext* lightCtx) { } void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) { - lightCtx->ambient.r = r; - lightCtx->ambient.g = g; - lightCtx->ambient.b = b; + lightCtx->ambientColor[0] = r; + lightCtx->ambientColor[1] = g; + lightCtx->ambientColor[2] = b; } void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) { - lightCtx->fogColor.r = r; - lightCtx->fogColor.g = g; - lightCtx->fogColor.b = b; + lightCtx->fogColor[0] = r; + lightCtx->fogColor[1] = g; + lightCtx->fogColor[2] = b; lightCtx->fogNear = near; lightCtx->zFar = far; } @@ -274,7 +274,7 @@ void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 * Allocate a new Lights group and initilize the ambient color with that provided by LightContext */ Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx) { - return Lights_New(gfxCtx, lightCtx->ambient.r, lightCtx->ambient.g, lightCtx->ambient.b); + return Lights_New(gfxCtx, lightCtx->ambientColor[0], lightCtx->ambientColor[1], lightCtx->ambientColor[2]); } void LightContext_InitList(PlayState* play, LightContext* lightCtx) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 956bda896..cbfcd0481 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -5432,7 +5432,7 @@ void Interface_StartMoonCrash(PlayState* play) { } gSaveContext.save.day = 4; - gSaveContext.save.daysElapsed = 4; + gSaveContext.save.eventDayCount = 4; gSaveContext.save.time = CLOCK_TIME(6, 0) + 10; play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12); gSaveContext.nextCutsceneIndex = 0; diff --git a/src/code/z_play.c b/src/code/z_play.c index f71cf0c0d..5d9b2c048 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "z64.h" #include "regs.h" #include "functions.h" @@ -360,8 +361,8 @@ void Play_ClearTransition(PlayState* this) { Gfx* Play_SetFog(PlayState* this, Gfx* gfx) { s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f); - return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0, - this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar)); + return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], this->lightCtx.fogColor[2], + 0, this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar)); } void Play_Destroy(GameState* thisx) { @@ -524,7 +525,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { } func_801A3EC0(0x20); - func_800F6834(this, lightIndex); + Environment_EnableUnderwaterLights(this, lightIndex); if ((sQuakeIndex == -1) || (Quake_GetTimeLeft(sQuakeIndex) == 10)) { s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_5); @@ -553,7 +554,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { if (sQuakeIndex != 0) { Quake_RemoveRequest(sQuakeIndex); } - func_800F694C(this); + Environment_DisableUnderwaterLights(this); func_801A3EC0(0); } } @@ -585,20 +586,20 @@ void Play_UpdateTransition(PlayState* this) { !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) || ((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE))) && - (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) || + (!Environment_IsFinalHours(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) || (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) { func_801A4058(20); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } - if (func_800FD768()) { + if (Environment_IsForcedSequenceDisabled()) { func_801A4058(20); gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } - if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) && + if (Environment_IsFinalHours(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) && (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) { func_801A41C8(20); } @@ -824,10 +825,10 @@ void Play_UpdateTransition(PlayState* this) { case TRANS_MODE_SANDSTORM_INIT: if (this->transitionTrigger != TRANS_TRIGGER_END) { - this->envCtx.sandstormState = 1; + this->envCtx.sandstormState = SANDSTORM_FILL; this->transitionMode = TRANS_MODE_SANDSTORM; } else { - this->envCtx.sandstormState = 2; + this->envCtx.sandstormState = SANDSTORM_UNFILL; this->envCtx.sandstormPrimA = 255; this->envCtx.sandstormEnvA = 255; this->transitionMode = TRANS_MODE_SANDSTORM; @@ -856,7 +857,7 @@ void Play_UpdateTransition(PlayState* this) { case TRANS_MODE_SANDSTORM_END_INIT: if (this->transitionTrigger == TRANS_TRIGGER_END) { - this->envCtx.sandstormState = 4; + this->envCtx.sandstormState = SANDSTORM_DISSIPATE; this->envCtx.sandstormPrimA = 255; this->envCtx.sandstormEnvA = 255; @@ -1144,8 +1145,8 @@ void Play_DrawMain(PlayState* this) { if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.roomShape->base.type == ROOM_SHAPE_TYPE_IMAGE)) { func_8012CF0C(gfxCtx, false, true, 0, 0, 0); } else { - func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, - this->lightCtx.fogColor.b); + func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], + this->lightCtx.fogColor[2]); } } else { func_8012CF0C(gfxCtx, false, false, 0, 0, 0); @@ -1292,7 +1293,7 @@ void Play_DrawMain(PlayState* this) { } } - func_800FE390(this); + Environment_Draw(this); } sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx); @@ -1324,8 +1325,7 @@ void Play_DrawMain(PlayState* this) { } } - // envCtx.precipitation[PRECIP_RAIN_CUR] - if (this->envCtx.unk_F2[1] != 0) { + if (this->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) { Environment_DrawRain(this, &this->view, gfxCtx); } } @@ -1339,7 +1339,7 @@ void Play_DrawMain(PlayState* this) { } if (1) { - if (!this->envCtx.sunMoonDisabled) { + if (!this->envCtx.sunDisabled) { sp25C.x = this->view.eye.x + this->envCtx.sunPos.x; sp25C.y = this->view.eye.y + this->envCtx.sunPos.y; sp25C.z = this->view.eye.z + this->envCtx.sunPos.z; @@ -1367,7 +1367,7 @@ void Play_DrawMain(PlayState* this) { } if (1) { - if (this->envCtx.sandstormState != 0) { + if (this->envCtx.sandstormState != SANDSTORM_OFF) { Environment_DrawSandstorm(this, this->envCtx.sandstormState); } } @@ -1440,7 +1440,7 @@ SkipPostWorldDraw: } if (!sp25B) { - func_800FE3E0(this); + Environment_DrawSkyboxStars(this); } CLOSE_DISPS(gfxCtx); @@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) { gSaveContext.save.cutsceneIndex = 0; } - if (gSaveContext.nextDayTime != 0xFFFF) { + if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { gSaveContext.save.time = gSaveContext.nextDayTime; gSaveContext.skyboxTime = gSaveContext.nextDayTime; } @@ -2250,14 +2250,14 @@ void Play_Init(GameState* thisx) { KaleidoScopeCall_Init(this); Interface_Init(this); - if (gSaveContext.nextDayTime != 0xFFFF) { - if (gSaveContext.nextDayTime == 0x8000) { + if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { + if (gSaveContext.nextDayTime == NEXT_TIME_DAY) { gSaveContext.save.day++; - gSaveContext.save.daysElapsed++; + gSaveContext.save.eventDayCount++; gSaveContext.dogIsLost = true; - gSaveContext.nextDayTime = -2; + gSaveContext.nextDayTime = NEXT_TIME_DAY_SET; } else { - gSaveContext.nextDayTime = -3; + gSaveContext.nextDayTime = NEXT_TIME_NIGHT_SET; } } @@ -2348,7 +2348,7 @@ void Play_Init(GameState* thisx) { CutsceneManager_StoreCamera(&this->mainCamera); Interface_SetSceneRestrictions(this); - func_800FB758(this); + Environment_PlaySceneSequence(this); gSaveContext.seqId = this->sequenceCtx.seqId; gSaveContext.ambienceId = this->sequenceCtx.ambienceId; AnimationContext_Update(this, &this->animationCtx); diff --git a/src/code/z_room.c b/src/code/z_room.c index d06739d87..428dd5c13 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -581,12 +581,12 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) { Actor_SpawnTransitionActors(play, &play->actorCtx); if (((play->sceneId != SCENE_IKANA) || (roomCtx->curRoom.num != 1)) && (play->sceneId != SCENE_IKNINSIDE)) { - play->envCtx.lightSettingOverride = 0xFF; - play->envCtx.unk_E0 = 0; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE; } func_800FEAB0(); - if (!func_800FE4B8(play)) { - func_800FD858(play); + if (Environment_GetStormState(play) == STORM_STATE_OFF) { + Environment_StopStormNatureAmbience(play); } } else { return 0; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index d26156d58..483db001e 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -255,7 +255,7 @@ void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd) { play->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1; play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1; play->roomCtx.curRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1; - play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1; + play->envCtx.stormState = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1; } // SceneTableEntry Header Command 0x0A: Mesh Header @@ -386,7 +386,7 @@ void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x12: Skybox Disables void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) { play->envCtx.skyboxDisabled = cmd->skyboxDisables.unk4; - play->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk5; + play->envCtx.sunDisabled = cmd->skyboxDisables.unk5; } // SceneTableEntry Header Command 0x10: Time Settings @@ -436,9 +436,9 @@ void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) { s8 temp2 = cmd->windSettings.vertical; s8 temp3 = cmd->windSettings.south; - play->envCtx.windDir.x = temp1; - play->envCtx.windDir.y = temp2; - play->envCtx.windDir.z = temp3; + play->envCtx.windDirection.x = temp1; + play->envCtx.windDirection.y = temp2; + play->envCtx.windDirection.z = temp3; play->envCtx.windSpeed = cmd->windSettings.clothIntensity; } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 059596909..01a493cc0 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -430,7 +430,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { u8 item; gSaveContext.save.timeSpeedOffset = 0; - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; @@ -650,7 +650,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { void Sram_IncrementDay(void) { if (CURRENT_DAY <= 3) { gSaveContext.save.day++; - gSaveContext.save.daysElapsed++; + gSaveContext.save.eventDayCount++; } gSaveContext.save.saveInfo.bombersCaughtNum = 0; @@ -918,7 +918,7 @@ u16 sSaveDefaultChecksum = 0; */ void Sram_InitNewSave(void) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; Sram_ResetSave(); diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index 45a29260f..01a74402c 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -338,8 +338,8 @@ void func_808B7A90(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_800FE7A8(D_808B82F0, &sp2C); - func_800FE7A8(D_808B8300, &sp28); + Environment_LerpSandstormColors(D_808B82F0, &sp2C); + Environment_LerpSandstormColors(D_808B8300, &sp28); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255); @@ -358,15 +358,15 @@ void func_808B7B54(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_800FE7A8(D_808B8310, &sp50); - func_800FE7A8(D_808B8330, &sp4C); + Environment_LerpSandstormColors(D_808B8310, &sp50); + Environment_LerpSandstormColors(D_808B8330, &sp4C); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255); gSPDisplayList(POLY_XLU_DISP++, object_posthouse_obj_DL_000A50); - func_800FE7A8(D_808B8320, &sp50); - func_800FE7A8(D_808B8340, &sp4C); + Environment_LerpSandstormColors(D_808B8320, &sp50); + Environment_LerpSandstormColors(D_808B8340, &sp4C); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp50.r, sp50.g, sp50.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp4C.r, sp4C.g, sp4C.b, 255); diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index bf3aa576d..f96c2864f 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -1320,7 +1320,7 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) { Boss02* this = THIS; this->giantModeScaleFactor = sGiantModeScaleFactor; - play->envCtx.sandstormState = 0xD; + play->envCtx.sandstormState = SANDSTORM_D; if (sBlueWarp != NULL) { this->fogNear = KREG(23) + -15.0f; @@ -1828,7 +1828,7 @@ void Boss02_HandleGiantsMaskCutscene(Boss02* this, PlayState* play) { Actor_SetScale(&player->actor, this->playerScale); } - play->envCtx.lightSettings.fogNear = this->fogNear; + play->envCtx.adjLightSettings.fogNear = this->fogNear; // Switches from the "normal" variation of the arena to the "giant" variation (or vice versa) // at the appropriate point in the Giant's Mask cutscene. diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index 38ca4f799..6dc94e0e3 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -431,26 +431,26 @@ void Boss06_Update(Actor* thisx, PlayState* play) { if (this->unk_1E4 > 0.0f) { if (ENBOSS06_GET_PARAMS(&this->actor) == 0) { - D_801F4E32 = 1; - D_801F4E38.x = this->actor.world.pos.x + this->unk_1B0; - D_801F4E38.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; - D_801F4E38.z = this->actor.world.pos.z; + gCustomLensFlare1On = true; + gCustomLensFlare1Pos.x = this->actor.world.pos.x + this->unk_1B0; + gCustomLensFlare1Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; + gCustomLensFlare1Pos.z = this->actor.world.pos.z; D_801F4E44 = this->unk_1E4; D_801F4E48 = 10.0f; D_801F4E4C = 0; } else { - D_801F4E4E = 1; - D_801F4E50.x = this->actor.world.pos.x + this->unk_1B0; - D_801F4E50.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; - D_801F4E50.z = this->actor.world.pos.z; + gCustomLensFlare2On = true; + gCustomLensFlare2Pos.x = this->actor.world.pos.x + this->unk_1B0; + gCustomLensFlare2Pos.y = this->actor.world.pos.y + 80.0f + this->unk_1B4 + this->unk_1AC; + gCustomLensFlare2Pos.z = this->actor.world.pos.z; D_801F4E5C = this->unk_1E4; D_801F4E60 = 10.0f; D_801F4E64 = 0; } } else if (ENBOSS06_GET_PARAMS(&this->actor) == 0) { - D_801F4E32 = 0; + gCustomLensFlare1On = false; } else { - D_801F4E4E = 0; + gCustomLensFlare2On = false; } if ((this->unk_1C8 != 0) && (this->unk_1C8 != 0)) { diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index 8f3b401da..2b0669f39 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -335,10 +335,10 @@ void DemoEffect_DrawLight(Actor* thisx, PlayState* play2) { CLOSE_DISPS(play->state.gfxCtx); - D_801F4E32 = 1; - D_801F4E38.x = thisx->world.pos.x; - D_801F4E38.y = thisx->world.pos.y; - D_801F4E38.z = thisx->world.pos.z; + gCustomLensFlare1On = true; + gCustomLensFlare1Pos.x = thisx->world.pos.x; + gCustomLensFlare1Pos.y = thisx->world.pos.y; + gCustomLensFlare1Pos.z = thisx->world.pos.z; D_801F4E44 = thisx->scale.x * 60.0f; D_801F4E48 = thisx->scale.x * 50.0f; diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index badd4bc12..945e09fee 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -56,21 +56,21 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) { Player* player = GET_PLAYER(play); if (play->roomCtx.unk7A[1] != 0) { - if (play->envCtx.unk_F2[3] != 0) { - play->envCtx.unk_F2[3]--; + if (play->envCtx.precipitation[PRECIP_SNOW_MAX] != 0) { + play->envCtx.precipitation[PRECIP_SNOW_MAX]--; } else { Actor_Kill(&this->actor); } - } else if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) { - play->envCtx.unk_F2[3] += 16; + } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) { + play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; } // note: DemoKankyo can crash if placed in an area that snows (ObjectKankyo) - // because they both use unk_F2 as an effect counter, + // because they both use PRECIP_SNOW_MAX precipitation as an effect counter, // causing DemoKankyo to write beyond its efffect array boundry // this crash can occur if the two actors are in different scenes connected by an exit // e.g. if you add DemoKankyo to GoronShrine, you will crash entering/leaving through door - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { repositionLimit = 130.0f; eyeToAt.x = play->view.at.x - play->view.eye.x; @@ -304,8 +304,8 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) { s32 pad1; Vec3f worldPos; - if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) { - play->envCtx.unk_F2[3] += 16; + if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < DEMOKANKYO_EFFECT_COUNT) { + play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; } eyeToAt.x = play->view.at.x - play->view.eye.x; @@ -318,7 +318,7 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play) { halfScreenHeight = SCREEN_HEIGHT / 2; - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { switch (this->effects[i].state) { case DEMO_KANKYO_STATE_INIT: this->effects[i].posBase.x = play->view.eye.x + (eyeToAtNormX * halfScreenHeight); @@ -511,7 +511,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y; worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z; @@ -601,7 +601,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { Gfx_SetupDL25_Xlu(gfxCtx); - for (i = 0; i < play->envCtx.unk_F2[3]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; worldPos.y = this->effects[i].posBase.y + this->effects[i].posOffset.y; worldPos.z = this->effects[i].posBase.z + this->effects[i].posOffset.z; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c index 2341b3a64..09f4fe1c1 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -499,8 +499,8 @@ void func_80C17468(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_800FE7A8(D_80C17824, &sp2C); - func_800FE7A8(D_80C17834, &sp28); + Environment_LerpSandstormColors(D_80C17824, &sp2C); + Environment_LerpSandstormColors(D_80C17834, &sp28); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sp2C.r, sp2C.g, sp2C.b, 255); gDPSetEnvColor(POLY_XLU_DISP++, sp28.r, sp28.g, sp28.b, 255); diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c index 22bc9544b..b28a44d1b 100644 --- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c +++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c @@ -110,12 +110,13 @@ void func_80A1F75C(DmHina* this, PlayState* play) { Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f); this->unk17F = this->unk14C * 255.0f; this->unk150 = Math_SinS(play->state.frames * 0x1F40); - for (i = 0; i < 3; i++) { - play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.fogColor[i] = - play->envCtx.lightSettings.diffuseColor1[i] = -255.0f * this->unk14C; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = -255.0f * this->unk14C; } - play->envCtx.lightSettings.fogNear = -500.0f * this->unk14C; - if (play->envCtx.lightSettings.fogNear < -300) { + + play->envCtx.adjLightSettings.fogNear = -500.0f * this->unk14C; + if (play->envCtx.adjLightSettings.fogNear < -300) { play->roomCtx.curRoom.segment = NULL; } break; diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index cf8ed15e1..c9aaa48cb 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1073,9 +1073,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->deflectCount = 0; this->maskType = SK_MASK_TYPE_NORMAL; this->animIndex = SK_ANIM_IDLE; - this->fogR = play->lightCtx.fogColor.r; - this->fogG = play->lightCtx.fogColor.g; - this->fogB = play->lightCtx.fogColor.b; + this->fogR = play->lightCtx.fogColor[0]; + this->fogG = play->lightCtx.fogColor[1]; + this->fogB = play->lightCtx.fogColor[2]; if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) { this->alpha = 0; @@ -1643,9 +1643,9 @@ void DmStk_HandleCutscene(DmStk* this, PlayState* play) { this->fadeInState++; } - this->fogR = play->lightCtx.fogColor.r * this->fogScale; - this->fogG = play->lightCtx.fogColor.g * this->fogScale; - this->fogB = play->lightCtx.fogColor.b * this->fogScale; + this->fogR = play->lightCtx.fogColor[0] * this->fogScale; + this->fogG = play->lightCtx.fogColor[1] * this->fogScale; + this->fogB = play->lightCtx.fogColor[2] * this->fogScale; } else if (this->fadeInState == SK_FADE_IN_STATE_INCREASE_FOG) { if (this->fogN < 996) { this->fogN += 10; diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 32a7ba7f0..ec1480a67 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -178,10 +178,9 @@ void DoorWarp1_Destroy(Actor* thisx, PlayState* play) { LightContext_RemoveLight(play, &play->lightCtx, this->unk_1DC); LightContext_RemoveLight(play, &play->lightCtx, this->unk_1F0); - for (i = 0; i < ARRAY_COUNT(play->envCtx.lightSettings.diffuseColor1); i++) { - play->envCtx.lightSettings.diffuseColor1[i] = 0; - play->envCtx.lightSettings.fogColor[i] = play->envCtx.lightSettings.diffuseColor1[i]; - play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.diffuseColor1[i]; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = 0; } if (this->unk_1D3 != 0) { @@ -781,7 +780,6 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { Player* player2 = GET_PLAYER(play); Player* player = GET_PLAYER(play); s16 i; - s32 temp_f16; f32 temp_f0; f32 temp_f2; s32 temp; @@ -869,16 +867,13 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { if (1) {} temp_f0 = 1.0f - ((f32)(D_808BC000 - this->unk_1D0) / ((D_808BC000 - tempS) + 100)); if (temp_f0 > 0.0f) { - temp_f16 = -255.0f * temp_f0; - - for (i = 0; i < 3; i++) { - play->envCtx.lightSettings.diffuseColor1[i] = temp_f16; - play->envCtx.lightSettings.fogColor[i] = temp_f16; - play->envCtx.lightSettings.ambientColor[i] = temp_f16; + for (i = 0; i < ARRAY_COUNT(play->envCtx.adjLightSettings.light1Color); i++) { + play->envCtx.adjLightSettings.ambientColor[i] = play->envCtx.adjLightSettings.fogColor[i] = + play->envCtx.adjLightSettings.light1Color[i] = -255.0f * temp_f0; } - play->envCtx.lightSettings.fogNear = -500.0f * temp_f0; - if (play->envCtx.lightSettings.fogNear < -300) { + play->envCtx.adjLightSettings.fogNear = -500.0f * temp_f0; + if (play->envCtx.adjLightSettings.fogNear < -300) { play->roomCtx.curRoom.segment = NULL; } } diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c index bc95d4312..470f9b89d 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -81,7 +81,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { if (func_80183DE0(&this->skeletonInfo)) { Actor_Kill(&this->actor); CutsceneManager_Stop(CS_ID_GLOBAL_ELEGY); - func_800FD2B4(play, 0.0f, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, 0.0f, 850.0f, 0.2f, 0.0f); return; } @@ -108,7 +108,7 @@ void func_80A4C5CC(EffChange* this, PlayState* play) { } else if (phi_fv0 < 0.0f) { phi_fv0 = 0.0f; } - func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, phi_fv0, 850.0f, 0.2f, 0.0f); if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_ELEGY) { if (CutsceneManager_IsNext(CS_ID_GLOBAL_ELEGY)) { CutsceneManager_Start(CS_ID_GLOBAL_ELEGY, &this->actor); diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c index 9b5290907..ee493fe24 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c @@ -153,8 +153,8 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) { Color_RGBA8 primColor; Color_RGBA8 envColor; - func_800FE7A8(sPrimColors, &primColor); - func_800FE7A8(sEnvColors, &envColor); + Environment_LerpSandstormColors(sPrimColors, &primColor); + Environment_LerpSandstormColors(sEnvColors, &envColor); EffKamejimaWave_SetVtxAlpha(sVtxAlpha); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index eea47caa5..783f157b1 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -475,7 +475,7 @@ void EnAob01_BeforeRace_StartRace(EnAob01* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); this->stateFlags |= ENAOB01_FLAG_STARTED_RACE; - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_64; diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 17c9dbc50..218de2cb5 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1526,7 +1526,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) { if (play->msgCtx.choiceIndex == 0) { Audio_PlaySfx_MessageDecide(); play->msgCtx.msgMode = MSGMODE_PAUSED; - func_800FD750(NA_BGM_TIMED_MINI_GAME); + Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME); func_80A94AB8(this, play, 1); func_80A979DC(this, play); } else { @@ -1571,7 +1571,7 @@ void func_80A97C4C(EnAz* this, PlayState* play) { func_80A97410(this, play); if ((this->unk_2FA == 1) || (this->unk_2FA == 3) || (this->unk_2FA == 6) || (this->unk_2FA == 8)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); - func_800FD750(NA_BGM_TIMED_MINI_GAME); + Environment_ForcePlaySequence(NA_BGM_TIMED_MINI_GAME); play->nextEntrance = Entrance_CreateFromSpawn(1); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index a7287b67e..e8ce29da2 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -1009,7 +1009,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { EnBigslime_UpdateCameraIntroCs(this, play, 25); Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS); EnBigslime_InitFallMinislime(this); - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; this->callTimer = 35; func_800B7298(play, &this->actor, PLAYER_CSMODE_4); } @@ -1989,7 +1989,7 @@ void EnBigslime_Melt(EnBigslime* this, PlayState* play) { if (this->meltCounter == 100) { EnBigslime_SetTargetVtxFromPreFrozen(this); } else if (this->meltCounter == 50) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } } @@ -2777,7 +2777,7 @@ void EnBigslime_UpdateBigslime(Actor* thisx, PlayState* play) { Vec3f vtxMin; if (play->envCtx.lightSettingOverride == 3) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } Audio_SetSfxUnderwaterReverb(true); @@ -2822,7 +2822,7 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) { s32 pad; if (play->envCtx.lightSettingOverride == 3) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } Audio_SetSfxUnderwaterReverb(false); diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index c55c5bb3a..2f76201c5 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -356,28 +356,28 @@ void EnBom_Explode(EnBom* this, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base); } - if (play->envCtx.lightSettings.diffuseColor1[0] != 0) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] != 0) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[1] != 0) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] != 0) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[2] != 0) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] != 0) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; } - if (play->envCtx.lightSettings.ambientColor[0] != 0) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] != 0) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; } - if (play->envCtx.lightSettings.ambientColor[1] != 0) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] != 0) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; } - if (play->envCtx.lightSettings.ambientColor[2] != 0) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] != 0) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; } if (this->timer == 0) { @@ -550,10 +550,10 @@ void EnBom_Update(Actor* thisx, PlayState* play) { CLEAR_TAG_PARAMS(this->isPowderKeg)); Actor_RequestQuakeAndRumble(thisx, play, sQuakeY[this->isPowderKeg], sQuakeDurations[this->isPowderKeg]); - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = 250; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] = - play->envCtx.lightSettings.ambientColor[2] = 250; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = 250; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] = + play->envCtx.adjLightSettings.ambientColor[2] = 250; Camera_AddQuake(&play->mainCamera, 2, 11, 8); thisx->params = BOMB_TYPE_EXPLOSION; this->timer = 10; diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c index bf9ba05a9..92dfe8418 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -273,28 +273,28 @@ void func_808AEFD4(EnBombf* this, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderJntSph.base); } - if (play->envCtx.lightSettings.diffuseColor1[0] != 0) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] != 0) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[1] != 0) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] != 0) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; } - if (play->envCtx.lightSettings.diffuseColor1[2] != 0) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] != 0) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; } - if (play->envCtx.lightSettings.ambientColor[0] != 0) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] != 0) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; } - if (play->envCtx.lightSettings.ambientColor[1] != 0) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] != 0) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; } - if (play->envCtx.lightSettings.ambientColor[2] != 0) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] != 0) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; } if (this->timer == 0) { @@ -414,10 +414,10 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = 250; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] = - play->envCtx.lightSettings.ambientColor[2] = 250; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = 250; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.ambientColor[1] = + play->envCtx.adjLightSettings.ambientColor[2] = 250; Camera_AddQuake(&play->mainCamera, 2, 11, 8); diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index a66b176c3..22c247c1f 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -563,7 +563,7 @@ void func_8089B580(EnDinofos* this, PlayState* play) { } if ((play->sceneId == SCENE_MITURIN) && Animation_OnFrame(&this->skelAnime, 55.0f)) { - play->envCtx.lightSettingOverride = 0xFF; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } if (SkelAnime_Update(&this->skelAnime)) { @@ -1118,7 +1118,7 @@ void func_8089CF00(EnDinofos* this, PlayState* play) { Animation_PlayOnce(&this->skelAnime, &gDinolfosFireEndAnim); this->colliderJntSph.base.atFlags &= ~AT_ON; if (play->sceneId == SCENE_MITURIN) { - play->envCtx.lightSettingOverride = 255; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } this->actionFunc = func_8089CF70; } @@ -1289,7 +1289,7 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) { func_8089ACEC(this, play); func_8089AD70(this); if (play->sceneId == SCENE_MITURIN) { - play->envCtx.lightSettingOverride = 255; + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; } this->colliderQuad.base.atFlags &= ~(AT_ON | AT_BOUNCED); diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index f1526d66b..53864ab9c 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1323,7 +1323,7 @@ void func_8088FC34(EnElf* this, PlayState* play) { } else { Math_StepToF(&this->unk_240, 1.0f, 0.05f); } - func_800FD2B4(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f); + Environment_AdjustLights(play, SQ(this->unk_240), player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f); } } @@ -1521,8 +1521,8 @@ void func_8089010C(Actor* thisx, PlayState* play) { this->elfMsg = NULL; this->timer++; - if ((this->unk_240 >= 0.0f) && - func_800FD2B4(play, SQ(this->unk_240) * this->unk_240, player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) { + if ((this->unk_240 >= 0.0f) && Environment_AdjustLights(play, SQ(this->unk_240) * this->unk_240, + player->actor.projectedPos.z + 780.0f, 0.2f, 0.5f)) { Math_StepToF(&this->unk_240, -0.05f, 0.05f); } diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index 15d495e49..931e8c6d4 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -169,10 +169,10 @@ void EnEncount3_Update(Actor* thisx, PlayState* play2) { this->unk164 = this->unk160 / 60.0f; if (this->unk164 != 0.0f) { - play->envCtx.lightSettings.fogNear = (960 - play->envCtx.unk_C4.fogNear) * this->unk164; - play->envCtx.lightSettings.fogColor[0] = (40.0f - play->envCtx.unk_C4.fogColor[0]) * this->unk164; - play->envCtx.lightSettings.fogColor[1] = (10.0f - play->envCtx.unk_C4.fogColor[1]) * this->unk164; - play->envCtx.lightSettings.fogColor[2] = (0.0f - play->envCtx.unk_C4.fogColor[2]) * this->unk164; + play->envCtx.adjLightSettings.fogNear = (960 - play->envCtx.lightSettings.fogNear) * this->unk164; + play->envCtx.adjLightSettings.fogColor[0] = (40.0f - play->envCtx.lightSettings.fogColor[0]) * this->unk164; + play->envCtx.adjLightSettings.fogColor[1] = (10.0f - play->envCtx.lightSettings.fogColor[1]) * this->unk164; + play->envCtx.adjLightSettings.fogColor[2] = (0.0f - play->envCtx.lightSettings.fogColor[2]) * this->unk164; } } diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index b2a9b75d8..9e442b637 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -5314,8 +5314,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Cutscene_StopManual(play, &play->csCtx); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; player->unk_B28 = -5; D_80917200 = 5; break; @@ -5356,8 +5356,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; D_8090CD50 = 30; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } break; @@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { D_80917200 = 5; D_8090CD54 = 0; D_809171F6 = 20; - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } } } @@ -5476,15 +5476,15 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Math_ApproachF(&sSubCamVelFactor, 1.0f, 1.0f, 0.02f); if (sSubCamEye.y <= (WATER_SURFACE_Y(play) + 1.0f)) { - func_800F6834(play, 1); + Environment_EnableUnderwaterLights(play, 1); if (D_809171CA != 0) { - play->envCtx.lightSettings.fogNear = -0xB2; + play->envCtx.adjLightSettings.fogNear = -178; } else { - play->envCtx.lightSettings.fogNear = -0x2E; + play->envCtx.adjLightSettings.fogNear = -46; } } else { - func_800F6834(play, 0); - play->envCtx.lightSettings.fogNear = 0; + Environment_EnableUnderwaterLights(play, 0); + play->envCtx.adjLightSettings.fogNear = 0; } } @@ -5534,10 +5534,10 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { if (Rand_ZeroOne() < 0.5f) { D_8090CCD4 = Rand_ZeroFloat(10.0f) + 5.0f; - play->envCtx.unk_E1 = 1; + play->envCtx.stormRequest = STORM_REQUEST_START; } else { D_8090CCD4 = 0; - play->envCtx.unk_E1 = 2; + play->envCtx.stormRequest = STORM_REQUEST_STOP; } } @@ -5568,8 +5568,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { Math_ApproachZeroF(&D_8090CCD8, 1.0f, 2.0f); } - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] = - play->envCtx.lightSettings.diffuseColor1[2] = D_8090CCD8; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.light1Color[1] = + play->envCtx.adjLightSettings.light1Color[2] = D_8090CCD8; if ((u8)D_8090CCD0 > 0) { s32 pad; diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index b0a5200e2..6a68f283a 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -996,46 +996,46 @@ s32 func_80963810(PlayState* play, Vec3f pos) { s32 func_809638F8(PlayState* play) { s32 ret = true; - if (play->envCtx.lightSettings.diffuseColor1[0] > 25) { - play->envCtx.lightSettings.diffuseColor1[0] -= 25; + if (play->envCtx.adjLightSettings.light1Color[0] > 25) { + play->envCtx.adjLightSettings.light1Color[0] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[0] = 0; + play->envCtx.adjLightSettings.light1Color[0] = 0; } - if (play->envCtx.lightSettings.diffuseColor1[1] > 25) { - play->envCtx.lightSettings.diffuseColor1[1] -= 25; + if (play->envCtx.adjLightSettings.light1Color[1] > 25) { + play->envCtx.adjLightSettings.light1Color[1] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[1] = 0; + play->envCtx.adjLightSettings.light1Color[1] = 0; } - if (play->envCtx.lightSettings.diffuseColor1[2] > 25) { - play->envCtx.lightSettings.diffuseColor1[2] -= 25; + if (play->envCtx.adjLightSettings.light1Color[2] > 25) { + play->envCtx.adjLightSettings.light1Color[2] -= 25; ret = false; } else { - play->envCtx.lightSettings.diffuseColor1[2] = 0; + play->envCtx.adjLightSettings.light1Color[2] = 0; } - if (play->envCtx.lightSettings.ambientColor[0] > 25) { - play->envCtx.lightSettings.ambientColor[0] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[0] > 25) { + play->envCtx.adjLightSettings.ambientColor[0] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[0] = 0; + play->envCtx.adjLightSettings.ambientColor[0] = 0; } - if (play->envCtx.lightSettings.ambientColor[1] > 25) { - play->envCtx.lightSettings.ambientColor[1] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[1] > 25) { + play->envCtx.adjLightSettings.ambientColor[1] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[1] = 0; + play->envCtx.adjLightSettings.ambientColor[1] = 0; } - if (play->envCtx.lightSettings.ambientColor[2] > 25) { - play->envCtx.lightSettings.ambientColor[2] -= 25; + if (play->envCtx.adjLightSettings.ambientColor[2] > 25) { + play->envCtx.adjLightSettings.ambientColor[2] -= 25; ret = false; } else { - play->envCtx.lightSettings.ambientColor[2] = 0; + play->envCtx.adjLightSettings.ambientColor[2] = 0; } return ret; } diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 272915c71..e7d8e9032 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -364,7 +364,7 @@ void func_80B0FD8C(EnGb2* this, PlayState* play) { } void func_80B0FE18(PlayState* play) { - func_800FD750(NA_BGM_MINI_BOSS); + Environment_ForcePlaySequence(NA_BGM_MINI_BOSS); play->nextEntrance = ENTRANCE(GHOST_HUT, 1); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_64; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 88798dd2f..17f8cbb1d 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -1066,7 +1066,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) { Math_StepToF(&this->unk_200, 1.0f, 0.02f); } func_80997AFC(this->unk_194, &this->unk_1F7); - Lib_LerpRGB(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA); + Color_RGB8_Lerp(&this->unk_1F4, &this->unk_1F7, this->unk_200, &this->unk_1FA); if (this->unk_200 >= 1.0f) { this->unk_1F4 = this->unk_1FA; } diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c index e9cfb258e..b22949cb0 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -62,10 +62,10 @@ void EnHata_Update(Actor* thisx, PlayState* play2) { this->skelAnime.playSpeed = 2.75f * phi_fv0; this->skelAnime.playSpeed += 1.0f + Rand_ZeroFloat(1.25f); - sp34.x = play->envCtx.windDir.x; - sp34.y = play->envCtx.windDir.y + ((1.0f - phi_fv0) * 240.0f); + sp34.x = play->envCtx.windDirection.x; + sp34.y = play->envCtx.windDirection.y + ((1.0f - phi_fv0) * 240.0f); sp34.y = CLAMP(sp34.y, -118.0f, 118.0f); - sp34.z = play->envCtx.windDir.z; + sp34.z = play->envCtx.windDirection.z; phi_fv0 = CLAMP(phi_fv0, 0.1f, 0.4f); Math_ApproachF(&this->unk_2A4.x, sp34.x, phi_fv0, 1000.0f); diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 19fbd436e..54b21b7ba 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -879,7 +879,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; @@ -1176,7 +1176,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); - func_800FD750(NA_BGM_HORSE); + Environment_ForcePlaySequence(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 801ad428c..77b4ce909 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -750,7 +750,7 @@ void EnInvadepohDemo_Ufo_Draw(EnInvadepohDemo* this, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); if (EnInvadepohDemo_Ufo_ShouldDrawLensFlare(play, &flashPos)) { - func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); + Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, flashPos, 20.0f, 9.0f, 0, 0); } } diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index b09f8f54d..89b9fcfff 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -203,7 +203,7 @@ void EnMThunder_Destroy(Actor* thisx, PlayState* play) { } void EnMThunder_AdjustLights(PlayState* play, f32 arg1) { - func_800FD2B4(play, arg1, 850.0f, 0.2f, 0.0f); + Environment_AdjustLights(play, arg1, 850.0f, 0.2f, 0.0f); } void EnMThunder_Spin_AttackNoMagic(EnMThunder* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index 49d10a518..016f779e9 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -318,7 +318,7 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) { Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_RACE | SEQ_FLAG_ASYNC); - play->envCtx.unk_E4 = 0xFE; + play->envCtx.timeSeqState = TIMESEQ_REQUEST; player->stateFlags1 &= ~PLAYER_STATE1_20; } else if ((this->timer < 60) && (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO)) { this->timer = 0; diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 1720954a2..7ac6a3b58 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -366,7 +366,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { gSaveContext.save.time = CLOCK_TIME(8, 0); Sram_IncrementDay(); } else { - func_800FE658(120.0f); + Environment_SetTimeJump(120.0f); } this->behaviour++; diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c index df778f1a7..780e3b300 100644 --- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c +++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c @@ -41,7 +41,7 @@ void EnOkarinaEffect_Destroy(Actor* thisx, PlayState* play) { void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) { EnOkarinaEffect* this = THIS; - if (play->envCtx.unk_F2[1]) { + if (play->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) { Actor_Kill(&this->actor); } EnOkarinaEffect_SetupAction(this, func_8096B104); @@ -49,10 +49,10 @@ void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) { void func_8096B104(EnOkarinaEffect* this, PlayState* play) { this->unk144 = 0x50; - play->envCtx.unk_F2[4] = 0x3C; - D_801F4E70 = 501.0f; - play->envCtx.unk_E3 = 2; - func_800FD78C(play); + play->envCtx.precipitation[PRECIP_SOS_MAX] = 60; + gLightningStrike.delayTimer = 501.0f; + play->envCtx.lightningState = LIGHTNING_LAST; + Environment_PlayStormNatureAmbience(play); EnOkarinaEffect_SetupAction(this, func_8096B174); } @@ -65,11 +65,11 @@ void func_8096B174(EnOkarinaEffect* this, PlayState* play) { } void func_8096B1FC(EnOkarinaEffect* this, PlayState* play) { - if (play->envCtx.unk_F2[4]) { + if (play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) { if ((play->state.frames & 3) == 0) { - play->envCtx.unk_F2[4]--; - if (play->envCtx.unk_F2[4] == 8) { - func_800FD858(play); + play->envCtx.precipitation[PRECIP_SOS_MAX]--; + if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 8) { + Environment_StopStormNatureAmbience(play); } } } else { diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index b8967e329..fa7e72acc 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -459,8 +459,8 @@ void func_80B5C3D8(EnOt* this, PlayState* play) { this->unk_360->actor.shape.rot.y = BINANG_ROT180(temp); if (this->unk_740 < 1.0f) { - Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744); - Lib_LerpRGB(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744); + Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_744); + Color_RGB8_Lerp(&D_80B5E408, &D_80B5E40C, this->unk_740, &this->unk_360->unk_744); Math_StepToF(&this->unk_740, 1.0f, 0.05f); } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 062f76230..90ea18d05 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -782,7 +782,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { CutsceneManager_SetReturnCamera(CAM_ID_MAIN); Environment_StartTime(); if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) { - func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); + Environment_SetTimeJump(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); } if (play->actorCtx.flags & ACTORCTX_FLAG_6) { SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT); diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index e726408a5..8816ceb64 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -60,8 +60,8 @@ void func_80A41D70(EnTest4* this, PlayState* play) { } Interface_NewDay(play, CURRENT_DAY); - D_801BDBC8 = 0xFE; - func_800FB758(play); + gSceneSeqState = SCENESEQ_MORNING; + Environment_PlaySceneSequence(play); func_800FEAF4(&play->envCtx); this->actionFunc = func_80A42AB8; } @@ -97,8 +97,8 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { gSaveContext.save.time = CLOCK_TIME(6, 0); Interface_NewDay(play, CURRENT_DAY); Message_DisplaySceneTitleCard(play, sDayMessages2[CURRENT_DAY - 1]); - D_801BDBC8 = 0xFE; - func_800FB758(play); + gSceneSeqState = SCENESEQ_MORNING; + Environment_PlaySceneSequence(play); func_800FEAF4(&play->envCtx); this->actionFunc = func_80A42AB8; } @@ -324,7 +324,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { } else { gSaveContext.save.day = 1; dayTemp = gSaveContext.save.day; - gSaveContext.save.daysElapsed = dayTemp; + gSaveContext.save.eventDayCount = dayTemp; this->csIdIndex = 1; this->unk_146 = gSaveContext.save.time; this->actionFunc = func_80A42AB8; @@ -517,38 +517,38 @@ void func_80A42F20(EnTest4* this, PlayState* play) { void func_80A430C8(EnTest4* this, PlayState* play) { if ((CURRENT_DAY == 2) && (gSaveContext.save.time >= CLOCK_TIME(7, 0)) && - (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.unk_F2[2] == 0)) { + (gSaveContext.save.time < CLOCK_TIME(17, 30)) && (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) { // rain? - gWeatherMode = 1; - func_800FD78C(play); - play->envCtx.unk_E3 = 1; - play->envCtx.unk_F2[0] = 0x3C; + gWeatherMode = WEATHER_MODE_1; + Environment_PlayStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_ON; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; } else { - if (play->envCtx.unk_F2[0] != 0) { + if (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0) { if ((play->state.frames % 4) == 0) { - play->envCtx.unk_F2[0]--; - if ((play->envCtx.unk_F2[0]) == 8) { - func_800FD858(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX]--; + if ((play->envCtx.precipitation[PRECIP_RAIN_MAX]) == 8) { + Environment_StopStormNatureAmbience(play); } } } } - if (gWeatherMode == 1) { + if (gWeatherMode == WEATHER_MODE_1) { this->state = TEST4_STATE_1; } } void func_80A431C8(EnTest4* this, PlayState* play) { if (((gSaveContext.save.time >= CLOCK_TIME(17, 30)) && (gSaveContext.save.time < CLOCK_TIME(23, 0)) && - (play->envCtx.unk_F2[0] != 0)) || - (play->envCtx.unk_F2[2] != 0)) { - gWeatherMode = 0; - play->envCtx.unk_E3 = 2; + (play->envCtx.precipitation[PRECIP_RAIN_MAX] != 0)) || + (play->envCtx.precipitation[PRECIP_SNOW_CUR] != 0)) { + gWeatherMode = WEATHER_MODE_CLEAR; + play->envCtx.lightningState = LIGHTNING_LAST; } - if (gWeatherMode == 0) { + if (gWeatherMode == WEATHER_MODE_CLEAR) { this->state = TEST4_STATE_0; } } @@ -557,7 +557,7 @@ void func_80A4323C(EnTest4* this, PlayState* play) { s32 temp_v0 = (this->actor.params >> 0xA) * 0x64; if (temp_v0 > 0) { - D_801F4E7A = temp_v0; + gSkyboxNumStars = temp_v0; } } @@ -568,7 +568,7 @@ void EnTest4_Update(Actor* thisx, PlayState* play) { if (!(player->stateFlags1 & PLAYER_STATE1_2)) { this->actionFunc(this, play); - if (func_800FE4B8(play) != 0) { + if (Environment_GetStormState(play) != STORM_STATE_OFF) { switch (this->state) { case TEST4_STATE_0: func_80A430C8(this, play); diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index bee7c94e7..9657f1b1e 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -375,24 +375,24 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) { EnTest6* this = THIS; s32 i; - play->envCtx.lightSettings.ambientColor[0] = 0; - play->envCtx.lightSettings.ambientColor[1] = 0; - play->envCtx.lightSettings.ambientColor[2] = 0; + play->envCtx.adjLightSettings.ambientColor[0] = 0; + play->envCtx.adjLightSettings.ambientColor[1] = 0; + play->envCtx.adjLightSettings.ambientColor[2] = 0; - play->envCtx.lightSettings.diffuseColor1[0] = 0; - play->envCtx.lightSettings.diffuseColor1[1] = 0; - play->envCtx.lightSettings.diffuseColor1[2] = 0; + play->envCtx.adjLightSettings.light1Color[0] = 0; + play->envCtx.adjLightSettings.light1Color[1] = 0; + play->envCtx.adjLightSettings.light1Color[2] = 0; - play->envCtx.lightSettings.diffuseColor2[0] = 0; - play->envCtx.lightSettings.diffuseColor2[1] = 0; - play->envCtx.lightSettings.diffuseColor2[2] = 0; + play->envCtx.adjLightSettings.light2Color[0] = 0; + play->envCtx.adjLightSettings.light2Color[1] = 0; + play->envCtx.adjLightSettings.light2Color[2] = 0; - play->envCtx.lightSettings.fogColor[0] = 0; - play->envCtx.lightSettings.fogColor[1] = 0; - play->envCtx.lightSettings.fogColor[2] = 0; + play->envCtx.adjLightSettings.fogColor[0] = 0; + play->envCtx.adjLightSettings.fogColor[1] = 0; + play->envCtx.adjLightSettings.fogColor[2] = 0; - play->envCtx.lightSettings.fogNear = 0; - play->envCtx.lightSettings.zFar = 0; + play->envCtx.adjLightSettings.fogNear = 0; + play->envCtx.adjLightSettings.zFar = 0; play->envCtx.fillScreen = false; @@ -425,7 +425,7 @@ void EnTest6_StartCutscene(EnTest6* this, PlayState* play) { break; default: - gSaveContext.save.daysElapsed = 0; + gSaveContext.save.eventDayCount = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; EnTest6_SetupAction(this, EnTest6_SharedSoTCutscene); diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index df0e829d4..417176d96 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -987,6 +987,7 @@ void EnTest7_Draw(Actor* thisx, PlayState* play) { func_80AF14FC(play, this->unk_15C); if (this->unk_144 & 4) { - func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f, 5.0f, 0, 0); + Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f, + 5.0f, 0, 0); } } diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 64a62f84a..7b88159f1 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -324,7 +324,7 @@ void func_80AECB6C(EnTk* this, PlayState* play) { } if (R_TIME_SPEED != 0.0f) { - this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED; + this->skelAnime.playSpeed = (f32)Environment_GetTimeSpeed(play) / R_TIME_SPEED; } else { this->skelAnime.playSpeed = 0.0f; } diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c index 551d7d774..3221878e3 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -77,7 +77,7 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) { arg2 = 0.0f; } play->envCtx.lightSettingOverride = 0; - play->envCtx.unk_E0 = 2; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL; play->envCtx.lightSetting = this->actor.world.rot.x; play->envCtx.prevLightSetting = this->actor.world.rot.z; play->envCtx.lightBlend = arg2; @@ -87,11 +87,11 @@ void func_8089F0A0(EnViewer* this, PlayState* play) { Player* player = GET_PLAYER(play); D_8089F3E4++; - if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != 255)) { - play->envCtx.lightSettingOverride = 255; - play->envCtx.unk_E0 = 0; + if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE)) { + play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE; + play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE; play->envCtx.lightBlend = 1.0f; - func_800FAAB4( + Environment_ChangeLightSetting( play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)); play->envCtx.lightBlend = 1.0f; play->envCtx.prevLightSetting = play->envCtx.lightSetting; diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index fb34c3b64..3aa4360f9 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -47,12 +47,6 @@ ActorInit En_Weather_Tag_InitVars = { (ActorFunc)EnWeatherTag_Draw, }; -extern f32 D_801F4E74; -extern u8 D_801BDBB8; -extern u8 D_801BDBB4; -extern u8 D_801F4E30; -extern s16 D_801F4E7A; - void EnWeatherTag_SetupAction(EnWeatherTag* this, EnWeatherTagActionFunc func) { this->actionFunc = func; } @@ -131,17 +125,17 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) { if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { - D_801BDBB8 = 1; - if (!(play->envCtx.lightMode == 0) || + gInterruptSongOfStorms = true; + if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) || ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { - D_801BDBB8 = 0; + gInterruptSongOfStorms = false; if (gWeatherMode != weatherMode) { gWeatherMode = weatherMode; play->envCtx.changeLightEnabled = true; play->envCtx.lightConfig = lightConfig; play->envCtx.changeLightNextConfig = changeLightNextConfig; - D_801BDBB4 = changeLightNextConfig; + gLightConfigAfterUnderwater = changeLightNextConfig; play->envCtx.changeDuration = changeDuration; play->envCtx.changeLightTimer = play->envCtx.changeDuration; } @@ -161,16 +155,16 @@ u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) { if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { - D_801BDBB8 = 1; - if (!(play->envCtx.lightMode == 0) || + gInterruptSongOfStorms = true; + if (!(play->envCtx.lightMode == LIGHT_MODE_TIME) || ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { - D_801BDBB8 = 0; - gWeatherMode = 0; + gInterruptSongOfStorms = false; + gWeatherMode = WEATHER_MODE_CLEAR; play->envCtx.changeLightEnabled = true; play->envCtx.lightConfig = lightConfig; play->envCtx.changeLightNextConfig = changeLightNextConfig; - D_801BDBB4 = changeLightNextConfig; + gLightConfigAfterUnderwater = changeLightNextConfig; play->envCtx.changeDuration = changeDuration; play->envCtx.changeLightTimer = play->envCtx.changeDuration; returnVal = 1; @@ -201,11 +195,11 @@ void func_8096689C(EnWeatherTag* this, PlayState* play) { play->envCtx.windSpeed = (this->actor.world.rot.z * partialResult) + 30.0f; if (partialResult > 0.01f) { - play->envCtx.sandstormState = 8; + play->envCtx.sandstormState = SANDSTORM_8; D_801F4E30 = 0x9B; - } else if (play->envCtx.sandstormState == 8) { + } else if (play->envCtx.sandstormState == SANDSTORM_8) { D_801F4E30 = 0; - play->envCtx.sandstormState = 9; + play->envCtx.sandstormState = SANDSTORM_9; } } @@ -243,7 +237,7 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) { // poisoned swamp: placed behind the water fall from ikana // this tag stops spawning after STT cleared? void func_80966B08(EnWeatherTag* this, PlayState* play) { - if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) { + if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == WEATHER_MODE_2)) { play->skyboxId = SKYBOX_3; EnWeatherTag_SetupAction(this, func_80966D20); } else if (D_801F4E74 <= 0.01f) { @@ -315,7 +309,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { EnWeatherTag_SetupAction(this, func_80966B08); } - if (gWeatherMode != 2) { + if (gWeatherMode != WEATHER_MODE_2) { EnWeatherTag_SetupAction(this, func_80966B08); } } @@ -325,7 +319,7 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { // path to goron village winter, winter mountain village void func_80966E0C(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 2, 60, 3)) { - play->envCtx.unk_F2[3] = 0x80; + play->envCtx.precipitation[PRECIP_SNOW_MAX] = 128; EnWeatherTag_SetupAction(this, func_80966E84); } } @@ -333,7 +327,7 @@ void func_80966E0C(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_WINTERFOG 2 void func_80966E84(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 2, 0, 60)) { - play->envCtx.unk_F2[3] = 0; + play->envCtx.precipitation[PRECIP_SNOW_MAX] = 0; EnWeatherTag_SetupAction(this, func_80966E0C); } } @@ -343,8 +337,8 @@ void func_80966E84(EnWeatherTag* this, PlayState* play) { // wait if you enter the scene through a room instead of fog you get a flash rain shower void func_80966EF0(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 2, 100, 4)) { - func_800FD78C(play); - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; EnWeatherTag_SetupAction(this, func_80966F74); } } @@ -352,8 +346,8 @@ void func_80966EF0(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_UNK3 2 void func_80966F74(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 2, 0, 100)) { - func_800FD858(play); - play->envCtx.unk_F2[0] = 0; + Environment_StopStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0; EnWeatherTag_SetupAction(this, func_80966EF0); } } @@ -365,7 +359,7 @@ void func_80966FEC(EnWeatherTag* this, PlayState* play) { // weirdly, not the same as the other param lookup used in the rest of the file, which is float s32 distance = WEATHER_TAG_RANGE100INT(&this->actor); if (distance > 0) { - D_801F4E7A = distance; + gSkyboxNumStars = distance; } if ((play->sceneId == SCENE_KAIZOKU) && (play->actorCtx.flags & ACTORCTX_FLAG_1)) { @@ -410,9 +404,9 @@ void EnWeatherTag_DoNothing(EnWeatherTag* this, PlayState* play) { // these two are isolated, they call themselves but nothing calls them? void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) { if (func_80966608(this, play, 0, 1, 0, 4, 100, 5)) { - func_800FD78C(play); - play->envCtx.unk_E3 = 1; - play->envCtx.unk_F2[0] = 60; + Environment_PlayStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_ON; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60; EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_80967250); } } @@ -420,9 +414,9 @@ void EnWeatherTag_Unused_809671B8(EnWeatherTag* this, PlayState* play) { // these two are isolated, they call themselves but nothing calls them void EnWeatherTag_Unused_80967250(EnWeatherTag* this, PlayState* play) { if (func_80966758(this, play, 1, 0, 4, 0, 100)) { - func_800FD858(play); - play->envCtx.unk_E3 = 2; - play->envCtx.unk_F2[0] = 0; + Environment_StopStormNatureAmbience(play); + play->envCtx.lightningState = LIGHTNING_LAST; + play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0; EnWeatherTag_SetupAction(this, EnWeatherTag_Unused_809671B8); } } @@ -442,20 +436,20 @@ void func_809672DC(EnWeatherTag* this, PlayState* play) { range = WEATHER_TAG_RANGE100(&this->actor); if (distance < range) { - play->envCtx.sandstormState = 6; + play->envCtx.sandstormState = SANDSTORM_6; strength = 1.0f - (distance / range); if (0.8f < strength) { strength = 1.0f; } D_801F4E30 = (200.0f * strength); } else { - if (play->envCtx.sandstormState == 6) { + if (play->envCtx.sandstormState == SANDSTORM_6) { D_801F4E30 = 0; - play->envCtx.sandstormState = 7; + play->envCtx.sandstormState = SANDSTORM_7; } } - Math_SmoothStepToS(&play->envCtx.lightSettings.fogNear, (s16)(-40.0f * strength), 1, 1, 1); + Math_SmoothStepToS(&play->envCtx.adjLightSettings.fogNear, -40.0f * strength, 1, 1, 1); } // WEATHERTAG_TYPE_LOCALDAY2RAIN: rain proximity as approaching rainy scene @@ -466,19 +460,19 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) { if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(&this->actor)) { if (CURRENT_DAY == 2) { if ((gSaveContext.save.time >= CLOCK_TIME(7, 0)) && (gSaveContext.save.time < CLOCK_TIME(17, 30)) && - (play->envCtx.unk_F2[2] == 0)) { + (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) { - gWeatherMode = 1; - func_800FD78C(play); - play->envCtx.unk_F2[4] = 0x20; + gWeatherMode = WEATHER_MODE_1; + Environment_PlayStormNatureAmbience(play); + play->envCtx.precipitation[PRECIP_SOS_MAX] = 32; EnWeatherTag_SetupAction(this, func_80967608); } } } else { - if ((play->envCtx.unk_F2[4] != 0) && !(play->state.frames & 3)) { - play->envCtx.unk_F2[4]--; - if ((play->envCtx.unk_F2[4]) == 8) { - func_800FD858(play); + if ((play->envCtx.precipitation[PRECIP_SOS_MAX] != 0) && !(play->state.frames & 3)) { + play->envCtx.precipitation[PRECIP_SOS_MAX]--; + if ((play->envCtx.precipitation[PRECIP_SOS_MAX]) == 8) { + Environment_StopStormNatureAmbience(play); } } } @@ -488,7 +482,7 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) { void func_80967608(EnWeatherTag* this, PlayState* play) { if ((WEATHER_TAG_RANGE100(&this->actor) + 10.0f) < Actor_WorldDistXZToActor(&GET_PLAYER(play)->actor, &this->actor)) { - gWeatherMode = 0; + gWeatherMode = WEATHER_MODE_CLEAR; EnWeatherTag_SetupAction(this, func_809674C8); } } diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index a708038f5..a3df9a7a2 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -119,19 +119,19 @@ void EnWizFire_Destroy(Actor* thisx, PlayState* play) { EnWizFire* this = THIS; if (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) { - play->envCtx.lightSettings.fogColor[2] = 0; - play->envCtx.lightSettings.fogColor[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.fogColor[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor2[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[2] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[1] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.fogColor[2]; - play->envCtx.lightSettings.fogNear = play->envCtx.lightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogColor[2] = 0; + play->envCtx.adjLightSettings.fogColor[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogColor[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light2Color[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.light1Color[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[2] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[1] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.ambientColor[0] = play->envCtx.adjLightSettings.fogColor[2]; + play->envCtx.adjLightSettings.fogNear = play->envCtx.adjLightSettings.fogColor[2]; } Collider_DestroyCylinder(play, &this->collider); @@ -518,38 +518,39 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { fogNear = 968.0f; } - play->envCtx.lightSettings.fogNear = (fogNear - (s16)play->envCtx.unk_C4.fogNear) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogNear = + (fogNear - (s16)play->envCtx.lightSettings.fogNear) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.ambientColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.ambientColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.ambientColor[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.ambientColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.ambientColor[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.ambientColor[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.ambientColor[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.ambientColor[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.diffuseColor1[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor1[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor1[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor1[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor1[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor1[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light1Color[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light1Color[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light1Color[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light1Color[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.diffuseColor2[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.diffuseColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor2[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.diffuseColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.diffuseColor2[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.diffuseColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.light2Color[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.light2Color[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.light2Color[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.light2Color[2]) * this->blendScaleFrac; index++; - play->envCtx.lightSettings.fogColor[0] = - ((f32)lightSettingsColors[index].r - play->envCtx.unk_C4.fogColor[0]) * this->blendScaleFrac; - play->envCtx.lightSettings.fogColor[1] = - ((f32)lightSettingsColors[index].g - play->envCtx.unk_C4.fogColor[1]) * this->blendScaleFrac; - play->envCtx.lightSettings.fogColor[2] = - ((f32)lightSettingsColors[index].b - play->envCtx.unk_C4.fogColor[2]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[0] = + ((f32)lightSettingsColors[index].r - play->envCtx.lightSettings.fogColor[0]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[1] = + ((f32)lightSettingsColors[index].g - play->envCtx.lightSettings.fogColor[1]) * this->blendScaleFrac; + play->envCtx.adjLightSettings.fogColor[2] = + ((f32)lightSettingsColors[index].b - play->envCtx.lightSettings.fogColor[2]) * this->blendScaleFrac; } } diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index 3846ecfd0..069c4b89b 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -328,7 +328,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) { if (floorBgId == BGCHECK_SCENE) { floorPoly = this->dyna.actor.floorPoly; if ((floorPoly != NULL) && (this->burrowFlag & 1)) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); + Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); } } diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index 2661b9cc5..dbefd93b9 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -55,11 +55,11 @@ void func_808DBEB0(ObjectKankyo* this, PlayState* play) { D_808DE5B0 = 0.0f; this->unk_144 = Rand_ZeroOne() * 360.0f; this->unk_148 = Rand_ZeroOne() * 360.0f; - if (play->envCtx.unk_F2[2] == 128) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == 128) { D_808DE5B0 = 1.0f; this->unk_114E = 1; - for (i = 0; i < play->envCtx.unk_F2[2]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) { this->unk_14C[i].unk_10 = Rand_ZeroOne() * -200.0f; } } else { @@ -107,7 +107,7 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) { break; case 2: - play->envCtx.unk_F2[2] = 0x80; + play->envCtx.precipitation[PRECIP_SNOW_CUR] = 128; func_808DBFB0(this, play); break; @@ -180,16 +180,16 @@ void func_808DC18C(ObjectKankyo* this, PlayState* play) { magnitude = play->envCtx.windSpeed / 60.0f; magnitude = CLAMP(magnitude, 0.0f, 1.0f); - sp30.x = play->envCtx.windDir.x * magnitude; - sp30.y = play->envCtx.windDir.y + 100.0f; - sp30.z = play->envCtx.windDir.z * magnitude; + sp30.x = play->envCtx.windDirection.x * magnitude; + sp30.y = play->envCtx.windDirection.y + 100.0f; + sp30.z = play->envCtx.windDirection.z * magnitude; this->unk_14C[2].unk_00 = 0x4000 - Math_Vec3f_Pitch(&gZeroVec3f, &sp30); this->unk_14C[2].unk_04 = Math_Vec3f_Yaw(&gZeroVec3f, &sp30) + 0x8000; } void func_808DC454(ObjectKankyo* this, PlayState* play) { s16 i; - u32 tempI; + s32 pad1; f32 phi_f20; f32 spD0; f32 spCC; @@ -214,7 +214,7 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { spCC = y / magnitude; spC8 = z / magnitude; - for (i = 0; i < play->envCtx.unk_F2[2]; i++) { + for (i = 0; i < play->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) { switch (this->unk_14C[i].unk_1C) { case 0: this->unk_14C[i].unk_00 = play->view.eye.x + (spD0 * 120.0f); @@ -231,14 +231,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { this->unk_14C[i].unk_10 = temp_f22; } else { this->unk_14C[i].unk_10 += temp_f22; - tempI = i; - if (play->envCtx.unk_F2[2] == (tempI + 1)) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] == ((u32)i + 1)) { this->unk_114E = 0; } } this->unk_14C[i].unk_14 = (Rand_ZeroOne() - 0.5f) * (2.0f * temp_120); - if (play->envCtx.unk_F2[4] == 0) { + if (play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) { this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 1.0f; } else { this->unk_14C[i].unk_18 = (Rand_ZeroOne() * 3.0f) + 8.0f; @@ -251,14 +250,14 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { temp_f28 = play->view.eye.y + (spCC * 120.0f); temp_f30 = play->view.eye.z + (spC8 * 120.0f); - magnitude = - sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z)); + magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) + + SQ(play->envCtx.windDirection.z)); if (magnitude == 0.0f) { magnitude = 0.001f; } - spC4 = -play->envCtx.windDir.x / magnitude; - spC0 = -play->envCtx.windDir.y / magnitude; - spBC = -play->envCtx.windDir.z / magnitude; + spC4 = -play->envCtx.windDirection.x / magnitude; + spC0 = -play->envCtx.windDirection.y / magnitude; + spBC = -play->envCtx.windDirection.z / magnitude; if (i == 0) { this->unk_144 += 0.049999997f * Rand_ZeroOne(); @@ -318,13 +317,13 @@ void func_808DC454(ObjectKankyo* this, PlayState* play) { } void func_808DCB7C(ObjectKankyo* this, PlayState* play) { - if (play->envCtx.unk_F2[2] < play->envCtx.unk_F2[3]) { + if (play->envCtx.precipitation[PRECIP_SNOW_CUR] < play->envCtx.precipitation[PRECIP_SNOW_MAX]) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] += 2; + play->envCtx.precipitation[PRECIP_SNOW_CUR] += 2; } - } else if (play->envCtx.unk_F2[3] < play->envCtx.unk_F2[2]) { + } else if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < play->envCtx.precipitation[PRECIP_SNOW_CUR]) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] -= 2; + play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 2; } } func_808DC454(this, play); @@ -333,24 +332,24 @@ void func_808DCB7C(ObjectKankyo* this, PlayState* play) { void func_808DCBF8(ObjectKankyo* this, PlayState* play) { f32 temp_f0; - if ((play->envCtx.unk_F2[2] > 0) && (this->unk_114C == 0)) { + if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] > 0) && (this->unk_114C == 0)) { if ((play->state.frames % 16) == 0) { - play->envCtx.unk_F2[2] -= 9; - if ((s8)play->envCtx.unk_F2[2] < 0) { - play->envCtx.unk_F2[2] = 0; + play->envCtx.precipitation[PRECIP_SNOW_CUR] -= 9; + if ((s8)play->envCtx.precipitation[PRECIP_SNOW_CUR] < 0) { + play->envCtx.precipitation[PRECIP_SNOW_CUR] = 0; } } } - temp_f0 = (f32)play->envCtx.unk_F2[2] / 128; + temp_f0 = (f32)play->envCtx.precipitation[PRECIP_SNOW_CUR] / 128; temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f); if (temp_f0 > 0.01f) { D_801F4E30 = 155.0f * temp_f0; - play->envCtx.sandstormState = 10; + play->envCtx.sandstormState = SANDSTORM_A; } else { D_801F4E30 = 0; - play->envCtx.sandstormState = 10; + play->envCtx.sandstormState = SANDSTORM_A; } func_808DC454(this, play); } @@ -413,14 +412,14 @@ void func_808DCDB4(ObjectKankyo* this, PlayState* play) { temp_f28 = play->view.eye.y + (spA8 * 120.0f); temp_f18 = play->view.eye.z + (spA4 * 120.0f); - magnitude = - sqrtf((f32)SQ(play->envCtx.windDir.x) + SQ(play->envCtx.windDir.y) + SQ(play->envCtx.windDir.z)); + magnitude = sqrtf((f32)SQ(play->envCtx.windDirection.x) + SQ(play->envCtx.windDirection.y) + + SQ(play->envCtx.windDirection.z)); if (magnitude == 0.0f) { magnitude = 0.001f; } - spA0 = -play->envCtx.windDir.x / magnitude; - sp9C = -play->envCtx.windDir.z / magnitude; + spA0 = -play->envCtx.windDirection.x / magnitude; + sp9C = -play->envCtx.windDirection.z / magnitude; if (i == 0) { this->unk_144 += 0.049999997f * Rand_ZeroOne(); @@ -512,7 +511,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { f32 temp_f2; f32 tempf; - if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.unk_E2 == 0)) { + if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.stormState == 0)) { return; } @@ -525,14 +524,14 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { temp_f0 = CLAMP(temp_f0, 0.0f, 1.0f); Math_SmoothStepToF(&D_808DE5B0, temp_f0, 0.2f, 0.1f, 0.001f); - sp68 = play->envCtx.unk_F2[2]; + sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR]; sp68 *= D_808DE5B0; - if ((play->envCtx.unk_F2[2] >= 32) && (sp68 < 32)) { + if ((play->envCtx.precipitation[PRECIP_SNOW_CUR] >= 32) && (sp68 < 32)) { sp68 = 32; } } else { - sp68 = play->envCtx.unk_F2[2]; + sp68 = play->envCtx.precipitation[PRECIP_SNOW_CUR]; } for (i = 0; i < sp68; i++) { @@ -654,7 +653,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); s32 i; u8 phi_s5; - u16 end = play->envCtx.unk_F2[1]; + u16 end = play->envCtx.precipitation[PRECIP_RAIN_CUR]; f32 temp_f12; f32 temp_f20; f32 temp_f22; diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index be5374519..2dbfecfdf 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -144,7 +144,7 @@ void OceffSpot_Update(Actor* thisx, PlayState* play) { temp = (2.0f - this->unk16C) * this->unk16C; - func_800FD2B4(play, temp * 0.5f, 880.0f, 0.2f, 0.9f); + Environment_AdjustLights(play, temp * 0.5f, 880.0f, 0.2f, 0.9f); Lights_PointNoGlowSetInfo(&this->lightInfo1, this->actor.world.pos.x, this->actor.world.pos.y + 55.0f, this->actor.world.pos.z, (s32)(255.0f * temp), (s32)(255.0f * temp), (s32)(200.0f * temp), diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index d04907e50..083b8c05f 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -522,7 +522,7 @@ FloorEffect sPlayerFloorEffect; Input* sPlayerControlInput; s32 sPlayerUseHeldItem; // When true, the current held item is used. Is reset to false every frame. s32 sPlayerHeldItemButtonIsHeldDown; // Indicates if the button for the current held item is held down. -EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings +AdjLightSettings D_80862B50; // backup of lay->envCtx.adjLightSettings s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? s32 func_8082DA90(PlayState* play) { @@ -6284,7 +6284,7 @@ s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* o f32 yIntersect = func_80835CD8(play, this, &D_8085D100, &pos, outPoly, outBgId); if ((*outBgId == BGCHECK_SCENE) && (fabsf(this->actor.world.pos.y - yIntersect) < 10.0f)) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId)); + Environment_ChangeLightSetting(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId)); return true; } return false; @@ -7323,7 +7323,7 @@ void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerFor gSaveContext.save.playerForm = playerForm; this->stateFlags1 |= PLAYER_STATE1_2; - D_80862B50 = play->envCtx.lightSettings; + D_80862B50 = play->envCtx.adjLightSettings; this->actor.velocity.y = 0.0f; Actor_DeactivateLens(play); } @@ -11243,7 +11243,8 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) { func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId)); if (this->actor.floorBgId == BGCHECK_SCENE) { - func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); + Environment_ChangeLightSetting( + play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); } else { DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId); } @@ -11838,9 +11839,9 @@ void func_80844784(PlayState* play, Player* this) { } if (play->envCtx.windSpeed >= 50.0f) { - temp_fa0 = play->envCtx.windDir.x; - temp_fa1 = play->envCtx.windDir.y; - temp_ft4 = play->envCtx.windDir.z; + temp_fa0 = play->envCtx.windDirection.x; + temp_fa1 = play->envCtx.windDirection.y; + temp_ft4 = play->envCtx.windDirection.z; temp_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4)); if (temp_fv0_2 != 0.0f) { @@ -12617,7 +12618,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { CLAMP_MIN(spB8, spB4) * this->actor.scale.z * 1.15f, MTXMODE_APPLY); Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); Scene_SetRenderModeXlu(play, 0, 1); - Lib_LerpRGB(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC); + Color_RGB8_Lerp(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC); gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255); @@ -17838,14 +17839,14 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { u8* new_var; s32 pad[4]; - new_var = play->envCtx.unk_C4.diffuseColor1; - sp70.fogNear = play->envCtx.unk_C4.fogNear; - sp70.fogColor[0] = play->envCtx.unk_C4.fogColor[0]; - sp70.fogColor[1] = play->envCtx.unk_C4.fogColor[1]; - sp70.fogColor[2] = play->envCtx.unk_C4.fogColor[2]; - sp70.ambientColor[0] = play->envCtx.unk_C4.ambientColor[0]; - sp70.ambientColor[1] = play->envCtx.unk_C4.ambientColor[1]; - sp70.ambientColor[2] = play->envCtx.unk_C4.ambientColor[2]; + new_var = play->envCtx.lightSettings.light1Color; + sp70.fogNear = play->envCtx.lightSettings.fogNear; + sp70.fogColor[0] = play->envCtx.lightSettings.fogColor[0]; + sp70.fogColor[1] = play->envCtx.lightSettings.fogColor[1]; + sp70.fogColor[2] = play->envCtx.lightSettings.fogColor[2]; + sp70.ambientColor[0] = play->envCtx.lightSettings.ambientColor[0]; + sp70.ambientColor[1] = play->envCtx.lightSettings.ambientColor[1]; + sp70.ambientColor[2] = play->envCtx.lightSettings.ambientColor[2]; if (arg1 <= 1.0f) { arg1 -= 0.0f; @@ -17876,13 +17877,13 @@ void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { var_t4 = D_8085D844; } - play->envCtx.lightSettings.fogNear = - ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.fogNear; + play->envCtx.adjLightSettings.fogNear = + ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.lightSettings.fogNear; - func_80854CD0(arg1, play->envCtx.lightSettings.fogColor, var_v1->fogColor, var_t0->fogColor, - play->envCtx.unk_C4.fogColor, play->envCtx.lightSettings.ambientColor, var_v1->ambientColor, - var_t0->ambientColor, play->envCtx.unk_C4.ambientColor, play->envCtx.lightSettings.diffuseColor1, - var_t3, var_t4, new_var); + func_80854CD0(arg1, play->envCtx.adjLightSettings.fogColor, var_v1->fogColor, var_t0->fogColor, + play->envCtx.lightSettings.fogColor, play->envCtx.adjLightSettings.ambientColor, var_v1->ambientColor, + var_t0->ambientColor, play->envCtx.lightSettings.ambientColor, + play->envCtx.adjLightSettings.light1Color, var_t3, var_t4, new_var); } struct_8085D848 D_8085D848[] = { @@ -18107,7 +18108,7 @@ void Player_Action_87(Player* this, PlayState* play) { this->prevMask = this->currentMask; this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]; Player_StopCutscene(this); - play->envCtx.lightSettings = D_80862B50; + play->envCtx.adjLightSettings = D_80862B50; func_8085B384(this, play); return; } diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c index 61eb3aebd..139568f3b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c +++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c @@ -26,7 +26,7 @@ u32 EffectSsLightning_Init(PlayState* play, u32 index, EffectSs* this, void* ini void EffectSsLightning_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this); -TexturePtr sLightningTextures[] = { +static TexturePtr sLightningTextures[] = { gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex, gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex, }; diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 637a20906..2c2e9a6b1 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -84,7 +84,7 @@ void DayTelop_Update(DayTelopState* this, GameState* thisx) { SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); gSaveContext.save.time = CLOCK_TIME(6, 0); - D_801BDBC8 = 0xFE; + gSceneSeqState = SCENESEQ_MORNING; } else if (this->transitionCountdown == 90) { this->fadeInState = DAYTELOP_HOURSTEXT_FADEIN; this->alpha = 0; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index a47b5ed9e..65d26a97e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2197,7 +2197,7 @@ void FileSelect_LoadGame(GameState* thisx) { gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.cutsceneTrigger = 0; gSaveContext.chamberCutsceneNum = 0; - gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.nextDayTime = NEXT_TIME_NONE; gSaveContext.retainWeatherMode = false; gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; @@ -2489,7 +2489,7 @@ void FileSelect_InitContext(GameState* thisx) { Skybox_Init(&this->state, &this->skyboxCtx, 1); R_TIME_SPEED = 10; - envCtx->changeSkyboxState = 0; + envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE; envCtx->changeSkyboxTimer = 0; envCtx->changeLightEnabled = false; envCtx->changeLightTimer = 0; diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 06775bf6e..7a79da010 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -51,7 +51,7 @@ void MapSelect_LoadGame(MapSelectState* this, u32 entrance, s32 spawn) { gSaveContext.respawn[RESPAWN_MODE_ZORA].entrance = 0xFF; gSaveContext.respawn[RESPAWN_MODE_DEKU].entrance = 0xFF; gSaveContext.respawn[RESPAWN_MODE_HUMAN].entrance = 0xFF; - gWeatherMode = 0; + gWeatherMode = WEATHER_MODE_CLEAR; STOP_GAMESTATE(&this->state); SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0d5c950c6..a5bcf5354 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1706,86 +1706,86 @@ 0x800F4F54:("Font_LoadCharNES",), 0x800F4FC0:("Font_LoadMessageBoxEndIcon",), 0x800F5004:("Font_LoadOrderedFont",), - 0x800F5090:("func_800F5090",), + 0x800F5090:("Environment_GraphCallback",), 0x800F50D4:("Environment_ZBufValToFixedPoint",), 0x800F510C:("Environment_Init",), - 0x800F5954:("func_800F5954",), + 0x800F5954:("Environment_SmoothStepToU8",), 0x800F5A8C:("Environment_LerpWeight",), - 0x800F5B10:("func_800F5B10",), + 0x800F5B10:("Environment_LerpWeightAccelDecel",), 0x800F5CD0:("Environment_UpdateSkybox",), - 0x800F6834:("func_800F6834",), - 0x800F694C:("func_800F694C",), - 0x800F6A04:("func_800F6A04",), - 0x800F6A40:("func_800F6A40",), - 0x800F6AB8:("func_800F6AB8",), - 0x800F6B44:("func_800F6B44",), + 0x800F6834:("Environment_EnableUnderwaterLights",), + 0x800F694C:("Environment_DisableUnderwaterLights",), + 0x800F6A04:("Environment_WipeRumbleRequests",), + 0x800F6A40:("Environment_UpdateSkyboxRotY",), + 0x800F6AB8:("Environment_UpdateNextDayTime",), + 0x800F6B44:("Environment_UpdateTime",), 0x800F6CEC:("func_800F6CEC",), 0x800F6EA4:("func_800F6EA4",), - 0x800F6FCC:("Kankyo_IsSceneUpsideDown",), - 0x800F6FF8:("func_800F6FF8",), - 0x800F8554:("func_800F8554",), + 0x800F6FCC:("Environment_IsSceneUpsideDown",), + 0x800F6FF8:("Environment_UpdateLights",), + 0x800F8554:("Environment_UpdateSun",), 0x800F88C4:("func_800F88C4",), 0x800F8970:("func_800F8970",), - 0x800F8A9C:("func_800F8A9C",), + 0x800F8A9C:("Environment_UpdatePostmanEvents",), 0x800F8CD4:("Environment_Update",), - 0x800F8D84:("func_800F8D84",), + 0x800F8D84:("Environment_DrawSun",), 0x800F9728:("Environment_DrawSunLensFlare",), - 0x800F9824:("func_800F9824",), - 0x800FA39C:("func_800FA39C",), - 0x800FA3C4:("func_800FA3C4",), + 0x800F9824:("Environment_DrawLensFlare",), + 0x800FA39C:("Environment_RandCentered",), + 0x800FA3C4:("Environment_DrawRainImpl",), 0x800FA9FC:("Environment_DrawRain",), - 0x800FAAB4:("func_800FAAB4",), - 0x800FAC20:("func_800FAC20",), - 0x800FAF74:("func_800FAF74",), - 0x800FB010:("func_800FB010",), + 0x800FAAB4:("Environment_ChangeLightSetting",), + 0x800FAC20:("Environment_DrawSkyboxFilters",), + 0x800FAF74:("Environment_DrawLightningFlash",), + 0x800FB010:("Environment_UpdateLightningStrike",), 0x800FB320:("Environment_AddLightningBolts",), - 0x800FB388:("func_800FB388",), - 0x800FB758:("func_800FB758",), - 0x800FB9B4:("func_800FB9B4",), + 0x800FB388:("Environment_DrawLightning",), + 0x800FB758:("Environment_PlaySceneSequence",), + 0x800FB9B4:("Environment_UpdateTimeBasedSequence",), 0x800FBCBC:("Environment_DrawCustomLensFlare",), - 0x800FBDEC:("Kankyo_InitGameOverLights",), - 0x800FBF3C:("Kankyo_FadeInGameOverLights",), - 0x800FC158:("Kankyo_FadeOutGameOverLights",), - 0x800FC3DC:("func_800FC3DC",), + 0x800FBDEC:("Environment_InitGameOverLights",), + 0x800FBF3C:("Environment_FadeInGameOverLights",), + 0x800FC158:("Environment_FadeOutGameOverLights",), + 0x800FC3DC:("Environment_UpdateRain",), 0x800FC444:("Environment_FillScreen",), 0x800FC64C:("Environment_DrawSandstorm",), - 0x800FD2B4:("func_800FD2B4",), - 0x800FD538:("func_800FD538",), + 0x800FD2B4:("Environment_AdjustLights",), + 0x800FD538:("Environment_LerpRGB8",), 0x800FD59C:("Environment_LerpAmbientColor",), 0x800FD5E0:("Environment_LerpDiffuseColor",), 0x800FD654:("Environment_LerpFogColor",), 0x800FD698:("Environment_LerpFog",), - 0x800FD720:("get_days_elapsed",), - 0x800FD730:("reset_days_elapsed",), - 0x800FD740:("get_current_day",), - 0x800FD750:("func_800FD750",), - 0x800FD768:("func_800FD768",), - 0x800FD78C:("func_800FD78C",), - 0x800FD858:("func_800FD858",), - 0x800FD928:("func_800FD928",), - 0x800FD980:("func_800FD980",), - 0x800FDAF8:("func_800FDAF8",), - 0x800FDC94:("func_800FDC94",), - 0x800FE390:("func_800FE390",), - 0x800FE3E0:("func_800FE3E0",), + 0x800FD720:("Environment_GetEventDayCount",), + 0x800FD730:("Environment_ClearEventDayCount",), + 0x800FD740:("Environment_GetTotalDays",), + 0x800FD750:("Environment_ForcePlaySequence",), + 0x800FD768:("Environment_IsForcedSequenceDisabled",), + 0x800FD78C:("Environment_PlayStormNatureAmbience",), + 0x800FD858:("Environment_StopStormNatureAmbience",), + 0x800FD928:("Environment_WarpSongLeave",), + 0x800FD980:("Environment_SetupSkyboxStars",), + 0x800FDAF8:("Environment_DrawSkyboxStar",), + 0x800FDC94:("Environment_DrawSkyboxStarsImpl",), + 0x800FE390:("Environment_Draw",), + 0x800FE3E0:("Environment_DrawSkyboxStars",), 0x800FE484:("Environment_StopTime",), 0x800FE498:("Environment_StartTime",), 0x800FE4A8:("Environment_IsTimeStopped",), - 0x800FE4B8:("func_800FE4B8",), - 0x800FE590:("func_800FE590",), + 0x800FE4B8:("Environment_GetStormState",), + 0x800FE590:("Environment_IsFinalHours",), 0x800FE5D0:("func_800FE5D0",), 0x800FE610:("func_800FE610",), - 0x800FE620:("func_800FE620",), - 0x800FE658:("func_800FE658",), + 0x800FE620:("Environment_GetTimeSpeed",), + 0x800FE658:("Environment_SetTimeJump",), 0x800FE6F8:("func_800FE6F8",), - 0x800FE778:("func_800FE778",), - 0x800FE788:("func_800FE788",), - 0x800FE798:("func_800FE798",), - 0x800FE7A8:("func_800FE7A8",), + 0x800FE778:("Environment_GetSandstormColorIndex",), + 0x800FE788:("Environment_GetNextSandstormColorIndex",), + 0x800FE798:("Environment_GetSandstormLerpScale",), + 0x800FE7A8:("Environment_LerpSandstormColors",), 0x800FE9B4:("func_800FE9B4",), 0x800FEA50:("func_800FEA50",), 0x800FEAB0:("func_800FEAB0",), - 0x800FEAC0:("func_800FEAC0",), + 0x800FEAC0:("Environment_JumpForwardInTime",), 0x800FEAF4:("func_800FEAF4",), 0x800FEC90:("Lib_MemCpy",), 0x800FECC0:("Lib_MemSet",), @@ -1849,7 +1849,7 @@ 0x801000CC:("Lib_PlaySfx_2",), 0x801000F4:("Lib_PlaySfx_AtPos",), 0x8010011C:("Lib_Vec3f_TranslateAndRotateY",), - 0x801001B8:("Lib_LerpRGB",), + 0x801001B8:("Color_RGB8_Lerp",), 0x80100448:("Math_Vec3f_StepTo",), 0x801004FC:("Lib_Nop801004FC",), 0x80100504:("Lib_SegmentedToVirtual",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6f243b124..1d3913e65 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -946,36 +946,33 @@ 0x801BDB08:("sKaleidoSetupRightPageEyeX","UNK_TYPE1","",0x1), 0x801BDB18:("sKaleidoSetupRightPageEyeZ","UNK_TYPE1","",0x1), 0x801BDB30:("kanfontOrdering","u8","[92]",0x5c), - 0x801BDB90:("D_801BDB90","f32","",0x4), - 0x801BDB94:("D_801BDB94","UNK_TYPE4","",0x4), - 0x801BDB98:("D_801BDB98","UNK_TYPE4","",0x4), - 0x801BDB9C:("D_801BDB9C","UNK_TYPE2","",0x2), - 0x801BDBA0:("D_801BDBA0","UNK_TYPE1","",0x1), - 0x801BDBA4:("D_801BDBA4","UNK_TYPE1","",0x1), + 0x801BDB90:("sSandstormLerpScale","f32","",0x4), + 0x801BDB94:("sSunScreenDepth","UNK_TYPE4","",0x4), + 0x801BDB98:("sEnvSkyboxNumStars","UNK_TYPE4","",0x4), + 0x801BDB9C:("sTimeJump","UNK_TYPE2","",0x2), + 0x801BDBA0:("sSandstormColorIndex","UNK_TYPE1","",0x1), + 0x801BDBA4:("sNextSandstormColorIndex","UNK_TYPE1","",0x1), 0x801BDBA8:("D_801BDBA8","UNK_TYPE1","",0x1), 0x801BDBB0:("gWeatherMode","u8","",0x1), - 0x801BDBB4:("D_801BDBB4","UNK_TYPE1","",0x1), - 0x801BDBB8:("D_801BDBB8","UNK_TYPE1","",0x1), - 0x801BDBBC:("D_801BDBBC","UNK_TYPE1","",0x1), + 0x801BDBB4:("gLightConfigAfterUnderwater","UNK_TYPE1","",0x1), + 0x801BDBB8:("gInterruptSongOfStorms","UNK_TYPE1","",0x1), + 0x801BDBBC:("sSkyboxIsChanging","UNK_TYPE1","",0x1), 0x801BDBC0:("D_801BDBC0","UNK_TYPE1","",0x1), 0x801BDBC4:("D_801BDBC4","UNK_TYPE1","",0x1), - 0x801BDBC8:("D_801BDBC8","u8","",0x1), - 0x801BDBCC:("D_801BDBCC","UNK_TYPE1","",0x1), - 0x801BDCF4:("D_801BDCF4","UNK_TYPE1","",0x1), - 0x801BE38E:("D_801BE38E","UNK_TYPE1","",0x1), - 0x801BE38F:("D_801BE38F","UNK_TYPE1","",0x1), - 0x801BE390:("D_801BE390","UNK_TYPE1","",0x1), - 0x801BE4D4:("D_801BE4D4","UNK_TYPE1","",0x1), - 0x801BE4F4:("D_801BE4F4","UNK_TYPE1","",0x1), - 0x801BE534:("D_801BE534","UNK_TYPE1","",0x1), - 0x801BE6D4:("D_801BE6D4","UNK_TYPE1","",0x1), - 0x801BE874:("D_801BE874","UNK_TYPE1","",0x1), - 0x801BE894:("D_801BE894","UNK_TYPE4","",0x4), - 0x801BE8BC:("D_801BE8BC","UNK_TYPE4","",0x4), - 0x801BE8E4:("D_801BE8E4","UNK_TYPE4","",0x4), - 0x801BE90C:("D_801BE90C","UNK_TYPE1","",0x1), - 0x801BE92C:("D_801BE92C","UNK_TYPE1","",0x1), - 0x801BE944:("D_801BE944","UNK_TYPE1","",0x1), + 0x801BDBC8:("gSceneSeqState","u8","",0x1), + 0x801BDBCC:("sTimeBasedLightConfigs","UNK_TYPE1","",0x1), + 0x801BDCF4:("sTimeBasedSkyboxConfigs","TimeBasedSkyboxEntry","[28][9]",0x7E0), + 0x801BE4D4:("sNormalSkyFiles","UNK_TYPE1","",0x1), + 0x801BE4F4:("sZBufValConversionTable","UNK_TYPE1","",0x1), + 0x801BE534:("sSkyboxPrimColors","UNK_TYPE1","",0x1), + 0x801BE6D4:("sSkyboxEnvColors","UNK_TYPE1","",0x1), + 0x801BE874:("sLensFlareColors","UNK_TYPE1","",0x1), + 0x801BE894:("sLensFlareScales","UNK_TYPE4","",0x4), + 0x801BE8BC:("sLensFlareAlphas","UNK_TYPE4","",0x4), + 0x801BE8E4:("sLensFlareTypes","UNK_TYPE4","",0x4), + 0x801BE90C:("sLightningTextures","UNK_TYPE1","",0x1), + 0x801BE92C:("sSandstormPrimColors","UNK_TYPE1","",0x1), + 0x801BE944:("sSandstormEnvColors","UNK_TYPE1","",0x1), 0x801BE960:("sInitChainHandlers","actor_init_var_func","[11]",0x2c), 0x801BE990:("sHeartsPrimColors","s16","[3][3]",0x12), 0x801BE9A4:("sHeartsEnvColors","s16","[3][3]",0x12), @@ -3870,45 +3867,45 @@ 0x801F4E20:("D_801F4E20","UNK_TYPE1","",0x1), 0x801F4E30:("D_801F4E30","UNK_TYPE1","",0x1), 0x801F4E31:("D_801F4E31","UNK_TYPE1","",0x1), - 0x801F4E32:("D_801F4E32","UNK_TYPE1","",0x1), - 0x801F4E38:("D_801F4E38","UNK_TYPE1","",0x1), + 0x801F4E32:("gCustomLensFlare1On","UNK_TYPE1","",0x1), + 0x801F4E38:("gCustomLensFlare1Pos","UNK_TYPE1","",0x1), 0x801F4E3C:("D_801F4E3C","UNK_TYPE1","",0x1), 0x801F4E40:("D_801F4E40","UNK_TYPE1","",0x1), 0x801F4E44:("D_801F4E44","UNK_TYPE1","",0x1), 0x801F4E48:("D_801F4E48","UNK_TYPE1","",0x1), 0x801F4E4C:("D_801F4E4C","UNK_TYPE1","",0x1), - 0x801F4E4E:("D_801F4E4E","UNK_TYPE1","",0x1), - 0x801F4E50:("D_801F4E50","UNK_TYPE1","",0x1), + 0x801F4E4E:("gCustomLensFlare2On","UNK_TYPE1","",0x1), + 0x801F4E50:("gCustomLensFlare2Pos","UNK_TYPE1","",0x1), 0x801F4E54:("D_801F4E54","UNK_TYPE1","",0x1), 0x801F4E58:("D_801F4E58","UNK_TYPE1","",0x1), 0x801F4E5C:("D_801F4E5C","UNK_TYPE1","",0x1), 0x801F4E60:("D_801F4E60","UNK_TYPE1","",0x1), 0x801F4E64:("D_801F4E64","UNK_TYPE1","",0x1), - 0x801F4E68:("D_801F4E68","UNK_TYPE1","",0x1), + 0x801F4E68:("gLightningStrike","UNK_TYPE1","",0x1), 0x801F4E70:("D_801F4E70","UNK_TYPE1","",0x1), 0x801F4E74:("D_801F4E74","UNK_TYPE1","",0x1), 0x801F4E78:("D_801F4E78","UNK_TYPE1","",0x1), - 0x801F4E7A:("D_801F4E7A","s16","",0x2), - 0x801F4E80:("D_801F4E80","UNK_TYPE1","",0x1), - 0x801F4EE0:("D_801F4EE0","UNK_TYPE1","",0x1), - 0x801F4EE8:("D_801F4EE8","UNK_TYPE1","",0x1), - 0x801F4EF8:("D_801F4EF8","UNK_TYPE1","",0x1), - 0x801F4F00:("D_801F4F00","UNK_TYPE1","",0x1), - 0x801F4F10:("D_801F4F10","UNK_TYPE1","",0x1), - 0x801F4F14:("D_801F4F14","UNK_TYPE1","",0x1), - 0x801F4F18:("D_801F4F18","UNK_TYPE1","",0x1), - 0x801F4F1C:("D_801F4F1C","UNK_TYPE1","",0x1), - 0x801F4F20:("D_801F4F20","UNK_TYPE1","",0x1), - 0x801F4F24:("D_801F4F24","UNK_TYPE1","",0x1), + 0x801F4E7A:("gSkyboxNumStars","s16","",0x2), + 0x801F4E80:("sLightningBolts","UNK_TYPE1","",0x1), + 0x801F4EE0:("sNGameOverLightNode","UNK_TYPE1","",0x1), + 0x801F4EE8:("sNGameOverLightInfo","UNK_TYPE1","",0x1), + 0x801F4EF8:("sSGameOverLightNode","UNK_TYPE1","",0x1), + 0x801F4F00:("sSGameOverLightInfo","UNK_TYPE1","",0x1), + 0x801F4F10:("sSunEnvAlpha","UNK_TYPE1","",0x1), + 0x801F4F14:("sSunColor","UNK_TYPE1","",0x1), + 0x801F4F18:("sSunScale","UNK_TYPE1","",0x1), + 0x801F4F1C:("sSunPrimAlpha","UNK_TYPE1","",0x1), + 0x801F4F20:("sSunDepthTestX","UNK_TYPE1","",0x1), + 0x801F4F24:("sSunDepthTestY","UNK_TYPE1","",0x1), 0x801F4F28:("D_801F4F28","UNK_TYPE1","",0x1), - 0x801F4F2C:("D_801F4F2C","UNK_TYPE1","",0x1), - 0x801F4F2E:("D_801F4F2E","UNK_TYPE1","",0x1), + 0x801F4F2C:("sLightningFlashAlpha","UNK_TYPE1","",0x1), + 0x801F4F2E:("sSandstormScroll","UNK_TYPE1","",0x1), 0x801F4F30:("D_801F4F30","UNK_TYPE1","",0x1), 0x801F4F31:("D_801F4F31","UNK_TYPE1","",0x1), - 0x801F4F32:("D_801F4F32","UNK_TYPE1","",0x1), + 0x801F4F32:("sEnvIsTimeStopped","UNK_TYPE1","",0x1), 0x801F4F33:("D_801F4F33","UNK_TYPE1","",0x1), - 0x801F4F34:("D_801F4F34","UNK_TYPE1","",0x1), - 0x801F4F38:("D_801F4F38","UNK_TYPE1","",0x1), + 0x801F4F34:("sGameOverLightsIntensity","UNK_TYPE1","",0x1), + 0x801F4F38:("sSkyboxStarsDList","UNK_TYPE1","",0x1), 0x801F4F40:("sBeatingHeartsDDPrim","s32","[3]",0x6), 0x801F4F48:("sBeatingHeartsDDEnv","s32","[3]",0x6), 0x801F4F50:("sHeartsDDPrim","s32","[2][3]",0xC), diff --git a/tools/namefixer.py b/tools/namefixer.py index 1fe4ce07f..12ff471aa 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -649,10 +649,64 @@ wordReplace = { "func_800A81F0": "EffectBlure_AddVertex", "func_800A8514": "EffectBlure_AddSpace", "Effect_GetParams": "Effect_GetByIndex", + "func_800FE484": "Environment_StopTime", "func_800FE498": "Environment_StartTime", "func_800FE4A8": "Environment_IsTimeStopped", "func_800F5A8C": "Environment_LerpWeight", + "func_800FD2B4": "Environment_AdjustLights", + "func_800FAAB4": "Environment_ChangeLightSetting", + "func_800FD78C": "Environment_PlayStormNatureAmbience", + "func_800FD858": "Environment_StopStormNatureAmbience", + "func_800F6834": "Environment_EnableUnderwaterLights", + "func_800F9824": "Environment_DrawLensFlare", + "func_800FE658": "Environment_SetTimeJump", + "func_800FE620": "Environment_GetTimeSpeed", + "func_800FD750": "Environment_ForcePlaySequence", + "func_800FE7A8": "Environment_LerpSandstormColors", + "func_800FB758": "Environment_PlaySceneSequence", + "func_800FE4B8": "Environment_GetStormState", + "Kankyo_FadeInGameOverLights": "Environment_FadeInGameOverLights", + "Kankyo_InitGameOverLights": "Environment_InitGameOverLights", + "Kankyo_FadeOutGameOverLights": "Environment_FadeOutGameOverLights", + "func_800F5090": "Environment_GraphCallback", + "func_800F5954": "Environment_SmoothStepToU8", + "func_800F5B10": "Environment_LerpWeightAccelDecel", + "func_800F694C": "Environment_DisableUnderwaterLights", + "func_800F6A40": "Environment_UpdateSkyboxRotY", + "func_800F6AB8": "Environment_UpdateNextDayTime", + "func_800F6B44": "Environment_UpdateTime", + "Kankyo_IsSceneUpsideDown": "Environment_IsSceneUpsideDown", + "func_800F6FF8": "Environment_UpdateLights", + "func_800F8554": "Environment_UpdateSun", + "func_800F8A9C": "Environment_UpdatePostmanEvents", + "func_800F8D84": "Environment_DrawSun", + "func_800FA39C": "Environment_RandCentered", + "func_800FA3C4": "Environment_DrawRainImpl", + "func_800FAC20": "Environment_DrawSkyboxFilters", + "func_800FAF74": "Environment_DrawLightningFlash", + "func_800FB010": "Environment_UpdateLightningStrike", + "func_800FB388": "Environment_DrawLightning", + "func_800FB9B4": "Environment_UpdateTimeBasedSequence", + "func_800FC3DC": "Environment_UpdateRain", + "func_800FD538": "Environment_LerpRGB8", + "get_days_elapsed": "Environment_GetEventDayCount", + "reset_days_elapsed": "Environment_ClearEventDayCount", + "get_current_day": "Environment_GetTotalDays", + "func_800FD768": "Environment_IsForcedSequenceDisabled", + "func_800FD928": "Environment_WarpSongLeave", + "func_800FD980": "Environment_SetupSkyboxStars", + "func_800FDAF8": "Environment_DrawSkyboxStar", + "func_800FDC94": "Environment_DrawSkyboxStarsImpl", + "func_800FE390": "Environment_Draw", + "func_800FE3E0": "Environment_DrawSkyboxStars", + "func_800FE590": "Environment_IsFinalHours", + "func_800FE778": "Environment_GetSandstormColorIndex", + "func_800FE788": "Environment_GetNextSandstormColorIndex", + "func_800FE798": "Environment_GetSandstormLerpScale", + "func_800FE7A8": "Environment_LerpSandstormColors", + "func_800FEAC0": "Environment_JumpForwardInTime", + "func_801A3F54": "Audio_SetCutsceneFlag", "func_800EA0D4": "Cutscene_StartManual", @@ -1031,6 +1085,8 @@ wordReplace = { "gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData", "gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum", + "gSaveContext.save.daysElapsed": "gSaveContext.save.eventDayCount", + "player->unk_A87": "player->exchangeItemAction", "player->exchangeItemId": "player->exchangeItemAction", "player->leftHandActor": "player->heldActor", @@ -1085,7 +1141,7 @@ wordReplace = { "globalCtx->mf_187FC": "play->billboardMtxF", "globalCtx->projectionMatrix": "play->viewProjectionMtxF", "globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[", - "globalCtx->envCtx.unk_8C": "play->envCtx.lightSettings", + "globalCtx->envCtx.unk_8C": "play->envCtx.adjLightSettings", "globalCtx->envCtx.unk_E5": "play->envCtx.fillScreen", "globalCtx->envCtx.unk_E6": "play->envCtx.screenFillColor", "globalCtx->envCtx.unk_C3": "play->envCtx.lightSettingOverride", @@ -1161,6 +1217,15 @@ wordReplace = { "play->roomCtx.unk31": "play->roomCtx.status", "play->objectCtx.status": "play->objectCtx.slots", + "play->envCtx.unk_E0": "play->envCtx.lightBlendOverride", + "play->envCtx.unk_E1": "play->envCtx.stormRequest", + "play->envCtx.unk_E2": "play->envCtx.stormState", + "play->envCtx.unk_E3": "play->envCtx.lightningState", + "play->envCtx.unk_E4": "play->envCtx.timeSeqState", + "play->envCtx.unk_F2": "play->envCtx.precipitation", + "play->envCtx.windDir": "play->envCtx.windDirection", + "play->envCtx.sunMoonDisabled": "play->envCtx.sunDisabled", + "actorCtx.unkC": "actorCtx.halfDaysBit", "actorCtx.unk1F4": "actorCtx.playerImpact.type", "actorCtx.unk1F5": "actorCtx.playerImpact.timer", @@ -1198,6 +1263,16 @@ wordReplace = { "D_801BDA9C": "gHorseIsMounted", "D_801BDAA4": "gHorsePlayedEponasSong", + "D_801BDBC8": "gSceneSeqState", + "D_801F4E32": "gCustomLensFlare1On", + "D_801F4E38": "gCustomLensFlare1Pos", + "D_801F4E4E": "gCustomLensFlare2On", + "D_801F4E50": "gCustomLensFlare2Pos", + "D_801F4E7A": "gSkyboxNumStars", + "D_801BDBB8": "gInterruptSongOfStorms", + "D_801BDBB4": "gLightConfigAfterUnderwater", + "D_801F4E68": "gLightningStrike", + # Macros "CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE", "CUR_UPG_VALUE_VOID": "GET_CUR_UPG_VALUE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 02e1bf9cd..323a6af9e 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1220,86 +1220,86 @@ asm/non_matchings/code/z_kanfont/Font_LoadChar.s,Font_LoadChar,0x800F4F40,0x5 asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54,0x1B asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11 asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23 -asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11 +asm/non_matchings/code/z_kankyo/Environment_GraphCallback.s,Environment_GraphCallback,0x800F5090,0x11 asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212 -asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E +asm/non_matchings/code/z_kankyo/Environment_SmoothStepToU8.s,Environment_SmoothStepToU8,0x800F5954,0x4E asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 -asm/non_matchings/code/z_kankyo/func_800F5B10.s,func_800F5B10,0x800F5B10,0x70 +asm/non_matchings/code/z_kankyo/Environment_LerpWeightAccelDecel.s,Environment_LerpWeightAccelDecel,0x800F5B10,0x70 asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s,Environment_UpdateSkybox,0x800F5CD0,0x2D9 -asm/non_matchings/code/z_kankyo/func_800F6834.s,func_800F6834,0x800F6834,0x46 -asm/non_matchings/code/z_kankyo/func_800F694C.s,func_800F694C,0x800F694C,0x2E +asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s,Environment_EnableUnderwaterLights,0x800F6834,0x46 +asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s,Environment_DisableUnderwaterLights,0x800F694C,0x2E asm/non_matchings/code/z_kankyo/func_800F6A04.s,func_800F6A04,0x800F6A04,0xF -asm/non_matchings/code/z_kankyo/func_800F6A40.s,func_800F6A40,0x800F6A40,0x1E -asm/non_matchings/code/z_kankyo/func_800F6AB8.s,func_800F6AB8,0x800F6AB8,0x23 -asm/non_matchings/code/z_kankyo/func_800F6B44.s,func_800F6B44,0x800F6B44,0x6A +asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s,Environment_UpdateSkyboxRotY,0x800F6A40,0x1E +asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s,Environment_UpdateNextDayTime,0x800F6AB8,0x23 +asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s,Environment_UpdateTime,0x800F6B44,0x6A asm/non_matchings/code/z_kankyo/func_800F6CEC.s,func_800F6CEC,0x800F6CEC,0x6E asm/non_matchings/code/z_kankyo/func_800F6EA4.s,func_800F6EA4,0x800F6EA4,0x4A -asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s,Kankyo_IsSceneUpsideDown,0x800F6FCC,0xB -asm/non_matchings/code/z_kankyo/func_800F6FF8.s,func_800F6FF8,0x800F6FF8,0x557 -asm/non_matchings/code/z_kankyo/func_800F8554.s,func_800F8554,0x800F8554,0xDC +asm/non_matchings/code/z_kankyo/Environment_IsSceneUpsideDown.s,Environment_IsSceneUpsideDown,0x800F6FCC,0xB +asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s,Environment_UpdateLights,0x800F6FF8,0x557 +asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s,Environment_UpdateSun,0x800F8554,0xDC asm/non_matchings/code/z_kankyo/func_800F88C4.s,func_800F88C4,0x800F88C4,0x2B asm/non_matchings/code/z_kankyo/func_800F8970.s,func_800F8970,0x800F8970,0x4B -asm/non_matchings/code/z_kankyo/func_800F8A9C.s,func_800F8A9C,0x800F8A9C,0x8E +asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s,Environment_UpdatePostmanEvents,0x800F8A9C,0x8E asm/non_matchings/code/z_kankyo/Environment_Update.s,Environment_Update,0x800F8CD4,0x2C -asm/non_matchings/code/z_kankyo/func_800F8D84.s,func_800F8D84,0x800F8D84,0x269 +asm/non_matchings/code/z_kankyo/Environment_DrawSun.s,Environment_DrawSun,0x800F8D84,0x269 asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s,Environment_DrawSunLensFlare,0x800F9728,0x3F -asm/non_matchings/code/z_kankyo/func_800F9824.s,func_800F9824,0x800F9824,0x2DE -asm/non_matchings/code/z_kankyo/func_800FA39C.s,func_800FA39C,0x800FA39C,0xA -asm/non_matchings/code/z_kankyo/func_800FA3C4.s,func_800FA3C4,0x800FA3C4,0x18E +asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s,Environment_DrawLensFlare,0x800F9824,0x2DE +asm/non_matchings/code/z_kankyo/Environment_RandCentered.s,Environment_RandCentered,0x800FA39C,0xA +asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s,Environment_DrawRainImpl,0x800FA3C4,0x18E asm/non_matchings/code/z_kankyo/Environment_DrawRain.s,Environment_DrawRain,0x800FA9FC,0x2E -asm/non_matchings/code/z_kankyo/func_800FAAB4.s,func_800FAAB4,0x800FAAB4,0x5B -asm/non_matchings/code/z_kankyo/func_800FAC20.s,func_800FAC20,0x800FAC20,0xD5 -asm/non_matchings/code/z_kankyo/func_800FAF74.s,func_800FAF74,0x800FAF74,0x27 -asm/non_matchings/code/z_kankyo/func_800FB010.s,func_800FB010,0x800FB010,0xC4 +asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s,Environment_ChangeLightSetting,0x800FAAB4,0x5B +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s,Environment_DrawSkyboxFilters,0x800FAC20,0xD5 +asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s,Environment_DrawLightningFlash,0x800FAF74,0x27 +asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s,Environment_UpdateLightningStrike,0x800FB010,0xC4 asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s,Environment_AddLightningBolts,0x800FB320,0x1A -asm/non_matchings/code/z_kankyo/func_800FB388.s,func_800FB388,0x800FB388,0xF4 -asm/non_matchings/code/z_kankyo/func_800FB758.s,func_800FB758,0x800FB758,0x97 -asm/non_matchings/code/z_kankyo/func_800FB9B4.s,func_800FB9B4,0x800FB9B4,0xC2 +asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s,Environment_DrawLightning,0x800FB388,0xF4 +asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s,Environment_PlaySceneSequence,0x800FB758,0x97 +asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s,Environment_UpdateTimeBasedSequence,0x800FB9B4,0xC2 asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s,Environment_DrawCustomLensFlare,0x800FBCBC,0x4C -asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s,Kankyo_InitGameOverLights,0x800FBDEC,0x54 -asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s,Kankyo_FadeInGameOverLights,0x800FBF3C,0x87 -asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s,Kankyo_FadeOutGameOverLights,0x800FC158,0xA1 -asm/non_matchings/code/z_kankyo/func_800FC3DC.s,func_800FC3DC,0x800FC3DC,0x1A +asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s,Environment_InitGameOverLights,0x800FBDEC,0x54 +asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s,Environment_FadeInGameOverLights,0x800FBF3C,0x87 +asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s,Environment_FadeOutGameOverLights,0x800FC158,0xA1 +asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s,Environment_UpdateRain,0x800FC3DC,0x1A asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,0x800FC444,0x82 asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s,Environment_DrawSandstorm,0x800FC64C,0x31A -asm/non_matchings/code/z_kankyo/func_800FD2B4.s,func_800FD2B4,0x800FD2B4,0xA1 -asm/non_matchings/code/z_kankyo/func_800FD538.s,func_800FD538,0x800FD538,0x19 +asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s,Environment_AdjustLights,0x800FD2B4,0xA1 +asm/non_matchings/code/z_kankyo/Environment_LerpRGB8.s,Environment_LerpRGB8,0x800FD538,0x19 asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s,Environment_LerpAmbientColor,0x800FD59C,0x11 asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s,Environment_LerpDiffuseColor,0x800FD5E0,0x1D asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s,Environment_LerpFogColor,0x800FD654,0x11 asm/non_matchings/code/z_kankyo/Environment_LerpFog.s,Environment_LerpFog,0x800FD698,0x22 -asm/non_matchings/code/z_kankyo/get_days_elapsed.s,get_days_elapsed,0x800FD720,0x4 -asm/non_matchings/code/z_kankyo/reset_days_elapsed.s,reset_days_elapsed,0x800FD730,0x4 -asm/non_matchings/code/z_kankyo/get_current_day.s,get_current_day,0x800FD740,0x4 -asm/non_matchings/code/z_kankyo/func_800FD750.s,func_800FD750,0x800FD750,0x6 -asm/non_matchings/code/z_kankyo/func_800FD768.s,func_800FD768,0x800FD768,0x9 -asm/non_matchings/code/z_kankyo/func_800FD78C.s,func_800FD78C,0x800FD78C,0x33 -asm/non_matchings/code/z_kankyo/func_800FD858.s,func_800FD858,0x800FD858,0x34 -asm/non_matchings/code/z_kankyo/func_800FD928.s,func_800FD928,0x800FD928,0x16 -asm/non_matchings/code/z_kankyo/func_800FD980.s,func_800FD980,0x800FD980,0x5E -asm/non_matchings/code/z_kankyo/func_800FDAF8.s,func_800FDAF8,0x800FDAF8,0x67 -asm/non_matchings/code/z_kankyo/func_800FDC94.s,func_800FDC94,0x800FDC94,0x1BF -asm/non_matchings/code/z_kankyo/func_800FE390.s,func_800FE390,0x800FE390,0x14 -asm/non_matchings/code/z_kankyo/func_800FE3E0.s,func_800FE3E0,0x800FE3E0,0x29 +asm/non_matchings/code/z_kankyo/Environment_GetEventDayCount.s,Environment_GetEventDayCount,0x800FD720,0x4 +asm/non_matchings/code/z_kankyo/Environment_ClearEventDayCount.s,Environment_ClearEventDayCount,0x800FD730,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetTotalDays.s,Environment_GetTotalDays,0x800FD740,0x4 +asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s,Environment_ForcePlaySequence,0x800FD750,0x6 +asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s,Environment_IsForcedSequenceDisabled,0x800FD768,0x9 +asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s,Environment_PlayStormNatureAmbience,0x800FD78C,0x33 +asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s,Environment_StopStormNatureAmbience,0x800FD858,0x34 +asm/non_matchings/code/z_kankyo/Environment_WarpSongLeave.s,Environment_WarpSongLeave,0x800FD928,0x16 +asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s,Environment_SetupSkyboxStars,0x800FD980,0x5E +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s,Environment_DrawSkyboxStar,0x800FDAF8,0x67 +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s,Environment_DrawSkyboxStarsImpl,0x800FDC94,0x1BF +asm/non_matchings/code/z_kankyo/Environment_Draw.s,Environment_Draw,0x800FE390,0x14 +asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s,Environment_DrawSkyboxStars,0x800FE3E0,0x29 asm/non_matchings/code/z_kankyo/Environment_StopTime.s,Environment_StopTime,0x800FE484,0x5 asm/non_matchings/code/z_kankyo/Environment_StartTime.s,Environment_StartTime,0x800FE498,0x4 asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s,Environment_IsTimeStopped,0x800FE4A8,0x4 -asm/non_matchings/code/z_kankyo/func_800FE4B8.s,func_800FE4B8,0x800FE4B8,0x36 -asm/non_matchings/code/z_kankyo/func_800FE590.s,func_800FE590,0x800FE590,0x10 +asm/non_matchings/code/z_kankyo/Environment_GetStormState.s,Environment_GetStormState,0x800FE4B8,0x36 +asm/non_matchings/code/z_kankyo/Environment_IsFinalHours.s,Environment_IsFinalHours,0x800FE590,0x10 asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10 asm/non_matchings/code/z_kankyo/func_800FE610.s,func_800FE610,0x800FE610,0x4 -asm/non_matchings/code/z_kankyo/func_800FE620.s,func_800FE620,0x800FE620,0xE -asm/non_matchings/code/z_kankyo/func_800FE658.s,func_800FE658,0x800FE658,0x28 +asm/non_matchings/code/z_kankyo/Environment_GetTimeSpeed.s,Environment_GetTimeSpeed,0x800FE620,0xE +asm/non_matchings/code/z_kankyo/Environment_SetTimeJump.s,Environment_SetTimeJump,0x800FE658,0x28 asm/non_matchings/code/z_kankyo/func_800FE6F8.s,func_800FE6F8,0x800FE6F8,0x20 -asm/non_matchings/code/z_kankyo/func_800FE778.s,func_800FE778,0x800FE778,0x4 -asm/non_matchings/code/z_kankyo/func_800FE788.s,func_800FE788,0x800FE788,0x4 -asm/non_matchings/code/z_kankyo/func_800FE798.s,func_800FE798,0x800FE798,0x4 -asm/non_matchings/code/z_kankyo/func_800FE7A8.s,func_800FE7A8,0x800FE7A8,0x83 +asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s,Environment_GetSandstormColorIndex,0x800FE778,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s,Environment_GetNextSandstormColorIndex,0x800FE788,0x4 +asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s,Environment_GetSandstormLerpScale,0x800FE798,0x4 +asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s,Environment_LerpSandstormColors,0x800FE7A8,0x83 asm/non_matchings/code/z_kankyo/func_800FE9B4.s,func_800FE9B4,0x800FE9B4,0x27 asm/non_matchings/code/z_kankyo/func_800FEA50.s,func_800FEA50,0x800FEA50,0x18 asm/non_matchings/code/z_kankyo/func_800FEAB0.s,func_800FEAB0,0x800FEAB0,0x4 -asm/non_matchings/code/z_kankyo/func_800FEAC0.s,func_800FEAC0,0x800FEAC0,0xD +asm/non_matchings/code/z_kankyo/Environment_JumpForwardInTime.s,Environment_JumpForwardInTime,0x800FEAC0,0xD asm/non_matchings/code/z_kankyo/func_800FEAF4.s,func_800FEAF4,0x800FEAF4,0x67 asm/non_matchings/code/z_lib/Lib_MemCpy.s,Lib_MemCpy,0x800FEC90,0xC asm/non_matchings/code/z_lib/Lib_MemSet.s,Lib_MemSet,0x800FECC0,0x21 @@ -1363,7 +1363,7 @@ asm/non_matchings/code/z_lib/Lib_PlaySfx.s,Lib_PlaySfx,0x801000A4,0xA asm/non_matchings/code/z_lib/Lib_PlaySfx_2.s,Lib_PlaySfx_2,0x801000CC,0xA asm/non_matchings/code/z_lib/Lib_PlaySfx_AtPos.s,Lib_PlaySfx_AtPos,0x801000F4,0xA asm/non_matchings/code/z_lib/Lib_Vec3f_TranslateAndRotateY.s,Lib_Vec3f_TranslateAndRotateY,0x8010011C,0x27 -asm/non_matchings/code/z_lib/Lib_LerpRGB.s,Lib_LerpRGB,0x801001B8,0xA4 +asm/non_matchings/code/z_lib/Color_RGB8_Lerp.s,Color_RGB8_Lerp,0x801001B8,0xA4 asm/non_matchings/code/z_lib/Math_Vec3f_StepTo.s,Math_Vec3f_StepTo,0x80100448,0x2D asm/non_matchings/code/z_lib/Lib_Nop801004FC.s,Lib_Nop801004FC,0x801004FC,0x2 asm/non_matchings/code/z_lib/Lib_SegmentedToVirtual.s,Lib_SegmentedToVirtual,0x80100504,0xE From ac8d49ea6f2a2630f3c23ad28acafa3fc8c9d8ad Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 5 Oct 2023 06:19:30 -0700 Subject: [PATCH 49/74] Skeleton and shin name cleanup (#1413) * Skeleton and shin name cleanup * Use ANI_LIMB_MAX --- assets/xml/objects/object_ani.xml | 10 +++++----- assets/xml/objects/object_bigpo.xml | 2 +- assets/xml/objects/object_ds2n.xml | 10 +++++----- assets/xml/objects/object_famos.xml | 2 +- assets/xml/objects/object_hs.xml | 2 +- assets/xml/objects/object_mnk.xml | 6 +++--- assets/xml/objects/object_niw.xml | 2 +- assets/xml/objects/object_tro.xml | 2 +- assets/xml/objects/object_yb.xml | 10 +++++----- assets/xml/objects/object_zl4.xml | 2 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 2 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 4 ++-- .../actors/ovl_En_Attack_Niw/z_en_attack_niw.c | 2 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 2 +- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 2 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 2 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 6 +++--- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 2 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 4 ++-- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- 23 files changed, 41 insertions(+), 41 deletions(-) diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml index 2900ff723..8bc8aa5e3 100644 --- a/assets/xml/objects/object_ani.xml +++ b/assets/xml/objects/object_ani.xml @@ -8,10 +8,10 @@ - + - + @@ -21,7 +21,7 @@ - + @@ -30,10 +30,10 @@ - + - + diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml index 858ad4a87..46c79310e 100644 --- a/assets/xml/objects/object_bigpo.xml +++ b/assets/xml/objects/object_bigpo.xml @@ -58,6 +58,6 @@ - + diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml index 52284c224..7c04da8bf 100644 --- a/assets/xml/objects/object_ds2n.xml +++ b/assets/xml/objects/object_ds2n.xml @@ -14,10 +14,10 @@ - + - + @@ -70,10 +70,10 @@ - + - + @@ -86,7 +86,7 @@ - + diff --git a/assets/xml/objects/object_famos.xml b/assets/xml/objects/object_famos.xml index 186e2b59b..f62604424 100644 --- a/assets/xml/objects/object_famos.xml +++ b/assets/xml/objects/object_famos.xml @@ -22,7 +22,7 @@ - + diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml index d4bf08223..c5ac723f8 100644 --- a/assets/xml/objects/object_hs.xml +++ b/assets/xml/objects/object_hs.xml @@ -46,6 +46,6 @@ - + diff --git a/assets/xml/objects/object_mnk.xml b/assets/xml/objects/object_mnk.xml index e80bcfba2..794069ee7 100644 --- a/assets/xml/objects/object_mnk.xml +++ b/assets/xml/objects/object_mnk.xml @@ -23,7 +23,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -126,6 +126,6 @@ - + diff --git a/assets/xml/objects/object_niw.xml b/assets/xml/objects/object_niw.xml index 157d2b302..db47a439f 100644 --- a/assets/xml/objects/object_niw.xml +++ b/assets/xml/objects/object_niw.xml @@ -35,6 +35,6 @@ - + diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml index a794217b4..eb1ba9984 100644 --- a/assets/xml/objects/object_tro.xml +++ b/assets/xml/objects/object_tro.xml @@ -13,6 +13,6 @@ - + diff --git a/assets/xml/objects/object_yb.xml b/assets/xml/objects/object_yb.xml index d00a61170..6c0ae86df 100644 --- a/assets/xml/objects/object_yb.xml +++ b/assets/xml/objects/object_yb.xml @@ -8,10 +8,10 @@ - + - + @@ -39,10 +39,10 @@ - + - + @@ -57,6 +57,6 @@ - + diff --git a/assets/xml/objects/object_zl4.xml b/assets/xml/objects/object_zl4.xml index 73ebb8606..667ca5f21 100644 --- a/assets/xml/objects/object_zl4.xml +++ b/assets/xml/objects/object_zl4.xml @@ -93,7 +93,7 @@ - + diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index a5c678647..88c0f4280 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -119,7 +119,7 @@ void DmZl_Init(Actor* thisx, PlayState* play) { this->actor.targetArrowOffset = 1000.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); // these three set to NULL should mean they are dynamically allocated - SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skeleton, NULL, NULL, NULL, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skel, NULL, NULL, NULL, 0); DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = DmZl_DoNothing; diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index d8b87a81f..d27a8a93d 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -117,8 +117,8 @@ void EnAni_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, - this->morphTable, ANI_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable, + ANI_LIMB_MAX); Animation_PlayOnce(&this->skelAnime, &gAniStandingNormalAnim); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit); diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index daba8eea6..e8c4c9fa2 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -43,7 +43,7 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); // probably copy pasted from EnNiw, which has this same code, but AttackNiw has no params diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index 900aed401..e754ff5b8 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -201,7 +201,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { return; } - SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkeleton, &gBigPoeFloatAnim, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gBigPoeSkel, &gBigPoeFloatAnim, this->jointTable, this->morphTable, BIG_POE_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo(&thisx->colChkInfo, &sDamageTable, &sColChkInfoInit); diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 25a54ec4a..4039386e0 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -136,7 +136,7 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { EnDnh* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkel, NULL, this->jointTable, this->morphTable, KOUME_KIOSK_LIMB_MAX); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENDNH_ANIM_HEAD_MOVING); this->actor.shape.yOffset = 1100.0f; diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 50db36063..8287c0680 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -71,7 +71,7 @@ void EnDs2n_Init(Actor* thisx, PlayState* play) { EnDs2n* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkeleton, &gDs2nIdleAnim, NULL, NULL, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &gDs2nSkel, &gDs2nIdleAnim, NULL, NULL, 0); EnDs2n_SetupIdle(this); } diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index f99f179af..8219a23a3 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -173,7 +173,7 @@ void EnFamos_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawSquare, 30.0f); - SkelAnime_Init(play, &this->skelAnime, &gFamosSkeleton, &gFamosIdleAnim, this->jointTable, this->morphTable, + SkelAnime_Init(play, &this->skelAnime, &gFamosSkel, &gFamosIdleAnim, this->jointTable, this->morphTable, FAMOS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index b665b5d02..ef991495a 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -74,7 +74,7 @@ void EnHs_Init(Actor* thisx, PlayState* play) { EnHs* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkeleton, &gHsIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gHsSkel, &gHsIdleAnim, this->jointTable, this->morphTable, OBJECT_HS_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &gHsIdleAnim); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index bf6c611f6..82e25a95d 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -249,7 +249,7 @@ void EnMnk_MonkeyTiedUp_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnMnk_MonkeyTiedUp_Wait; this->picto.actor.flags |= ACTOR_FLAG_2000000; - SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkeleton, &object_mnk_Anim_003584, + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyTiedUpPoleSkel, &object_mnk_Anim_003584, this->propJointTable, this->propMorphTable, OBJECT_MNK_1_LIMB_MAX); this->cueId = 4; this->animIndex = MONKEY_TIEDUP_ANIM_NONE; @@ -277,7 +277,7 @@ void EnMnk_MonkeyHanging_Init(Actor* thisx, PlayState* play) { func_800BC154(play, &play->actorCtx, &this->picto.actor, ACTORCAT_PROP); this->actionFunc = EnMnk_MonkeyHanging_StruggleBeforeDunk; this->picto.actor.textId = 0x8E8; - SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkeleton, &gMonkeyHangingStruggleAnim, + SkelAnime_InitFlex(play, &this->propSkelAnime, &gMonkeyHangingRopeSkel, &gMonkeyHangingStruggleAnim, this->propJointTable, this->propMorphTable, OBJECT_MNK_3_LIMB_MAX); EnMnk_MonkeyHanging_ChangeAnim(this, MONKEY_HANGING_ANIM_STRUGGLE, ANIMMODE_LOOP, 0.0f); this->unk_3E0 = 5; @@ -297,7 +297,7 @@ void EnMnk_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->picto.actor, 0.012f); ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 12.0f); this->actionFunc = EnMnk_DoNothing; - SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkeleton, &object_mnk_Anim_0105DC, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gMonkeySkel, &object_mnk_Anim_0105DC, this->jointTable, this->morphTable, OBJECT_MNK_2_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &object_mnk_Anim_0105DC); this->flags = 0; diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index fa93cfb26..fa8771862 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -108,7 +108,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Math_Vec3f_Copy(&this->unk2A4, &this->actor.world.pos); Math_Vec3f_Copy(&this->unk2B0, &this->actor.world.pos); diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index 6ee4a5f80..ed8edb377 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -250,7 +250,7 @@ void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectIndex].segment); - SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); Animation_Change(&this->niwSkeleton, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim), ANIMMODE_LOOP, 0.0f); diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 45f2b485c..368052dfc 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1395,8 +1395,8 @@ void EnOssan_CuriosityShopMan_Init(EnOssan* this, PlayState* play) { } void EnOssan_PartTimer_Init(EnOssan* this, PlayState* play) { - SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkeleton, &gAniStandingNormalAnim, this->jointTable, - this->morphTable, 16); + SkelAnime_InitFlex(play, &this->skelAnime, &gAniSkel, &gAniStandingNormalAnim, this->jointTable, this->morphTable, + ANI_LIMB_MAX); this->actor.draw = EnOssan_PartTimer_Draw; } diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 42bc9ffb4..b39a77408 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -88,7 +88,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, EnYb_ActorShadowFunc, 20.0f); // @bug this alignment is because of player animations, but should be using ALIGN16 - SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkeleton, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF, + SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkel, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF, (uintptr_t)this->morphTable & ~0xF, YB_LIMB_MAX); Animation_PlayLoop(&this->skelAnime, &object_yb_Anim_000200); From e810559391f2798ad9377acb858f5776915350d9 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 6 Oct 2023 07:37:52 +1100 Subject: [PATCH 50/74] Object Cleanup (#1410) * object cleanup * namefixer * objectPtr * PR Review * PR Review * more uses of macro * missed another one --- include/functions.h | 6 +- include/variables.h | 2 +- include/z64actor.h | 2 +- include/z64door.h | 2 +- include/z64effect.h | 2 +- include/z64scene.h | 2 + include/z64subs.h | 4 +- include/z_en_hy_code.h | 8 +-- src/code/object_table.c | 2 +- src/code/z_actor.c | 29 ++++----- src/code/z_draw.c | 6 +- src/code/z_effect_soft_sprite_old_init.c | 18 +++--- src/code/z_en_hy_code.c | 16 ++--- src/code/z_en_item00.c | 20 +++--- src/code/z_horse.c | 2 +- src/code/z_player_lib.c | 14 ++--- src/code/z_scene.c | 8 +-- src/code/z_sub_s.c | 8 +-- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 10 +-- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.h | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 8 +-- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 8 +-- .../actors/ovl_Bg_Umajump/z_bg_umajump.h | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 8 +-- .../actors/ovl_Demo_Effect/z_demo_effect.c | 18 +++--- .../actors/ovl_Demo_Effect/z_demo_effect.h | 2 +- .../actors/ovl_Demo_Getitem/z_demo_getitem.c | 14 ++--- .../actors/ovl_Demo_Getitem/z_demo_getitem.h | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 20 +++--- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.h | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 44 ++++++------- src/overlays/actors/ovl_Dm_An/z_dm_an.h | 4 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 12 ++-- .../actors/ovl_Dm_Char03/z_dm_char03.h | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 62 +++++++++---------- .../actors/ovl_Dm_Char05/z_dm_char05.h | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 28 ++++----- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 32 +++++----- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h | 6 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 6 +- .../actors/ovl_Door_Shutter/z_door_shutter.h | 2 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 22 +++---- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 22 +++---- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 8 +-- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 17 ++--- src/overlays/actors/ovl_En_Dnk/z_en_dnk.h | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 33 +++++----- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 20 +++--- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 8 +-- src/overlays/actors/ovl_En_Drs/z_en_drs.h | 2 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 4 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.h | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 18 +++--- src/overlays/actors/ovl_En_Fall/z_en_fall.h | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 22 +++---- src/overlays/actors/ovl_En_Geg/z_en_geg.h | 2 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 8 +-- src/overlays/actors/ovl_En_GirlA/z_en_girla.h | 2 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 12 ++-- src/overlays/actors/ovl_En_Gm/z_en_gm.h | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 36 +++++------ src/overlays/actors/ovl_En_Go/z_en_go.h | 4 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 12 ++-- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 2 +- .../z_en_invadepoh_demo.c | 34 +++++----- .../z_en_invadepoh_demo.h | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 16 ++--- src/overlays/actors/ovl_En_Ishi/z_en_ishi.h | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 10 +-- src/overlays/actors/ovl_En_Kusa/z_en_kusa.h | 2 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 18 +++--- src/overlays/actors/ovl_En_Nwc/z_en_nwc.h | 2 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 12 ++-- src/overlays/actors/ovl_En_Ossan/z_en_ossan.h | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 22 +++---- .../actors/ovl_En_S_Goro/z_en_s_goro.h | 2 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 12 ++-- .../actors/ovl_En_Sekihi/z_en_sekihi.h | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 43 ++++++------- src/overlays/actors/ovl_En_Sob1/z_en_sob1.h | 6 +- src/overlays/actors/ovl_En_St/z_en_st.c | 10 +-- src/overlays/actors/ovl_En_St/z_en_st.h | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 18 +++--- src/overlays/actors/ovl_En_Sth/z_en_sth.h | 4 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 6 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.h | 2 +- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 10 +-- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 7 ++- .../actors/ovl_En_Warp_tag/z_en_warp_tag.h | 2 +- .../ovl_Item_Etcetera/z_item_etcetera.c | 10 +-- .../ovl_Item_Etcetera/z_item_etcetera.h | 2 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 14 ++--- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.h | 2 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 20 +++--- .../actors/ovl_Obj_Kibako/z_obj_kibako.h | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 10 +-- .../actors/ovl_Obj_Purify/z_obj_purify.c | 8 +-- .../actors/ovl_Obj_Purify/z_obj_purify.h | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 8 +-- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 24 +++---- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.h | 2 +- .../actors/ovl_player_actor/z_player.c | 10 +-- .../z_eff_en_ice_block.c | 8 +-- .../ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c | 14 ++--- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 20 +++--- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c | 22 +++---- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h | 2 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 22 +++---- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h | 2 +- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 6 +- tools/disasm/functions.txt | 4 +- tools/disasm/variables.txt | 8 +-- tools/namefixer.py | 3 +- tools/sizes/code_functions.csv | 2 +- 117 files changed, 600 insertions(+), 592 deletions(-) diff --git a/include/functions.h b/include/functions.h index 634ce16d9..74b593152 100644 --- a/include/functions.h +++ b/include/functions.h @@ -203,8 +203,8 @@ void EffectSsGFire_Spawn(PlayState* play, Vec3f* pos); // void EffectSsLightning_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Color_RGBA8* pzParm3, Color_RGBA8* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); void EffectSsDtBubble_SpawnColorProfile(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 life, s16 colorProfile, s16 randXZ); void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 life, s16 randXZ); -void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objId, s16 life, Gfx* dList); -void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, s16 count, s16 objId, s16 life, Gfx* dList); +void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objectId, s16 life, Gfx* dList); +void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, s16 count, s16 objectId, s16 life, Gfx* dList); // void func_800B2364(void); void EffectSsStick_Spawn(PlayState* play, Vec3f* pos, s16 yaw); // void EffectSsSibuki_Spawn(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); @@ -215,7 +215,7 @@ void EffectSsHitmark_SpawnCustomScale(PlayState* play, s32 type, s16 scale, Vec3 void EffectSsFhgFlash_SpawnShock(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, u8 params); void EffectSsKFire_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scaleMax, u8 type); void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16* playerDetected, s16 flags); -void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objId, Gfx* dList); +void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objectId, Gfx* dList); // void EffectSsIcePiece_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6); void EffectSsIcePiece_SpawnBurst(PlayState* play, Vec3f* refPos, f32 scale); void func_800B2B44(PlayState* play, Actor* actor, Vec3f* pos, f32 scale); diff --git a/include/variables.h b/include/variables.h index df924135a..41c8f3966 100644 --- a/include/variables.h +++ b/include/variables.h @@ -180,7 +180,7 @@ extern s16 gItemPrices[]; extern u16 gSceneIdsPerRegion[11][27]; extern u8 gPlayerFormItemRestrictions[PLAYER_FORM_MAX][114]; -extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX]; +extern s16 gPlayerFormObjectIds[PLAYER_FORM_MAX]; extern ObjectId gObjectTableSize; extern RomFile gObjectTable[OBJECT_ID_MAX]; diff --git a/include/z64actor.h b/include/z64actor.h index 1b6c37072..b3e1fe77e 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -118,7 +118,7 @@ typedef struct Actor { /* 0x004 */ u32 flags; // Flags used for various purposes /* 0x008 */ PosRot home; // Initial position/rotation when spawned. Can be used for other purposes /* 0x01C */ s16 params; // Configurable variable set by the actor's spawn data; original name: "args_data" - /* 0x01E */ s8 objBankIndex; // Object bank index of the actor's object dependency; original name: "bank" + /* 0x01E */ s8 objectSlot; // Object slot (in ObjectContext) corresponding to the actor's object; original name: "bank" /* 0x01F */ s8 targetMode; // Controls how far the actor can be targeted from and how far it can stay locked on /* 0x020 */ s16 halfDaysBits; // Bitmask indicating which half-days this actor is allowed to not be killed(?) (TODO: not sure how to word this). If the current halfDayBit is not part of this mask then the actor is killed when spawning the setup actors /* 0x024 */ PosRot world; // Position/rotation in the world diff --git a/include/z64door.h b/include/z64door.h index 26653c308..93dff5ea9 100644 --- a/include/z64door.h +++ b/include/z64door.h @@ -9,7 +9,7 @@ typedef struct KnobDoorActor { /* 0x15C */ SkelAnime skelAnime; /* 0x1A0 */ u8 animIndex; /* 0x1A1 */ u8 playOpenAnim; - /* 0x1A2 */ s8 requiredObjBankIndex; + /* 0x1A2 */ s8 objectSlot; /* 0x1A3 */ s8 dlIndex; } KnobDoorActor; // size = 0x1A4 diff --git a/include/z64effect.h b/include/z64effect.h index 71ad80510..8950958cb 100644 --- a/include/z64effect.h +++ b/include/z64effect.h @@ -33,7 +33,7 @@ struct CollisionPoly; #define rgEnvColorG regs[8] #define rgEnvColorB regs[9] #define rgEnvColorA regs[10] -#define rgObjBankIndex regs[11] +#define rgObjectSlot regs[11] typedef struct { /* 0x0 */ u8 active; diff --git a/include/z64scene.h b/include/z64scene.h index b66ad4e41..3c74f6541 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -472,6 +472,8 @@ typedef struct { typedef RoomShapeCullableEntry PolygonDlist2; typedef RoomShapeCullable PolygonType2; +#define OBJECT_SLOT_NONE -1 + typedef struct { /* 0x000 */ void* spaceStart; /* 0x004 */ void* spaceEnd; diff --git a/include/z64subs.h b/include/z64subs.h index 4d365dd14..2e751dfc4 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -147,8 +147,8 @@ s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq); s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep); s16 SubS_GetDistSqAndOrientPath(Path* path, s32 pointIndex, Vec3f* pos, f32* distSq); -s8 SubS_IsObjectLoaded(s8 index, struct PlayState* play); -s8 SubS_GetObjectIndex(s16 id, struct PlayState* play); +s8 SubS_IsObjectLoaded(s8 objectSlot, struct PlayState* play); +s8 SubS_GetObjectSlot(s16 objectId, struct PlayState* play); Actor* SubS_FindActor(struct PlayState* play, Actor* actorListStart, u8 actorCategory, s16 actorId); diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h index 2b5d46d57..7bc41c7c8 100644 --- a/include/z_en_hy_code.h +++ b/include/z_en_hy_code.h @@ -81,10 +81,10 @@ typedef struct EnHy { /* 0x144 */ EnHyActionFunc actionFunc; /* 0x148 */ EnHyActionFunc prevActionFunc; /* 0x14C */ SkelAnime skelAnime; - /* 0x190 */ s8 headObjIndex; // Limb 15 - /* 0x191 */ s8 skelUpperObjIndex; // Limbs 8-14 - /* 0x192 */ s8 skelLowerObjIndex; // Limbs 1-7 - /* 0x193 */ s8 animObjIndex; + /* 0x190 */ s8 headObjectSlot; // Limb 15 + /* 0x191 */ s8 skelUpperObjectSlot; // Limbs 8-14 + /* 0x192 */ s8 skelLowerObjectSlot; // Limbs 1-7 + /* 0x193 */ s8 animObjectSlot; /* 0x194 */ ColliderCylinder collider; /* 0x1E0 */ u16 textId; /* 0x1E2 */ u8 waitingOnInit; diff --git a/src/code/object_table.c b/src/code/object_table.c index aa73199b8..87c4069fe 100644 --- a/src/code/object_table.c +++ b/src/code/object_table.c @@ -1,6 +1,6 @@ #include "global.h" -s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX] = { +s16 gPlayerFormObjectIds[PLAYER_FORM_MAX] = { OBJECT_LINK_BOY, // PLAYER_FORM_FIERCE_DEITY OBJECT_LINK_GORON, // PLAYER_FORM_GORON OBJECT_LINK_ZORA, // PLAYER_FORM_ZORA diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 7c741ae85..eb5ba018d 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1096,7 +1096,7 @@ void Actor_SetScale(Actor* actor, f32 scale) { } void Actor_SetObjectDependency(PlayState* play, Actor* actor) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[actor->objBankIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[actor->objectSlot].segment); } void Actor_Init(Actor* actor, PlayState* play) { @@ -1119,7 +1119,7 @@ void Actor_Init(Actor* actor, PlayState* play) { actor->floorBgId = BGCHECK_SCENE; ActorShape_Init(&actor->shape, 0.0f, NULL, 0.0f); - if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { + if (Object_IsLoaded(&play->objectCtx, actor->objectSlot)) { Actor_SetObjectDependency(play, actor); actor->init(actor, play); actor->init = NULL; @@ -2486,7 +2486,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { actor->audioFlags &= ~ACTOR_AUDIO_FLAG_ALL; if (actor->init != NULL) { - if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { + if (Object_IsLoaded(&play->objectCtx, actor->objectSlot)) { Actor_SetObjectDependency(play, actor); actor->init(actor, play); actor->init = NULL; @@ -2500,7 +2500,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { nextActor = actor->next; } } else { - if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { + if (!Object_IsLoaded(&play->objectCtx, actor->objectSlot)) { Actor_Kill(actor); } else if ((params->requiredActorFlag && !(actor->flags & params->requiredActorFlag)) || (((!params->requiredActorFlag) != 0) && @@ -2700,8 +2700,8 @@ void Actor_Draw(PlayState* play, Actor* actor) { Matrix_Scale(actor->scale.x, actor->scale.y, actor->scale.z, MTXMODE_APPLY); Actor_SetObjectDependency(play, actor); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[actor->objBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[actor->objectSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[actor->objectSlot].segment); if (actor->colorFilterTimer != 0) { s32 colorFlag = COLORFILTER_GET_COLORFLAG(actor->colorFilterParams); @@ -3055,7 +3055,7 @@ void Actor_KillAllWithMissingObject(PlayState* play, ActorContext* actorCtx) { actor = actorCtx->actorLists[i].first; while (actor != NULL) { - if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { + if (!Object_IsLoaded(&play->objectCtx, actor->objectSlot)) { Actor_Kill(actor); } @@ -3287,7 +3287,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 s32 pad; Actor* actor; ActorInit* actorInit; - s32 objBankIndex; + s32 objectSlot; ActorOverlay* overlayEntry; if (actorCtx->totalLoadedActors >= 0xFF) { @@ -3299,9 +3299,10 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 return NULL; } - objBankIndex = Object_GetSlot(&play->objectCtx, actorInit->objectId); - if ((objBankIndex < 0) || ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) && - (actorInit->id != ACTOR_BOSS_05))) { + objectSlot = Object_GetSlot(&play->objectCtx, actorInit->objectId); + if ((objectSlot <= OBJECT_SLOT_NONE) || + ((actorInit->type == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num) && + (actorInit->id != ACTOR_BOSS_05))) { Actor_FreeOverlay(&gActorOverlayTable[index]); return NULL; } @@ -3323,10 +3324,10 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 actor->flags = actorInit->flags; if (actorInit->id == ACTOR_EN_PART) { - actor->objBankIndex = rotZ; + actor->objectSlot = rotZ; rotZ = 0; } else { - actor->objBankIndex = objBankIndex; + actor->objectSlot = objectSlot; } actor->init = actorInit->init; @@ -3705,7 +3706,7 @@ void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** d spawnedPart = Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, currentMatrix->mf[3][0], - currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objBankIndex, partParams); + currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objectSlot, partParams); if (spawnedPart != NULL) { part = (EnPart*)spawnedPart; diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 3f1d1dc47..1d5b967d7 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -823,13 +823,13 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) { void GetItem_DrawRemains(PlayState* play, s16 drawId) { s32 pad; - s8 objectIndex; + s8 objectSlot; OPEN_DISPS(play->state.gfxCtx); - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_BSMASK); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_BSMASK); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index d71a18674..245f90a82 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -41,7 +41,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { MtxF mfTrans11DA0; s32 pad1; Mtx* mtx; - void* object = play->objectCtx.slots[this->rgObjBankIndex].segment; + void* objectPtr = play->objectCtx.slots[this->rgObjectSlot].segment; OPEN_DISPS(gfxCtx); @@ -50,8 +50,8 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { SkinMatrix_SetScale(&mfScale, scale, scale, scale); SkinMatrix_MtxFMtxFMult(&mfTrans, &play->billboardMtxF, &mfTrans11DA0); SkinMatrix_MtxFMtxFMult(&mfTrans11DA0, &mfScale, &mfResult); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(object); - gSPSegment(POLY_XLU_DISP++, 0x06, object); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(objectPtr); + gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr); mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); @@ -542,7 +542,7 @@ void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* veloc * - due to how life is implemented it is capped at 200. Any value over 200 is accepted, but the fragment will * only live for 200 frames */ -void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objId, +void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objectId, s16 life, Gfx* dList) { EffectSsHahenInitParams initParams; @@ -552,7 +552,7 @@ void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac initParams.dList = dList; initParams.flags = flags; initParams.scale = scale; - initParams.objId = objId; + initParams.objectId = objectId; initParams.life = life; EffectSs_Spawn(play, EFFECT_SS_HAHEN, 128, &initParams); @@ -568,7 +568,7 @@ void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac * only live for 200 frames */ void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, - s16 count, s16 objId, s16 life, Gfx* dList) { + s16 count, s16 objectId, s16 life, Gfx* dList) { s32 i; Vec3f velocity; Vec3f accel; @@ -581,7 +581,7 @@ void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 f velocity.z = (Rand_ZeroOne() - 0.5f) * burstScale; velocity.y = ((Rand_ZeroOne() * 0.5f) + 0.5f) * burstScale; - EffectSsHahen_Spawn(play, pos, &velocity, &accel, flags, Rand_S16Offset(scale, randScaleRange), objId, life, + EffectSsHahen_Spawn(play, pos, &velocity, &accel, flags, Rand_S16Offset(scale, randScaleRange), objectId, life, dList); } } @@ -719,7 +719,7 @@ void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, // EffectSsKakera Spawn Functions void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, - s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objId, + s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objectId, Gfx* dList) { EffectSsKakeraInitParams initParams; @@ -736,7 +736,7 @@ void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* a initParams.unk_32 = arg11; initParams.life = life; initParams.colorIdx = colorIdx; - initParams.objId = objId; + initParams.objectId = objectId; initParams.dList = dList; EffectSs_Spawn(play, EFFECT_SS_KAKERA, 101, &initParams); diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index d64308bff..c7d89137b 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -133,7 +133,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { } void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjectSlot].segment); EnHy_ChangeAnim(&enHy->skelAnime, animIndex); } @@ -141,7 +141,7 @@ s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play) { s32 isUpdated = false; if (enHy->actor.draw != NULL) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->animObjectSlot].segment); SkelAnime_Update(&enHy->skelAnime); isUpdated = true; } @@ -161,14 +161,14 @@ void EnHy_Blink(EnHy* enHy, s32 eyeTexMaxIndex) { s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex) { s32 isInitialized = false; - if ((SubS_IsObjectLoaded(enHy->animObjIndex, play) == true) && - (SubS_IsObjectLoaded(enHy->headObjIndex, play) == true) && - (SubS_IsObjectLoaded(enHy->skelUpperObjIndex, play) == true) && - (SubS_IsObjectLoaded(enHy->skelLowerObjIndex, play) == true)) { - enHy->actor.objBankIndex = enHy->skelLowerObjIndex; + if ((SubS_IsObjectLoaded(enHy->animObjectSlot, play) == true) && + (SubS_IsObjectLoaded(enHy->headObjectSlot, play) == true) && + (SubS_IsObjectLoaded(enHy->skelUpperObjectSlot, play) == true) && + (SubS_IsObjectLoaded(enHy->skelLowerObjectSlot, play) == true)) { + enHy->actor.objectSlot = enHy->skelLowerObjectSlot; isInitialized = true; ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->actor.objBankIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[enHy->actor.objectSlot].segment); SkelAnime_InitFlex(play, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable, ENHY_LIMB_MAX); EnHy_ChangeObjectAndAnim(enHy, play, animIndex); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index c6b52e476..d0dada57d 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -184,17 +184,17 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; case ITEM00_SHIELD_HERO: - thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_SHIELD_2); + thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_SHIELD_2); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_MAP: - thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_MAP); + thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MAP); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; case ITEM00_COMPASS: - thisx->objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_COMPASS); + thisx->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_COMPASS); EnItem00_SetObject(this, play, &shadowOffset, &shadowScale); break; @@ -317,10 +317,10 @@ void EnItem00_Destroy(Actor* thisx, PlayState* play) { } void EnItem00_WaitForHeartObject(EnItem00* this, PlayState* play) { - s32 objBankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS); - if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { - this->actor.objBankIndex = objBankIndex; + if (Object_IsLoaded(&play->objectCtx, objectSlot)) { + this->actor.objectSlot = objectSlot; this->actionFunc = func_800A640C; } } @@ -725,10 +725,10 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) { case ITEM00_RECOVERY_HEART: if (this->unk152 < 0) { if (this->unk152 == -1) { - s8 bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEART); + s8 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_HEART); - if (Object_IsLoaded(&play->objectCtx, bankIndex)) { - this->actor.objBankIndex = bankIndex; + if (Object_IsLoaded(&play->objectCtx, objectSlot)) { + this->actor.objectSlot = objectSlot; Actor_SetObjectDependency(play, &this->actor); this->unk152 = -2; } @@ -852,7 +852,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) { s32 pad[2]; - if (Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { + if (Object_GetSlot(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objectSlot) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/code/z_horse.c b/src/code/z_horse.c index ac0142fae..52808477a 100644 --- a/src/code/z_horse.c +++ b/src/code/z_horse.c @@ -216,7 +216,7 @@ s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx) { if (bgActor != NULL) { while (true) { if ((bgActor->update != NULL) && (bgActor->init == NULL)) { - if (Object_IsLoaded(&play->objectCtx, bgActor->objBankIndex)) { + if (Object_IsLoaded(&play->objectCtx, bgActor->objectSlot)) { if ((bgActor->id == ACTOR_EN_HORSE) && (((EnHorse*)bgActor)->action != ENHORSE_ACTION_INACTIVE)) { return true; } diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f288b31de..3a5d69a34 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -392,16 +392,16 @@ void func_8012301C(Actor* thisx, PlayState* play2) { this->actionVar1++; if (this->actionVar1 == 2) { - s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; + s16 objectId = gPlayerFormObjectIds[GET_PLAYER_FORM]; gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; - func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); - this->actor.objBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); + func_8012F73C(&play->objectCtx, this->actor.objectSlot, objectId); + this->actor.objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); } else if (this->actionVar1 >= 3) { - s32 objBankIndex = Object_GetSlot(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); + s32 objectSlot = Object_GetSlot(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); - if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { - this->actor.objBankIndex = objBankIndex; + if (Object_IsLoaded(&play->objectCtx, objectSlot)) { + this->actor.objectSlot = objectSlot; this->actor.shape.rot.z = GET_PLAYER_FORM + 1; this->actor.init = PlayerCall_Init; this->actor.update = PlayerCall_Update; @@ -1869,7 +1869,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.slots[player->actor.objBankIndex].segment); + gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.slots[player->actor.objectSlot].segment); gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 483db001e..923ba5a0e 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -157,7 +157,7 @@ void* func_8012F73C(ObjectContext* objectCtx, s32 slot, s16 id) { void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { s32 loadedCount; s16 playerObjectId; - void* nextObject; + void* objectPtr; play->linkActorEntry = (ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn; @@ -170,14 +170,14 @@ void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) { } loadedCount = Object_SpawnPersistent(&play->objectCtx, OBJECT_LINK_CHILD); - nextObject = play->objectCtx.slots[play->objectCtx.numEntries].segment; + objectPtr = play->objectCtx.slots[play->objectCtx.numEntries].segment; play->objectCtx.numEntries = loadedCount; play->objectCtx.numPersistentEntries = loadedCount; - playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; + playerObjectId = gPlayerFormObjectIds[GET_PLAYER_FORM]; gActorOverlayTable[0].initInfo->objectId = playerObjectId; Object_SpawnPersistent(&play->objectCtx, playerObjectId); - play->objectCtx.slots[play->objectCtx.numEntries].segment = nextObject; + play->objectCtx.slots[play->objectCtx.numEntries].segment = objectPtr; } // SceneTableEntry Header Command 0x01: Actor List diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 3dc02ba7d..e630ed150 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -1169,12 +1169,12 @@ s16 SubS_GetDistSqAndOrientPath(Path* path, s32 pointIndex, Vec3f* pos, f32* dis return Math_Atan2S(diffX, diffZ); } -s8 SubS_IsObjectLoaded(s8 index, PlayState* play) { - return !Object_IsLoaded(&play->objectCtx, index) ? false : true; +s8 SubS_IsObjectLoaded(s8 objectSlot, PlayState* play) { + return !Object_IsLoaded(&play->objectCtx, objectSlot) ? false : true; } -s8 SubS_GetObjectIndex(s16 id, PlayState* play) { - return Object_GetSlot(&play->objectCtx, id); +s8 SubS_GetObjectSlot(s16 objectId, PlayState* play) { + return Object_GetSlot(&play->objectCtx, objectId); } /** diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index 01a74402c..9db179c1a 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -52,7 +52,7 @@ ActorInit Bg_Breakwall_InitVars = { }; typedef struct { - /* 0x00 */ s16 unk_00; + /* 0x00 */ s16 objectId; /* 0x04 */ Gfx* unk_04; /* 0x08 */ Gfx* unk_08; /* 0x0C */ AnimatedMaterial* unk_0C; @@ -212,9 +212,9 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) { BgBreakwallStruct* sp24 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)]; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - this->unk_15C = Object_GetSlot(&play->objectCtx, sp24->unk_00); + this->objectSlot = Object_GetSlot(&play->objectCtx, sp24->objectId); - if ((this->unk_15C < 0) || !sp24->unk_14(this, play)) { + if ((this->objectSlot <= OBJECT_SLOT_NONE) || !sp24->unk_14(this, play)) { Actor_Kill(&this->dyna.actor); return; } @@ -233,10 +233,10 @@ void BgBreakwall_Destroy(Actor* thisx, PlayState* play) { } void func_808B76CC(BgBreakwall* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->unk_15C)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { BgBreakwallStruct* temp_s1 = &D_808B8140[BGBREAKWALL_GET_F(&this->dyna.actor)]; - this->dyna.actor.objBankIndex = this->unk_15C; + this->dyna.actor.objectSlot = this->objectSlot; this->dyna.actor.draw = BgBreakwall_Draw; if (((BGBREAKWALL_GET_F(&this->dyna.actor)) != BGBREAKWALL_F_7) && diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h index 5baa97232..f1f3c2b5c 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h @@ -20,7 +20,7 @@ typedef enum { typedef struct BgBreakwall { /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ s8 unk_15C; + /* 0x15C */ s8 objectSlot; /* 0x15D */ u8 switchFlag; /* 0x15E */ u8 unk_15E; /* 0x160 */ BgBreakwallActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index 91ea969e2..0d308979c 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -378,7 +378,7 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { BgNumaHana* this = THIS; WoodenFlowerPetalPosRot* innerPetalPosRot; WoodenFlowerPetalPosRot* outerPetalPosRot; - s32 objectIndex; + s32 objectSlot; s32 i; OPEN_DISPS(play->state.gfxCtx); @@ -404,13 +404,13 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gWoodenFlowerOuterPetalDL); } - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_SYOKUDAI); - if ((objectIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objectIndex))) { + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_SYOKUDAI); + if ((objectSlot > OBJECT_SLOT_NONE) && (Object_IsLoaded(&play->objectCtx, objectSlot))) { Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y - 64.5f, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(1.5f, 1.5f, 1.5f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, gObjectSyokudaiTypeNoSwitchDL); } diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index 63cedff5a..3eb8e3c8a 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -103,9 +103,9 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { thisx->update = Actor_Noop; } } else { - this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UMAJUMP); + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_UMAJUMP); - if (this->objectIndex < 0) { + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(thisx); } @@ -126,8 +126,8 @@ void BgUmajump_Destroy(Actor* thisx, PlayState* play) { void BgUmajump_Update(Actor* thisx, PlayState* play) { BgUmajump* this = THIS; - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->dyna.actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->dyna.actor.objectSlot = this->objectSlot; this->dyna.actor.draw = BgUmajump_Draw; Actor_SetObjectDependency(play, &this->dyna.actor); diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h index ae35ac98c..372402ebd 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h @@ -23,7 +23,7 @@ typedef struct BgUmajump { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ BgUmajumpActionFunc actionFunc; /* 0x160 */ union { - s32 objectIndex; + s32 objectSlot; s32 rotationTimer; // y rotation s32 pathIndex; }; diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index e9394f783..9e1111a6b 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2152,14 +2152,14 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { /* Start of Gyorg's Draw section */ void Boss03_SetObject(PlayState* play, s16 objectId) { - s32 objectIndex = Object_GetSlot(&play->objectCtx, objectId); + s32 objectSlot = Object_GetSlot(&play->objectCtx, objectId); OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[objectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index 2b0669f39..3f29047fa 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -37,14 +37,14 @@ ActorInit Demo_Effect_InitVars = { }; void DemoEffect_Init(Actor* thisx, PlayState* play) { - static s16 sEffectTypeObjects[] = { + static s16 sEffectTypeObjectIds[] = { OBJECT_EFC_TW, OBJECT_EFC_TW, OBJECT_EFC_TW, OBJECT_EFC_TW, GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP, }; s32 pad; DemoEffect* this = THIS; s32 type = DEMO_EFFECT_GET_TYPE(&this->actor); - s32 objectIndex; + s32 objectSlot; s32 pad2; Color_RGB8 lightColors[] = { { 200, 200, 0 }, // Yellow @@ -54,16 +54,16 @@ void DemoEffect_Init(Actor* thisx, PlayState* play) { { 255, 255, 80 }, // Light Yellow }; - if (sEffectTypeObjects[type] == GAMEPLAY_KEEP) { - objectIndex = 0; + if (sEffectTypeObjectIds[type] == GAMEPLAY_KEEP) { + objectSlot = 0; } else { - objectIndex = Object_GetSlot(&play->objectCtx, sEffectTypeObjects[type]); + objectSlot = Object_GetSlot(&play->objectCtx, sEffectTypeObjectIds[type]); } - if (objectIndex < 0) { + if (objectSlot <= OBJECT_SLOT_NONE) { // assert on debug } else { - this->initObjectIndex = objectIndex; + this->initObjectSlot = objectSlot; } Actor_SetScale(&this->actor, 0.2f); @@ -123,8 +123,8 @@ void DemoEffect_Destroy(Actor* thisx, PlayState* play) { } void DemoEffect_WaitForObject(DemoEffect* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->initObjectIndex)) { - this->actor.objBankIndex = this->initObjectIndex; + if (Object_IsLoaded(&play->objectCtx, this->initObjectSlot)) { + this->actor.objectSlot = this->initObjectSlot; this->actor.draw = this->initDrawFunc; this->actionFunc = this->initActionFunc; } diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h index a69316308..538f6bc1e 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h @@ -26,7 +26,7 @@ typedef enum { typedef struct DemoEffect { /* 0x000 */ Actor actor; /* 0x144 */ SkelCurve skelCurve; - /* 0x164 */ u8 initObjectIndex; + /* 0x164 */ u8 initObjectSlot; /* 0x165 */ u8 primXluColor[3]; /* 0x168 */ u8 envXluColor[3]; /* 0x16C */ s16 timer; diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c index b52787f36..d72fdca4f 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c @@ -30,7 +30,7 @@ ActorInit Demo_Getitem_InitVars = { (ActorFunc)NULL, }; -static s16 sObjectBankIndices[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 }; +static s16 sObjectIds[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 }; static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY }; @@ -43,7 +43,7 @@ typedef enum GreatFairyRewardItem { void DemoGetitem_Init(Actor* thisx, PlayState* play) { s32 pad; - s32 objectIndex; + s32 objectSlot; s32 itemIndex; DemoGetitem* this = THIS; @@ -57,22 +57,22 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) { this->getItemDrawId = sGetItemDraws[itemIndex]; this->cueType = sCueTypes[itemIndex]; - objectIndex = Object_GetSlot(&play->objectCtx, sObjectBankIndices[itemIndex]); - if (objectIndex < 0) { + objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[itemIndex]); + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } - this->objectIndex = objectIndex; + this->objectSlot = objectSlot; } void DemoGetitem_Destroy(Actor* thisx, PlayState* play) { } void DemoGetitem_Wait(DemoGetitem* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->actor.draw = NULL; - this->actor.objBankIndex = this->objectIndex; + this->actor.objectSlot = this->objectSlot; this->actionFunc = DemoGetitem_PerformCutsceneActions; } } diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h index 130b2cfa6..c43020300 100644 --- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h +++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h @@ -13,7 +13,7 @@ typedef struct DemoGetitem { /* 0x000 */ Actor actor; /* 0x144 */ s16 getItemDrawId; /* 0x146 */ u16 cueType; - /* 0x148 */ s8 objectIndex; + /* 0x148 */ s8 objectSlot; /* 0x14C */ DemoGetitemActionFunc actionFunc; } DemoGetitem; // size = 0x150 diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 945e09fee..bce779aa7 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -34,7 +34,7 @@ ActorInit Demo_Kankyo_InitVars = { (ActorFunc)DemoKankyo_Draw, }; -static s32 sObjectBubbleIndex = OBJECT_BUBBLE | 0x10000; +static s32 sObjectBubbleId = OBJECT_BUBBLE | 0x10000; void DemoKankyo_SetupAction(DemoKankyo* this, DemoKankyoActionFunc actionFunc) { this->actionFunc = actionFunc; @@ -279,9 +279,9 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) { } void DemoKakyo_GiantObjectCheck(DemoKankyo* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->objectId)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->isSafeToDrawGiants = true; - this->actor.objBankIndex = this->objectId; + this->actor.objectSlot = this->objectSlot; DemoKankyo_SetupAction(this, DemoKakyo_MoonSparklesActionFunc); } } @@ -437,7 +437,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) { DemoKankyo* this = THIS; s32 pad; s32 i; - s32 objId; + s32 objectSlot; // This must be a single line to match, possibly a macro? // clang-format off @@ -449,7 +449,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) { switch (this->actor.params) { case DEMO_KANKYO_TYPE_LOSTWOODS: - objId = OBJECT_UNSET_0; + objectSlot = 0; this->actor.room = -1; if (sLostWoodsSparklesMutex == false) { DemoKankyo_SetupAction(this, DemoKakyo_LostWoodsSparkleActionFunc); @@ -461,24 +461,24 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) { case DEMO_KANKYO_TYPE_GIANTS: this->isSafeToDrawGiants = false; - objId = Object_GetSlot(&play->objectCtx, sObjectBubbleIndex); + objectSlot = Object_GetSlot(&play->objectCtx, sObjectBubbleId); DemoKankyo_SetupAction(this, DemoKakyo_GiantObjectCheck); break; case DEMO_KANKYO_TYPE_MOON: - objId = OBJECT_UNSET_0; + objectSlot = 0; this->isSafeToDrawGiants = true; DemoKankyo_SetupAction(this, DemoKakyo_MoonSparklesActionFunc); break; default: //! @bug: this causes a crash because the actionfunc is never set - objId = -1; + objectSlot = OBJECT_SLOT_NONE; break; } - if (objId > -1) { - this->objectId = objId; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; } } diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h index cbee0a148..6142796ce 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h @@ -31,7 +31,7 @@ typedef struct DemoKankyo { /* 0x0000 */ Actor actor; /* 0x0144 */ DemoKankyoEffect effects[DEMOKANKYO_EFFECT_COUNT]; /* 0x1644 */ DemoKankyoActionFunc actionFunc; - /* 0x1648 */ s32 objectId; + /* 0x1648 */ s32 objectSlot; /* 0x164C */ u8 isSafeToDrawGiants; } DemoKankyo; // size = 0x1650 diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index a55f2cc1f..3b05c6e56 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -70,41 +70,41 @@ static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = { }; s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { - s8 objectIndex = this->actor.objBankIndex; - s8 objectIndex2; + s8 objectSlot = this->actor.objectSlot; + s8 objectSlot2; s32 isAnimFinished = false; if (this->animIndex <= DMAN_ANIM_1) { - objectIndex2 = this->actor.objBankIndex; + objectSlot2 = this->actor.objectSlot; } else { - objectIndex2 = this->unk_2AC; + objectSlot2 = this->an4ObjectSlot; } - if (objectIndex2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); + if (objectSlot2 >= 0) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return isAnimFinished; } s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { - s8 objectIndex = this->actor.objBankIndex; - s8 objectIndex2; + s8 objectSlot = this->actor.objectSlot; + s8 objectSlot2; s32 didAnimChange = false; if (animIndex <= DMAN_ANIM_1) { - objectIndex2 = this->actor.objBankIndex; + objectSlot2 = this->actor.objectSlot; } else { - objectIndex2 = this->unk_2AC; + objectSlot2 = this->an4ObjectSlot; } - if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); + if ((objectSlot2 >= 0) && (this->animIndex != animIndex)) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return didAnimChange; @@ -191,8 +191,8 @@ Actor* func_80C1C8E8(PlayState* play) { } void func_80C1C958(DmAn* this, PlayState* play) { - if ((this->unk_2AC >= 0) && SubS_IsObjectLoaded(this->unk_2AC, play) && (this->unk_2AD >= 0) && - SubS_IsObjectLoaded(this->unk_2AD, play)) { + if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && + (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, OBJECT_AN1_LIMB_MAX); @@ -273,8 +273,8 @@ void DmAn_DoNothing(DmAn* this, PlayState* play) { void DmAn_Init(Actor* thisx, PlayState* play) { DmAn* this = THIS; - this->unk_2AC = SubS_GetObjectIndex(OBJECT_AN4, play); - this->unk_2AD = SubS_GetObjectIndex(OBJECT_MSMO, play); + this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play); + this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play); this->actionFunc = func_80C1C958; } @@ -302,8 +302,8 @@ Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f }; void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad[2]; DmAn* this = THIS; - s8 sp2B = this->actor.objBankIndex; - s8 sp2A = this->unk_2AD; + s8 objectSlot = this->actor.objectSlot; + s8 msmoObjectSlot = this->msmoObjectSlot; if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); @@ -312,9 +312,9 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Matrix_TranslateRotateZYX(&D_80C1D2C8, &D_80C1D2D4); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[msmoObjectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h index c1e85d3eb..00931d731 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -18,8 +18,8 @@ typedef struct DmAn { /* 0x1A4 */ Vec3s unk_1AA; /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; - /* 0x2AC */ s8 unk_2AC; - /* 0x2AD */ s8 unk_2AD; + /* 0x2AC */ s8 an4ObjectSlot; + /* 0x2AD */ s8 msmoObjectSlot; /* 0x2AE */ u16 unk_2AE; /* 0x2B0 */ u8 cueId; /* 0x2B4 */ Actor* unk_2B4; diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index 3c499aa7a..d7d7460c8 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -72,10 +72,10 @@ void DmChar03_Destroy(Actor* thisx, PlayState* play) { } void func_80AAB5F8(DmChar03* this, PlayState* play) { - s32 index = Object_GetSlot(&play->objectCtx, OBJECT_GI_NUTSMASK); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_NUTSMASK); - if (index >= 0) { - this->objectIndex = index; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AAB644; } } @@ -187,13 +187,13 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { void func_80AABA84(PlayState* play, DmChar03* this) { s32 pad; - if (this->actor.objBankIndex == this->objectIndex) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->offset.x, this->offset.y, this->offset.z, MTXMODE_NEW); Matrix_RotateZYX(0, (play->gameplayFrames * 0x3E8), 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, GID_MASK_DEKU); } - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h index 5b4a2e621..3b60c18c2 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h @@ -13,7 +13,7 @@ typedef struct DmChar03 { /* 0x188 */ DmChar03ActionFunc actionFunc; /* 0x18C */ s16 animIndex; /* 0x18E */ u8 unk_18E; - /* 0x18F */ u8 objectIndex; + /* 0x18F */ u8 objectSlot; /* 0x190 */ Vec3f offset; } DmChar03; // size = 0x19C diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index f2f8980a0..43c049f97 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -178,10 +178,10 @@ void DmChar05_Destroy(Actor* thisx, PlayState* play) { } void func_80AAC990(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_GOLONMASK); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_GOLONMASK); - if (objectIdx >= 0) { - this->unk_18F = objectIdx; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AAC9DC; } } @@ -200,10 +200,10 @@ void func_80AAC9DC(DmChar05* this, PlayState* play) { } void func_80AACA98(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK13); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK13); - if (objectIdx >= 0) { - this->unk_18F = objectIdx; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AACAE4; } } @@ -227,15 +227,15 @@ void func_80AACAE4(DmChar05* this, PlayState* play) { } void func_80AACBE4(DmChar05* this, PlayState* play) { - static s16 D_80AAE2F0[] = { + static s16 sObjectIds[] = { OBJECT_GI_MASK17, OBJECT_GI_MASK14, OBJECT_GI_MASK10, OBJECT_GI_MASK21, OBJECT_GI_MASK11, OBJECT_GI_MASK20, OBJECT_GI_RABIT_MASK, OBJECT_GI_MASK12, }; s32 params = DMCHAR05_GET(&this->actor) - DMCHAR05_5; - s32 objectIdx = Object_GetSlot(&play->objectCtx, D_80AAE2F0[params]); + s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[params]); - if (objectIdx >= 0) { - this->unk_18F = objectIdx; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AACD0C; } } @@ -278,10 +278,10 @@ void func_80AACD0C(DmChar05* this, PlayState* play) { } void func_80AACD1C(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_ZORAMASK); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_ZORAMASK); - if (objectIdx >= 0) { - this->unk_18F = objectIdx; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AACD68; } } @@ -298,10 +298,10 @@ void func_80AACD68(DmChar05* this, PlayState* play) { } void func_80AACE10(DmChar05* this, PlayState* play) { - s32 objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK15); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_GI_MASK15); - if (objectIdx >= 0) { - this->unk_18F = objectIdx; + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; this->actionFunc = func_80AACE5C; } } @@ -723,55 +723,55 @@ void DmChar05_Draw(Actor* thisx, PlayState* play) { } void func_80AADD9C(PlayState* play, DmChar05* this) { - if (this->actor.objBankIndex == this->unk_18F) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW); Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, GID_MASK_GORON); } - if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) { - this->actor.objBankIndex = this->unk_18F; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } void func_80AADE78(PlayState* play, DmChar05* this) { - if (this->actor.objBankIndex == this->unk_18F) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW); Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, GID_MASK_ZORA); } - if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) { - this->actor.objBankIndex = this->unk_18F; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } void func_80AADF54(PlayState* play, DmChar05* this) { - if (this->actor.objBankIndex == this->unk_18F) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW); Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, GID_MASK_GIBDO); } - if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) { - this->actor.objBankIndex = this->unk_18F; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } void func_80AAE030(PlayState* play, DmChar05* this) { if (this->unk_18E != 0) { - if (this->actor.objBankIndex == this->unk_18F) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->unk_190.x, this->unk_190.y, this->unk_190.z, MTXMODE_NEW); Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, GID_MASK_COUPLE); } - if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) { - this->actor.objBankIndex = this->unk_18F; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } } @@ -784,14 +784,14 @@ void func_80AAE114(PlayState* play, DmChar05* this) { }; getItemDrawIndex = DMCHAR05_GET(&this->actor) - DMCHAR05_5; - if (this->actor.objBankIndex == this->unk_18F) { + if (this->actor.objectSlot == this->objectSlot) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY); Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); GetItem_Draw(play, getItemDrawIds[getItemDrawIndex]); } - if (Object_IsLoaded(&play->objectCtx, this->unk_18F)) { - this->actor.objBankIndex = this->unk_18F; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; } } diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h index 62500ec9c..a690cd50f 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h @@ -31,7 +31,7 @@ typedef struct DmChar05 { /* 0x188 */ DmChar05ActionFunc actionFunc; /* 0x18C */ s16 animIndex; /* 0x18E */ u8 unk_18E; - /* 0x18F */ u8 unk_18F; + /* 0x18F */ u8 objectSlot; /* 0x190 */ Vec3f unk_190; /* 0x19C */ u32 unk_19C; /* 0x1A0 */ u32 unk_1A0; diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index ec5a83095..3994c8fce 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -70,41 +70,41 @@ static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = { }; s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { - s8 objectIndex = this->actor.objBankIndex; + s8 objectSlot = this->actor.objectSlot; s8 objectIndex2; s32 isAnimFinished = false; if (this->animIndex <= DMGM_ANIM_1) { - objectIndex2 = this->actor.objBankIndex; + objectIndex2 = this->actor.objectSlot; } else { - objectIndex2 = this->unk_2AC; + objectIndex2 = this->an4ObjectSlot; } if (objectIndex2 >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return isAnimFinished; } s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { - s8 objectIndex = this->actor.objBankIndex; + s8 objectSlot = this->actor.objectSlot; s8 objectIndex2; s32 didAnimChange = false; if (animIndex <= DMGM_ANIM_1) { - objectIndex2 = this->actor.objBankIndex; + objectIndex2 = this->actor.objectSlot; } else { - objectIndex2 = this->unk_2AC; + objectIndex2 = this->an4ObjectSlot; } if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return didAnimChange; @@ -191,8 +191,8 @@ Actor* func_80C24838(PlayState* play) { } void func_80C248A8(DmGm* this, PlayState* play) { - if ((this->unk_2AC >= 0) && SubS_IsObjectLoaded(this->unk_2AC, play) && (this->unk_2AD >= 0) && - SubS_IsObjectLoaded(this->unk_2AD, play)) { + if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && + (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, OBJECT_AN1_LIMB_MAX); @@ -273,8 +273,8 @@ void DmGm_DoNothing(DmGm* this, PlayState* play) { void DmGm_Init(Actor* thisx, PlayState* play) { DmGm* this = THIS; - this->unk_2AC = SubS_GetObjectIndex(OBJECT_AN4, play); - this->unk_2AD = SubS_GetObjectIndex(OBJECT_MSMO, play); + this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play); + this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play); this->actionFunc = func_80C248A8; } @@ -302,8 +302,8 @@ Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f }; void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad[2]; DmGm* this = THIS; - s8 sp2B = this->actor.objBankIndex; - s8 sp2A = this->unk_2AD; + s8 sp2B = this->actor.objectSlot; + s8 sp2A = this->msmoObjectSlot; if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h index e54ee07ee..8abcba712 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -18,8 +18,8 @@ typedef struct DmGm { /* 0x1A4 */ Vec3s unk_1AA; /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; - /* 0x2AC */ s8 unk_2AC; - /* 0x2AD */ s8 unk_2AD; + /* 0x2AC */ s8 an4ObjectSlot; + /* 0x2AD */ s8 msmoObjectSlot; /* 0x2AE */ u16 unk_2AE; /* 0x2B0 */ u8 cueId; /* 0x2B4 */ Actor* unk_2B4; diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index c9aaa48cb..ee323aa2b 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -307,20 +307,20 @@ static AnimationInfo sAnimationInfo[SK_ANIM_LAUGH_AFTER_MAX] = { * Ensures the correct object for the current animation is in segment 6. */ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) { - s32 objectIndex; + s32 objectSlot; if (((this->animIndex >= SK_ANIM_SHAKE_HEAD) && (this->animIndex <= SK_ANIM_BENT_OVER_HEAD_TWITCH)) || (this->animIndex == SK_ANIM_CALL_DOWN_MOON_START) || (this->animIndex == SK_ANIM_CALL_DOWN_MOON_LOOP) || (this->animIndex == SK_ANIM_TELESCOPE_LOOK_UP_START) || (this->animIndex == SK_ANIM_TELESCOPE_LOOK_UP_LOOP)) { - objectIndex = this->objectStkObjectIndex; + objectSlot = this->objectStkObjectSlot; } else if (this->animIndex >= SK_ANIM_LOOK_UP_AT_GIANTS) { - objectIndex = this->objectStk3ObjectIndex; + objectSlot = this->objectStk3ObjectSlot; } else { - objectIndex = this->objectStk2ObjectIndex; + objectSlot = this->objectStk2ObjectSlot; } - if (objectIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex].segment); + if (objectSlot > OBJECT_SLOT_NONE) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } } @@ -1062,10 +1062,10 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->shouldDraw = true; if (DM_STK_GET_TYPE(&this->actor) != DM_STK_TYPE_MAJORAS_MASK) { this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_NOT_READY; - this->objectStkObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK); - this->objectStk2ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK2); - this->objectStk3ObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_STK3); - if (this->objectStkObjectIndex < 0) { + this->objectStkObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK); + this->objectStk2ObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK2); + this->objectStk3ObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STK3); + if (this->objectStkObjectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); } @@ -1965,18 +1965,18 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_513) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_513)]->id == 2) && - (this->objectStk2ObjectIndex >= 0)) { + (this->objectStk2ObjectSlot > OBJECT_SLOT_NONE)) { Matrix_Push(); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStk2ObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStk2ObjectSlot].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStk2ObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStk2ObjectSlot].segment); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gSkullKidMajorasMaskCurseOverlayTexAnim)); Gfx_DrawDListOpa(play, gSkullKidMajorasMaskCurseOverlayDL); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectSlot].segment); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStkObjectIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectStkObjectSlot].segment); Matrix_Pop(); } @@ -2095,7 +2095,7 @@ void DmStk_Draw(Actor* thisx, PlayState* play) { return; } - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectStkObjectSlot].segment); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h index cc7ac89ea..0b723019a 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h @@ -43,9 +43,9 @@ typedef struct DmStk { /* 0x330 */ s32 fadeOutTimer; /* 0x334 */ u8 cueId; /* 0x335 */ u8 hasBeenHit; // set but never used - /* 0x336 */ s8 objectStkObjectIndex; - /* 0x337 */ s8 objectStk2ObjectIndex; - /* 0x338 */ s8 objectStk3ObjectIndex; + /* 0x336 */ s8 objectStkObjectSlot; + /* 0x337 */ s8 objectStk2ObjectSlot; + /* 0x338 */ s8 objectStk3ObjectSlot; /* 0x339 */ u8 deflectCount; /* 0x33A */ u8 dekuPipesCutsceneState; /* 0x33B */ u8 shouldDraw; diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 5d49a16e7..382ed890d 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -234,7 +234,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->slidingDoor.dyna.actor.room = -1; } - if ((this->requiredObjBankIndex = Object_GetSlot(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { + if ((this->objectSlot = Object_GetSlot(&play->objectCtx, D_808A2180[sp24].objectId)) <= OBJECT_SLOT_NONE) { Actor_Kill(&this->slidingDoor.dyna.actor); return; } @@ -263,9 +263,9 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) { } void DoorShutter_SetupType(DoorShutter* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) && + if (Object_IsLoaded(&play->objectCtx, this->objectSlot) && (!R_PLAY_FILL_SCREEN_ON || (R_PLAY_FILL_SCREEN_ALPHA == 0))) { - this->slidingDoor.dyna.actor.objBankIndex = this->requiredObjBankIndex; + this->slidingDoor.dyna.actor.objectSlot = this->objectSlot; this->slidingDoor.dyna.actor.draw = DoorShutter_Draw; DoorShutter_SetupDoor(this, play); } diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h index 5b42db50a..d1ccd1955 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -18,7 +18,7 @@ typedef struct DoorShutter { /* 0x0162 */ u8 doorType; /* 0x0163 */ u8 unk_163; /* 0x0164 */ u8 unk_164; - /* 0x0165 */ s8 requiredObjBankIndex; + /* 0x0165 */ s8 objectSlot; /* 0x0166 */ s8 unk_166; /* 0x0167 */ s8 unk_167; /* 0x0168 */ f32 unk_168; diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 46fd9d5b2..850ffa198 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -215,13 +215,13 @@ void EnBba01_Init(Actor* thisx, PlayState* play) { s32 pad; EnBba01* this = THIS; - this->enHy.animObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play); - this->enHy.headObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play); - this->enHy.skelUpperObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play); - this->enHy.skelLowerObjIndex = SubS_GetObjectIndex(OBJECT_BBA, play); + this->enHy.animObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play); + this->enHy.headObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play); + this->enHy.skelUpperObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play); + this->enHy.skelLowerObjectSlot = SubS_GetObjectSlot(OBJECT_BBA, play); - if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) || - (this->enHy.skelLowerObjIndex < 0)) { + if ((this->enHy.animObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.headObjectSlot <= OBJECT_SLOT_NONE) || + (this->enHy.skelUpperObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.skelLowerObjectSlot <= OBJECT_SLOT_NONE)) { Actor_Kill(&this->enHy.actor); } this->enHy.actor.draw = NULL; @@ -264,9 +264,9 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjectSlot].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjectSlot].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjectSlot].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -303,8 +303,8 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == BBA_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 09d67ac24..c55169218 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -205,13 +205,13 @@ void EnCne01_Init(Actor* thisx, PlayState* play) { s32 pad; EnCne01* this = THIS; - this->enHy.animObjIndex = SubS_GetObjectIndex(OBJECT_OS_ANIME, play); - this->enHy.headObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play); - this->enHy.skelUpperObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play); - this->enHy.skelLowerObjIndex = SubS_GetObjectIndex(OBJECT_CNE, play); + this->enHy.animObjectSlot = SubS_GetObjectSlot(OBJECT_OS_ANIME, play); + this->enHy.headObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play); + this->enHy.skelUpperObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play); + this->enHy.skelLowerObjectSlot = SubS_GetObjectSlot(OBJECT_CNE, play); - if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) || - (this->enHy.skelLowerObjIndex < 0)) { + if ((this->enHy.animObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.headObjectSlot <= OBJECT_SLOT_NONE) || + (this->enHy.skelUpperObjectSlot <= OBJECT_SLOT_NONE) || (this->enHy.skelLowerObjectSlot <= OBJECT_SLOT_NONE)) { Actor_Kill(&this->enHy.actor); } this->enHy.actor.draw = NULL; @@ -254,10 +254,10 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == CNE_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjIndex].segment); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.headObjectSlot].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.headObjectSlot].segment); *dList = gCneHeadBrownHairDL; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelLowerObjectSlot].segment); CLOSE_DISPS(play->state.gfxCtx); } @@ -294,8 +294,8 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == CNE_LIMB_RIGHT_FOOT) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->enHy.skelUpperObjectSlot].segment); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index 01b701ce1..1e322650e 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -582,16 +582,16 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) { s32 i; GraphicsContext* gfxCtx = play->state.gfxCtx; EnDaiku2Effect* effect = this->effects; - s32 objectIdx; + s32 objectSlot; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - objectIdx = Object_GetSlot(&play->objectCtx, OBJECT_BOMBIWA); - if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) { + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_BOMBIWA); + if ((objectSlot > OBJECT_SLOT_NONE) && Object_IsLoaded(&play->objectCtx, objectSlot)) { gDPPipeSync(POLY_OPA_DISP++); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectIdx].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 61170a5d0..0dab8ff45 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -209,10 +209,10 @@ s32 func_80A515C4(EnDnk* this) { } void func_80A51648(EnDnk* this, PlayState* play) { - if (SubS_IsObjectLoaded(this->unk_28E, play) == true) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_28E].segment); + if (SubS_IsObjectLoaded(this->objectSlot, play) == true) { + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); this->actor.draw = func_80A52018; - this->actor.objBankIndex = this->unk_28E; + this->actor.objectSlot = this->objectSlot; ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f); switch (ENDNK_GET_3(&this->actor)) { @@ -263,22 +263,23 @@ void EnDnk_DoNothing(EnDnk* this, PlayState* play) { void EnDnk_Init(Actor* thisx, PlayState* play) { EnDnk* this = THIS; - this->unk_28E = -1; + this->objectSlot = OBJECT_SLOT_NONE; + switch (ENDNK_GET_3(&this->actor)) { case ENDNK_GET_3_1: - this->unk_28E = SubS_GetObjectIndex(OBJECT_HINTNUTS, play); + this->objectSlot = SubS_GetObjectSlot(OBJECT_HINTNUTS, play); break; case ENDNK_GET_3_0: - this->unk_28E = SubS_GetObjectIndex(OBJECT_DNK, play); + this->objectSlot = SubS_GetObjectSlot(OBJECT_DNK, play); break; case ENDNK_GET_3_2: - this->unk_28E = SubS_GetObjectIndex(OBJECT_DEKUNUTS, play); + this->objectSlot = SubS_GetObjectSlot(OBJECT_DEKUNUTS, play); break; } - if (this->unk_28E >= 0) { + if (this->objectSlot > OBJECT_SLOT_NONE) { this->actionFunc = func_80A51648; } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h index ba870d67b..8b0900ae7 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h @@ -33,7 +33,7 @@ typedef struct EnDnk { /* 0x21E */ Vec3s morphTable[DNK_LIMB_MAX]; /* 0x260 */ Gfx* unk_260[DEKU_PALACE_GUARD_LIMB_MAX]; /* 0x28C */ u16 unk_28C; - /* 0x28E */ s8 unk_28E; + /* 0x28E */ s8 objectSlot; /* 0x290 */ s16 unk_290; /* 0x292 */ s16 unk_292; /* 0x294 */ s16 unk_294; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 124dee6f7..3451af722 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -294,7 +294,7 @@ typedef struct { /* 0x4 */ s16 objectId; } EnDoorInfo; // size = 0x6 -static EnDoorInfo sObjInfo[] = { +static EnDoorInfo sObjectInfo[] = { { SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ }, { SCENE_TENMON_DAI, 0x02, OBJECT_DOR01 }, { SCENE_00KEIKOKU, 0x02, OBJECT_DOR01 }, @@ -416,8 +416,8 @@ static Gfx* D_808679A4[14][2] = { void EnDoor_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; - s32 objectBankIndex; - EnDoorInfo* objectInfo = &sObjInfo[0]; + s32 objectSlot; + EnDoorInfo* objectInfo = &sObjectInfo[0]; EnDoor* this = THIS; s32 i; @@ -433,31 +433,32 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { SkelAnime_Init(play, &this->knobDoor.skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable, this->limbTable, DOOR_LIMB_MAX); if (this->doorType == ENDOOR_TYPE_5) { - objectInfo = &sObjInfo[17 + this->switchFlag]; + objectInfo = &sObjectInfo[17 + this->switchFlag]; } else { - for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) { + for (i = 0; i < ARRAY_COUNT(sObjectInfo) - 34; i++, objectInfo++) { if (play->sceneId == objectInfo->sceneId) { break; } } - if ((i >= ARRAY_COUNT(sObjInfo) - 34) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= ARRAY_COUNT(sObjectInfo) - 34) && + (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) > OBJECT_SLOT_NONE)) { objectInfo++; } } this->knobDoor.dlIndex = objectInfo->dListIndex; - objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); - if (objectBankIndex < 0) { - objectInfo = &sObjInfo[15]; - objectBankIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); - if (objectBankIndex != 0) { + objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId); + if (objectSlot <= OBJECT_SLOT_NONE) { + objectInfo = &sObjectInfo[15]; + objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId); + if (objectSlot != 0) { Actor_Kill(&this->knobDoor.dyna.actor); return; } } - this->knobDoor.requiredObjBankIndex = objectBankIndex; + this->knobDoor.objectSlot = objectSlot; this->knobDoor.dlIndex = objectInfo->dListIndex; // Set twice? - if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { + if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) { func_80866A5C(this, play); } else { this->actionFunc = func_80866A5C; @@ -480,8 +481,8 @@ void EnDoor_Destroy(Actor* thisx, PlayState* play) { } void func_80866A5C(EnDoor* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { - this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.objectSlot)) { + this->knobDoor.dyna.actor.objectSlot = this->knobDoor.objectSlot; this->actionFunc = func_80866B20; this->knobDoor.dyna.actor.world.rot.y = 0; if (this->doorType == ENDOOR_TYPE_1) { @@ -688,7 +689,7 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnDoor_Draw(Actor* thisx, PlayState* play) { EnDoor* this = THIS; - if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { + if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) { OPEN_DISPS(play->state.gfxCtx); if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index b771d09fe..c6c1b312e 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -58,7 +58,7 @@ typedef struct { /* 0x4 */ s16 objectId; } EnDoorEtcInfo; // size = 0x6 -EnDoorEtcInfo sObjInfo[] = { +EnDoorEtcInfo sObjectInfo[] = { { SCENE_MITURIN, 1, OBJECT_NUMA_OBJ }, { -1, 0, GAMEPLAY_KEEP }, { -1, 13, GAMEPLAY_FIELD_KEEP }, @@ -87,8 +87,8 @@ static InitChainEntry sInitChain[] = { void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; - s32 objectIndex; - EnDoorEtcInfo* objectInfo = sObjInfo; + s32 objectSlot; + EnDoorEtcInfo* objectInfo = sObjectInfo; s32 i; EnDoorEtc* this = THIS; @@ -101,16 +101,16 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { break; } } - if ((i >= 15) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) >= 0)) { + if ((i >= 15) && (Object_GetSlot(&play->objectCtx, GAMEPLAY_FIELD_KEEP) > OBJECT_SLOT_NONE)) { objectInfo++; } - objectIndex = Object_GetSlot(&play->objectCtx, objectInfo->objectId); - if (objectIndex < 0) { + objectSlot = Object_GetSlot(&play->objectCtx, objectInfo->objectId); + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->knobDoor.dyna.actor); } else { - this->knobDoor.requiredObjBankIndex = objectIndex; + this->knobDoor.objectSlot = objectSlot; this->knobDoor.dlIndex = objectInfo->dListIndex; - if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { + if (this->knobDoor.dyna.actor.objectSlot == this->knobDoor.objectSlot) { EnDoorEtc_WaitForObject(this, play); } else { this->actionFunc = EnDoorEtc_WaitForObject; @@ -139,9 +139,9 @@ s32 EnDoorEtc_IsDistanceGreater(Vec3f* a, Vec3f* b, f32 c) { } void EnDoorEtc_WaitForObject(EnDoorEtc* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.objectSlot)) { this->knobDoor.dyna.actor.flags &= ~ACTOR_FLAG_10; - this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; + this->knobDoor.dyna.actor.objectSlot = this->knobDoor.objectSlot; this->actionFunc = func_80AC2354; this->knobDoor.dyna.actor.draw = EnDoorEtc_Draw; } diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index a521abaa0..e067b57b4 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -68,7 +68,7 @@ void EnDrs_CollisionUpdate(EnDrs* this, PlayState* play) { void EnDrs_Setup(EnDrs* this, PlayState* play) { s32 pad[2]; - if ((this->moonMaskObjBankIndex >= 0) && SubS_IsObjectLoaded(this->moonMaskObjBankIndex, play)) { + if ((this->moonMaskObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->moonMaskObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gWeddingDressMannequinSkel, NULL, this->jointTable, this->morphTable, WEDDING_DRESS_MANNEQUIN_LIMB_MAX); @@ -87,7 +87,7 @@ void EnDrs_Idle(EnDrs* this, PlayState* play) { void EnDrs_Init(Actor* thisx, PlayState* play) { EnDrs* this = THIS; - this->moonMaskObjBankIndex = SubS_GetObjectIndex(OBJECT_MSMO, play); + this->moonMaskObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play); this->actionFunc = EnDrs_Setup; } @@ -110,8 +110,8 @@ void EnDrs_Update(Actor* thisx, PlayState* play) { void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnDrs* this = THIS; PlayState* play = play2; - s8 temp = this->moonMaskObjBankIndex; - s8 temp2 = this->actor.objBankIndex; + s8 temp = this->moonMaskObjectSlot; + s8 temp2 = this->actor.objectSlot; // Anju removes the Moon Mask at the start of the Couple's Mask cutscene // after that it will no longer be rendered. diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.h b/src/overlays/actors/ovl_En_Drs/z_en_drs.h index d811ae780..3c9803bf5 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.h +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.h @@ -16,7 +16,7 @@ typedef struct EnDrs { /* 0x18C */ ColliderCylinder collider; /* 0x1D8 */ Vec3s jointTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX]; /* 0x1F0 */ Vec3s morphTable[WEDDING_DRESS_MANNEQUIN_LIMB_MAX]; - /* 0x208 */ s8 moonMaskObjBankIndex; + /* 0x208 */ s8 moonMaskObjectSlot; } EnDrs; // size = 0x20C */ #endif // Z_EN_DRS_H diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 64b7ea1c2..c67a09e65 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -171,8 +171,8 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectIndex].segment); + if ((this->objectSlot > OBJECT_SLOT_NONE) && Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->objectSlot].segment); switch (this->type) { case ENDING_HERO6_TYPE_DAIKU_RED: diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h index 808267b7b..3ec5698e0 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h @@ -27,7 +27,7 @@ typedef struct EnEndingHero6 { /* 0x278 */ EnEndingHero6ActionFunc actionFunc; /* 0x27C */ s32 animIndex; /* 0x280 */ s32 type; - /* 0x284 */ s8 objectIndex; + /* 0x284 */ s8 objectSlot; /* 0x286 */ s16 timer; /* 0x288 */ s16 blinkTimer; /* 0x28A */ s16 eyeState; diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index e902baa2d..33a6bf992 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -132,7 +132,7 @@ void EnFall_RisingDebris_ResetEffects(EnFall* this) { void EnFall_Init(Actor* thisx, PlayState* play) { EnFall* this = THIS; - s32 objectIndex; + s32 objectSlot; this->eyeGlowIntensity = 0.0f; this->flags = 0; @@ -165,27 +165,27 @@ void EnFall_Init(Actor* thisx, PlayState* play) { case EN_FALL_TYPE_LODMOON_NO_LERP: case EN_FALL_TYPE_LODMOON: case EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER: - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_LODMOON); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_LODMOON); break; case EN_FALL_TYPE_MOONS_TEAR: - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MOONSTON); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MOONSTON); break; case EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH: - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL2); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_FALL2); break; default: - objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_FALL); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_FALL); break; } - if (objectIndex < 0) { + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } - this->objIndex = objectIndex; + this->objectSlot = objectSlot; this->actionFunc = EnFall_Setup; } @@ -210,8 +210,8 @@ Actor* EnFall_MoonsTear_GetTerminaFieldMoon(PlayState* play) { void EnFall_Setup(EnFall* this, PlayState* play) { Actor* moon; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { - this->actor.objBankIndex = this->objIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; this->actionFunc = EnFall_Moon_PerformDefaultActions; switch (EN_FALL_TYPE(&this->actor)) { case EN_FALL_TYPE_TITLE_SCREEN_MOON: diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.h b/src/overlays/actors/ovl_En_Fall/z_en_fall.h index 60bb7ec33..dde56ce91 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h @@ -30,7 +30,7 @@ typedef struct EnFall { /* 0x000 */ Actor actor; /* 0x144 */ s16 dayStartTime; /* 0x146 */ s16 currentDay; - /* 0x148 */ u8 objIndex; + /* 0x148 */ u8 objectSlot; /* 0x14C */ f32 scale; /* 0x150 */ union { f32 eyeGlowIntensity; diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 938874266..10c8b5037 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -416,12 +416,12 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { } void EnGeg_UpdateSkelAnime(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); SkelAnime_Update(&this->skelAnime); } void EnGeg_ChangeAnim(EnGeg* this, PlayState* play) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_248].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -454,7 +454,7 @@ s32 func_80BB2088(EnGeg* this, PlayState* play) { } void func_80BB217C(EnGeg* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->unk_248)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->animIndex = ENGEG_ANIM_5; EnGeg_ChangeAnim(this, play); Actor_SetScale(&this->actor, 0.01f); @@ -550,8 +550,8 @@ void func_80BB2520(EnGeg* this, PlayState* play) { break; case 0xD66: - this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); - if (this->unk_248 >= 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); + if (this->objectSlot > OBJECT_SLOT_NONE) { this->animIndex = ENGEG_ANIM_19; EnGeg_ChangeAnim(this, play); } @@ -568,8 +568,8 @@ void func_80BB2520(EnGeg* this, PlayState* play) { case 0xD72: case 0xD75: case 0xD8B: - this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); - if (this->unk_248 >= 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); + if (this->objectSlot > OBJECT_SLOT_NONE) { this->animIndex = ENGEG_ANIM_4; EnGeg_ChangeAnim(this, play); } @@ -713,8 +713,8 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor); this->unk_496 = 0xD68; Message_ContinueTextbox(play, this->unk_496); - this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); - if (this->unk_248 >= 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); + if (this->objectSlot > OBJECT_SLOT_NONE) { this->animIndex = ENGEG_ANIM_13; EnGeg_ChangeAnim(this, play); } @@ -926,8 +926,8 @@ void EnGeg_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - this->unk_248 = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); - if (this->unk_248 < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.h b/src/overlays/actors/ovl_En_Geg/z_en_geg.h index 980ada9fd..5d2990a09 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h @@ -23,7 +23,7 @@ typedef struct EnGeg { /* 0x240 */ s16 unk_240; /* 0x242 */ s16 unk_242; /* 0x244 */ s16 unk_244; - /* 0x248 */ s32 unk_248; + /* 0x248 */ s32 objectSlot; /* 0x24C */ Vec3s jointTable[GORON_LIMB_MAX]; /* 0x2B8 */ Vec3s morphTable[GORON_LIMB_MAX]; /* 0x324 */ UNK_TYPE1 unk324[0x144]; diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 299ab5c4b..5481d8a70 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -165,8 +165,8 @@ void EnGirlA_InitObjIndex(EnGirlA* this, PlayState* play) { return; } - this->objIndex = Object_GetSlot(&play->objectCtx, sShopItemEntries[params].objectId); - if (this->objIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, sShopItemEntries[params].objectId); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -564,9 +564,9 @@ void EnGirlA_InitalUpdate(EnGirlA* this, PlayState* play) { s16 params = this->actor.params; ShopItemEntry* shopItem = &sShopItemEntries[params]; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.objBankIndex = this->objIndex; + this->actor.objectSlot = this->objectSlot; this->actor.textId = shopItem->descriptionTextId; this->choiceTextId = shopItem->choiceTextId; diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h index e155ef6df..f289e31d5 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h @@ -27,7 +27,7 @@ typedef struct EnGirlA { /* 0x000 */ Actor actor; /* 0x144 */ UNK_TYPE1 unk144[0x44]; /* 0x188 */ EnGirlAActionFunc actionFunc; - /* 0x18C */ s8 objIndex; + /* 0x18C */ s8 objectSlot; /* 0x190 */ EnGirlAActionFunc mainActionFunc; /* 0x194 */ s32 isInitialized; /* 0x198 */ u16 choiceTextId; diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 39b705649..ca38f91ef 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -306,11 +306,11 @@ EnDoor* func_8094DF90(PlayState* play, s32 arg1) { s32 EnGm_UpdateSkelAnime(EnGm* this, PlayState* play) { s32 isAnimFinished = false; - if (this->unk_262 < 0) { + if (this->objectSlot <= OBJECT_SLOT_NONE) { return false; } - if (this->unk_262 >= 0) { + if (this->objectSlot > OBJECT_SLOT_NONE) { this->skelAnime.playSpeed = this->animPlaySpeed; isAnimFinished = SkelAnime_Update(&this->skelAnime); } @@ -319,7 +319,7 @@ s32 EnGm_UpdateSkelAnime(EnGm* this, PlayState* play) { } s32 EnGm_ChangeAnim(EnGm* this, PlayState* play, s32 animIndex) { - s8 tmp = this->unk_262; + s8 tmp = this->objectSlot; s32 changeAnim = false; s32 didAnimChange = false; @@ -347,7 +347,7 @@ s32 func_8094E0F8(EnGm* this, PlayState* play) { if ((this->unk_260 != play->roomCtx.curRoom.num) && (play->roomCtx.status == 0)) { this->unk_260 = play->roomCtx.curRoom.num; - this->unk_262 = SubS_GetObjectIndex(OBJECT_IN2, play); + this->objectSlot = SubS_GetObjectSlot(OBJECT_IN2, play); this->actor.draw = NULL; this->unk_3FC = 1; } @@ -356,7 +356,7 @@ s32 func_8094E0F8(EnGm* this, PlayState* play) { return false; } - if ((this->unk_262 < 0) || !SubS_IsObjectLoaded(this->unk_262, play)) { + if ((this->objectSlot <= OBJECT_SLOT_NONE) || !SubS_IsObjectLoaded(this->objectSlot, play)) { ret = true; } else { this->actor.draw = EnGm_Draw; @@ -1863,7 +1863,7 @@ void EnGm_Draw(Actor* thisx, PlayState* play) { }; EnGm* this = THIS; - if ((this->unk_258 != 0) && (this->unk_262 >= 0)) { + if ((this->unk_258 != 0) && (this->objectSlot > OBJECT_SLOT_NONE)) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h index 968d6dd07..e5785d837 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -33,7 +33,7 @@ typedef struct EnGm { /* 0x25C */ s32 unk_25C; /* 0x260 */ s8 unk_260; /* 0x261 */ s8 unk_261; - /* 0x262 */ s8 unk_262; + /* 0x262 */ s8 objectSlot; /* 0x264 */ s32* unk_264; /* 0x268 */ Actor* unk_268; /* 0x26C */ UNK_TYPE1 unk_26C[0xC]; diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 2f6217411..691703307 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -978,23 +978,23 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { * @return True if non-repeating animation has finished */ s32 EnGo_UpdateSkelAnime(EnGo* this, PlayState* play) { - s8 objIndex = this->actor.objBankIndex; + s8 objectSlot = this->actor.objectSlot; s8 extraObjIndex = -1; s32 isAnimFinished = false; - if ((this->animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { - extraObjIndex = this->hakuginDemoObjIndex; - } else if ((this->animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { - extraObjIndex = this->taisouObjIndex; + if ((this->animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjectSlot > OBJECT_SLOT_NONE)) { + extraObjIndex = this->hakuginDemoObjectSlot; + } else if ((this->animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjectSlot > OBJECT_SLOT_NONE)) { + extraObjIndex = this->taisouObjectSlot; } else if (this->animIndex < ENGO_ANIM_ATHLETICS_MIN) { - extraObjIndex = this->actor.objBankIndex; + extraObjIndex = this->actor.objectSlot; } if (extraObjIndex >= 0) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[extraObjIndex].segment); this->skelAnime.playSpeed = this->animPlaySpeed; isAnimFinished = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return isAnimFinished; @@ -1038,16 +1038,16 @@ s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { * @return True if animation was changed */ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { - s8 objIndex = this->actor.objBankIndex; + s8 objectSlot = this->actor.objectSlot; s8 extraObjIndex = -1; s32 didAnimChange = false; - if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { - extraObjIndex = this->hakuginDemoObjIndex; - } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { - extraObjIndex = this->taisouObjIndex; + if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjectSlot > OBJECT_SLOT_NONE)) { + extraObjIndex = this->hakuginDemoObjectSlot; + } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjectSlot > OBJECT_SLOT_NONE)) { + extraObjIndex = this->taisouObjectSlot; } else if (animIndex < ENGO_ANIM_ATHLETICS_MIN) { - extraObjIndex = this->actor.objBankIndex; + extraObjIndex = this->actor.objectSlot; } if (extraObjIndex >= 0) { @@ -1055,7 +1055,7 @@ s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimation animIndex) { this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); this->animPlaySpeed = this->skelAnime.playSpeed; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); } return didAnimChange; @@ -1893,8 +1893,8 @@ void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { EffectTireMarkInit tireMarkInit = { 0, 62, { 0, 0, 15, 100 } }; - if (((this->taisouObjIndex < 0) || SubS_IsObjectLoaded(this->taisouObjIndex, play)) || - ((this->hakuginDemoObjIndex < 0) || SubS_IsObjectLoaded(this->hakuginDemoObjIndex, play))) { + if (((this->taisouObjectSlot <= OBJECT_SLOT_NONE) || SubS_IsObjectLoaded(this->taisouObjectSlot, play)) || + ((this->hakuginDemoObjectSlot <= OBJECT_SLOT_NONE) || SubS_IsObjectLoaded(this->hakuginDemoObjectSlot, play))) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); @@ -2412,8 +2412,8 @@ void EnGo_Talk(EnGo* this, PlayState* play) { void EnGo_Init(Actor* thisx, PlayState* play) { EnGo* this = THIS; - this->taisouObjIndex = SubS_GetObjectIndex(OBJECT_TAISOU, play); - this->hakuginDemoObjIndex = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play); + this->taisouObjectSlot = SubS_GetObjectSlot(OBJECT_TAISOU, play); + this->hakuginDemoObjectSlot = SubS_GetObjectSlot(OBJECT_HAKUGIN_DEMO, play); this->actionFunc = EnGo_SetupInitialAction; } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 97959a03e..d6173d6b2 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -93,8 +93,8 @@ typedef struct EnGo { /* 0x1E0 */ ColliderCylinder unusedCylinder; /* 0x22C */ ColliderSphere colliderSphere; /* 0x284 */ Path* gatekeeperPath; - /* 0x288 */ s8 taisouObjIndex; - /* 0x289 */ s8 hakuginDemoObjIndex; + /* 0x288 */ s8 taisouObjectSlot; + /* 0x289 */ s8 hakuginDemoObjectSlot; /* 0x28C */ s32 msgScriptResumePos; /* 0x290 */ Vec3f headPos; /* 0x29C */ Vec3f bodyPos; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index df5718605..eaf49d673 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -738,7 +738,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_DONKEY; this->unk_528 = 80.0f; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HA)) <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -748,8 +748,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->type = HORSE_TYPE_2; this->unk_528 = 64.8f; this->boostSpeed = 15; - if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) < 0) { - thisx->objBankIndex = Object_SpawnPersistent(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); + if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HORSE_LINK_CHILD)) <= OBJECT_SLOT_NONE) { + thisx->objectSlot = Object_SpawnPersistent(&play->objectCtx, OBJECT_HORSE_LINK_CHILD); Actor_SetObjectDependency(play, &this->actor); Skin_Init(&play->state, &this->skin, sSkeletonHeaders[this->type], sAnimationHeaders[this->type][0]); Animation_PlayOnce(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex]); @@ -760,7 +760,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { } else if (ENHORSE_IS_BANDIT_TYPE(&this->actor)) { this->type = HORSE_TYPE_BANDIT; this->boostSpeed = 12; - if ((this->bankIndex = Object_GetSlot(&play->objectCtx, OBJECT_HA)) < 0) { + if ((this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_HA)) <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -948,8 +948,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { void func_8087D540(Actor* thisx, PlayState* play) { EnHorse* this = THIS; - if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) { - this->actor.objBankIndex = this->bankIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); this->actor.update = EnHorse_Update; if (this->unk_1EC & 1) { diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index f3c868c85..8213bed6a 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -150,7 +150,7 @@ typedef struct EnHorse { /* 0x148 */ s32 noInputTimer; /* 0x14C */ s32 noInputTimerMax; /* 0x150 */ s32 type; - /* 0x154 */ s8 bankIndex; + /* 0x154 */ s8 objectSlot; /* 0x158 */ Skin skin; /* 0x1E8 */ s32 stateFlags; /* 0x1EC */ s32 unk_1EC; diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c index 77b4ce909..8efc69c14 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c @@ -209,8 +209,8 @@ void EnInvadepohDemo_DoNothing(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sAlienInitChain); this->actor.flags = ACTOR_FLAG_10 | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_80000000; - this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_UCH); - if (this->objectIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_UCH); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -220,8 +220,8 @@ void EnInvadepohDemo_Alien_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Romani_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sRomaniInitChain); - this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_MA1); - if (this->objectIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MA1); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -233,8 +233,8 @@ void EnInvadepohDemo_Cow_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowInitChain); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH_DEMO, 0.0f, 0.0f, 0.0f, 0, 0, 0, EN_INVADEPOH_DEMO_TYPE_COW_TAIL); - this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); - if (this->objectIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_COW); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -250,8 +250,8 @@ void EnInvadepohDemo_Ufo_Init(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_CowTail_Init(EnInvadepohDemo* this, PlayState* play) { Actor_ProcessInitChain(&this->actor, sCowTailInitChain); - this->objectIndex = Object_GetSlot(&play->objectCtx, OBJECT_COW); - if (this->objectIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_COW); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -503,8 +503,8 @@ void EnInvadepohDemo_CowTail_Idle(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play) { s32 pad[2]; - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; this->actionFunc = EnInvadepohDemo_SelectCueAction; @@ -517,8 +517,8 @@ void EnInvadepohDemo_Alien_WaitForObject(EnInvadepohDemo* this, PlayState* play) void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play) { s32 pad[2]; - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; this->actionFunc = EnInvadepohDemo_SelectCueAction; @@ -531,8 +531,8 @@ void EnInvadepohDemo_Romani_WaitForObject(EnInvadepohDemo* this, PlayState* play void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) { s32 pad[2]; - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; this->actionFunc = EnInvadepohDemo_SelectCueAction; @@ -545,8 +545,8 @@ void EnInvadepohDemo_Cow_WaitForObject(EnInvadepohDemo* this, PlayState* play) { void EnInvadepohDemo_CowTail_WaitForObject(EnInvadepohDemo* this, PlayState* play) { s32 pad[2]; - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); this->drawFlags |= DRAW_FLAG_SHOULD_DRAW; this->actionFunc = EnInvadepohDemo_CowTail_Idle; @@ -786,7 +786,7 @@ void EnInvadepohDemo_Init(Actor* thisx, PlayState* play) { this->ufoRotZ = 0; this->pathIndex = EN_INVADEPOH_DEMO_GET_PATH_INDEX(&this->actor); this->pointIndex = 0; - this->objectIndex = -1; + this->objectSlot = OBJECT_SLOT_NONE; sInitFuncs[this->type](this, play); } diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h index ac93078ec..92e35b39f 100644 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h +++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h @@ -43,7 +43,7 @@ typedef struct EnInvadepohDemo { /* 0x154 */ s32 cueId; // "demo_mode" /* 0x158 */ s32 pathIndex; /* 0x15C */ s32 pointIndex; - /* 0x160 */ s32 objectIndex; + /* 0x160 */ s32 objectSlot; /* 0x164 */ s32 drawFlags; // Only has one flag to control whether or not to draw /* 0x168 */ s32 cueIdOffset; /* 0x16C */ s16 ufoRotZ; diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 2e3e2fc39..44967e4bd 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -71,7 +71,7 @@ static EnIshiUnkFunc2 D_8095F6D8[] = { func_8095D804, func_8095DABC }; static EnIshiUnkFunc D_8095F6E0[] = { func_8095DDA8, func_8095DE9C }; -static s16 D_8095F6E8[] = { GAMEPLAY_FIELD_KEEP, OBJECT_ISHI }; +static s16 sObjectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_ISHI }; static ColliderCylinderInit sCylinderInit[] = { { @@ -173,7 +173,7 @@ s32 func_8095D758(EnIshi* this, PlayState* play, f32 arg2) { void func_8095D804(Actor* thisx, PlayState* play) { EnIshi* this = THIS; s32 i; - s16 temp; + s16 objectId; Gfx* phi_s4; Vec3f spC4; Vec3f spB8; @@ -184,7 +184,7 @@ void func_8095D804(Actor* thisx, PlayState* play) { phi_s4 = gSmallRockDL; } - temp = D_8095F6E8[ENISHI_GET_8(&this->actor)]; + objectId = sObjectIds[ENISHI_GET_8(&this->actor)]; for (i = 0; i < ARRAY_COUNT(D_8095F74C); i++) { spB8.x = ((Rand_ZeroOne() - 0.5f) * 8.0f) + this->actor.world.pos.x; @@ -207,7 +207,7 @@ void func_8095D804(Actor* thisx, PlayState* play) { spC4.z += (Rand_ZeroOne() - 0.5f) * 11.0f; EffectSsKakera_Spawn(play, &spB8, &spC4, &spB8, -420, ((s32)Rand_Next() > 0) ? 65 : 33, 30, 5, 0, D_8095F74C[i], - 3, 10, 40, -1, temp, phi_s4); + 3, 10, 40, -1, objectId, phi_s4); } } @@ -425,8 +425,8 @@ void EnIshi_Init(Actor* thisx, PlayState* play) { this->unk_197 |= 1; } - this->unk_196 = Object_GetSlot(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]); - if (this->unk_196 < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[ENISHI_GET_8(&this->actor)]); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -446,8 +446,8 @@ void func_8095E5AC(EnIshi* this) { } void func_8095E5C0(EnIshi* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->unk_196)) { - this->actor.objBankIndex = this->unk_196; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; this->actor.flags &= ~ACTOR_FLAG_10; if (!ENISHI_GET_8(&this->actor)) { this->actor.draw = func_8095F61C; diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h index 81fc78368..fe1898c13 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h @@ -24,7 +24,7 @@ typedef struct EnIshi { /* 0x190 */ EnIshiActionFunc actionFunc; /* 0x194 */ s8 unk_194; /* 0x195 */ s8 unk_195; - /* 0x196 */ s8 unk_196; + /* 0x196 */ s8 objectSlot; /* 0x197 */ u8 unk_197; } EnIshi; // size = 0x198 diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 0b246b4df..2b65c09e6 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -70,7 +70,7 @@ ActorInit En_Kusa_InitVars = { (ActorFunc)NULL, }; -static s16 objectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_KUSA, OBJECT_KUSA, OBJECT_KUSA }; +static s16 sObjectIds[] = { GAMEPLAY_FIELD_KEEP, OBJECT_KUSA, OBJECT_KUSA, OBJECT_KUSA }; static ColliderCylinderInit sCylinderInit = { { @@ -393,8 +393,8 @@ void EnKusa_Init(Actor* thisx, PlayState* play) { this->isInWater |= 1; } - this->objIndex = Object_GetSlot(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]); - if (this->objIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[(KUSA_GET_TYPE(&this->actor))]); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -428,7 +428,7 @@ void EnKusa_SetupWaitObject(EnKusa* this) { void EnKusa_WaitObject(EnKusa* this, PlayState* play) { s32 pad; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { s32 kusaType = KUSA_GET_TYPE(&this->actor); if (this->isCut) { @@ -441,7 +441,7 @@ void EnKusa_WaitObject(EnKusa* this, PlayState* play) { } else { this->actor.draw = EnKusa_DrawGrass; } - this->actor.objBankIndex = this->objIndex; + this->actor.objectSlot = this->objectSlot; this->actor.flags &= ~ACTOR_FLAG_10; } } diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h index 1871b1dbe..9e46f8b22 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h @@ -45,7 +45,7 @@ typedef struct EnKusa { /* 0x144 */ EnKusaActionFunc actionFunc; /* 0x148 */ ColliderCylinder collider; /* 0x194 */ u8 timer; - /* 0x195 */ s8 objIndex; + /* 0x195 */ s8 objectSlot; /* 0x196 */ s8 kusaMtxIdx; /* 0x197 */ u8 isCut; /* 0x198 */ u8 isInWater; diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 856c13c0d..f9ad697ce 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -707,7 +707,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { s16 step; // Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default. - gSPSegment(gfx++, 0x06, play->objectCtx.slots[this->actor.objBankIndex].segment); + gSPSegment(gfx++, 0x06, play->objectCtx.slots[this->actor.objectSlot].segment); Gfx_SetupDL39_Ptr(&gfx); diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index ed8edb377..83a8be394 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -58,11 +58,11 @@ Color_RGBA8 sPrimColor = { 255, 255, 255, 255 }; Color_RGBA8 sEnvColor = { 80, 80, 80, 255 }; void EnNwc_Init(Actor* thisx, PlayState* play) { - s32 niwObjectIndex; + s32 niwObjectSlot; EnNwc* this = THIS; - niwObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_NIW); - if (niwObjectIndex < 0) { + niwObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_NIW); + if (niwObjectSlot <= OBJECT_SLOT_NONE) { // niw object does not exist, we need it for tranformation, despawn Actor_Kill(&this->actor); return; @@ -75,8 +75,8 @@ void EnNwc_Init(Actor* thisx, PlayState* play) { return; } - this->niwObjectIndex = niwObjectIndex; - this->nwcObjectIndex = this->actor.objBankIndex; + this->niwObjectSlot = niwObjectSlot; + this->nwcObjectIndex = this->actor.objectSlot; this->grog = EnNwc_FindGrog(play); this->footRotY = this->footRotZ = 0; @@ -247,8 +247,8 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) { } void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectIndex].segment); + if (Object_IsLoaded(&play->objectCtx, this->niwObjectSlot)) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->niwObjectSlot].segment); SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkel, &gNiwIdleAnim, this->jointTable, this->morphTable, NIW_LIMB_MAX); @@ -468,11 +468,11 @@ void EnNwc_Update(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); if (this->hasGrownUp & 1) { - this->actor.objBankIndex = this->niwObjectIndex; + this->actor.objectSlot = this->niwObjectSlot; this->actor.draw = EnNwc_DrawAdultBody; this->actor.shape.shadowScale = 15.0f; } else { - this->actor.objBankIndex = this->nwcObjectIndex; + this->actor.objectSlot = this->nwcObjectIndex; this->actor.draw = EnNwc_Draw; this->actor.shape.shadowScale = 6.0f; } diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h index 51c017dff..9ce3ab60e 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h @@ -15,7 +15,7 @@ typedef struct EnNwc { /* 0x144 */ SkelAnime niwSkeleton; // this skeleton is for when the chicks grow up into adults during the breman march /* 0x188 */ Vec3s jointTable[NIW_LIMB_MAX]; /* 0x1E8 */ Vec3s morphTable[NIW_LIMB_MAX]; - /* 0x248 */ s8 niwObjectIndex; + /* 0x248 */ s8 niwObjectSlot; /* 0x249 */ s8 nwcObjectIndex; /* 0x24A */ s16 blinkState; /* 0x24C */ s16 blinkTimer; diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 368052dfc..bcdd2934e 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -267,16 +267,16 @@ void EnOssan_SpawnShopItems(EnOssan* this, PlayState* play, ShopItem* shop) { void EnOssan_Init(Actor* thisx, PlayState* play) { EnOssan* this = THIS; - s16 id; + s16 objectId; if ((this->actor.params > ENOSSAN_PART_TIME_WORKER) && (this->actor.params < ENOSSAN_CURIOSITY_SHOP_MAN)) { //! @bug: Impossible to reach, && should be an || Actor_Kill(&this->actor); return; } - id = sObjectIds[this->actor.params]; - this->objIndex = Object_GetSlot(&play->objectCtx, id); - if (this->objIndex < 0) { + objectId = sObjectIds[this->actor.params]; + this->objectSlot = Object_GetSlot(&play->objectCtx, objectId); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -1506,9 +1506,9 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) { static EnOssanActionFunc sInitFuncs[] = { EnOssan_CuriosityShopMan_Init, EnOssan_PartTimer_Init }; ShopItem* shopItems; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.objBankIndex = this->objIndex; + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); shopItems = sShops[this->actor.params]; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h index da256322a..02c44818f 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h @@ -21,7 +21,7 @@ typedef struct EnOssan { /* 0x18C */ EnOssanActionFunc prevActionFunc; // Used to restore back to correct browsing function /* 0x190 */ ColliderCylinder collider; /* 0x1DC */ s16 delayTimer; - /* 0x1DE */ s8 objIndex; + /* 0x1DE */ s8 objectSlot; /* 0x1E0 */ s16 eyeTexIndex; /* 0x1E2 */ s16 blinkTimer; /* 0x1E4 */ EnOssanBlinkFunc blinkFunc; diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 2f429b975..f7ec8f509 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -786,18 +786,18 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) { if (this->animInfoIndex == EN_S_GORO_ANIM_IDLE_STAND) { if (((EnJg*)this->otherGoron)->flags & 1) { - this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); - if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_TAISOU); + if (this->objectSlot > OBJECT_SLOT_NONE) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); this->animInfoIndex = EN_S_GORO_ANIM_TAISOU_CHEER; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); return true; } } } else if ((this->animInfoIndex == EN_S_GORO_ANIM_TAISOU_CHEER) && !(((EnJg*)this->otherGoron)->flags & 1)) { - this->loadedObjIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); - if (this->loadedObjIndex >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); + if (this->objectSlot > OBJECT_SLOT_NONE) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); this->animInfoIndex = EN_S_GORO_ANIM_IDLE_STAND; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex); this->skelAnime.curFrame = this->skelAnime.endFrame; @@ -1023,7 +1023,7 @@ s32 EnSGoro_UpdateAttentionTarget(EnSGoro* this, PlayState* play) { } void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->actionFlags = 0; if (EN_S_GORO_OFTYPE_WSHRINE) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { @@ -1307,10 +1307,10 @@ void EnSGoro_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); if (this->actor.update != NULL) { - s32 objIndex = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); + s32 objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_OF1D_MAP); - this->loadedObjIndex = objIndex; - if (objIndex < 0) { + this->objectSlot = objectSlot; + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); } } @@ -1329,7 +1329,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->loadedObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); SkelAnime_Update(&this->skelAnime); if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { EnSGoro_UpdateAttentionTarget(this, play); diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h index 9e0cd7792..35b71bfdd 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h @@ -23,7 +23,7 @@ typedef struct EnSGoro { /* 0x1EC */ s16 eyeTexIndex; /* 0x1EE */ s16 eyeTimer; /* 0x1F0 */ s16 loseAttentionTimer; - /* 0x1F4 */ s32 loadedObjIndex; + /* 0x1F4 */ s32 objectSlot; /* 0x1F8 */ Vec3s jointTable[GORON_LIMB_MAX]; /* 0x264 */ Vec3s morphTable[GORON_LIMB_MAX]; /* 0x2D0 */ f32 scaleFactor; diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index 92b88e462..0b22f3d9c 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -55,7 +55,7 @@ static u16 sTextIds[] = { 0, 0, 0, 0, 0x1018 }; void EnSekihi_Init(Actor* thisx, PlayState* play) { EnSekihi* this = THIS; s32 type = ENSIKIHI_GET_TYPE(thisx); - s32 objectIndex; + s32 objectSlot; s32 pad; if (((type < SEKIHI_TYPE_0) || (type >= SEKIHI_TYPE_MAX)) || (sOpaDLists[type] == NULL)) { @@ -69,9 +69,9 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN); } - objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); - if (objectIndex >= 0) { - this->objectIndex = objectIndex; + objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]); + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; } this->actionFunc = func_80A44DE8; this->opaDList = sOpaDLists[type]; @@ -96,8 +96,8 @@ void func_80A44DE8(EnSekihi* this, PlayState* play) { }; type = ENSIKIHI_GET_TYPE(&this->dyna.actor); - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->dyna.actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->dyna.actor.objectSlot = this->objectSlot; this->dyna.actor.draw = EnSekihi_Draw; if (type == SEKIHI_TYPE_4) { this->actionFunc = func_80A450B0; diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h index 0c26dab71..60e7c47ba 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h @@ -15,7 +15,7 @@ typedef struct EnSekihi { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ Gfx* opaDList; /* 0x160 */ Gfx* xluDList; - /* 0x164 */ s8 objectIndex; + /* 0x164 */ s8 objectSlot; /* 0x168 */ EnSekihiActionFunc actionFunc; } EnSekihi; // size = 0x16C diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 8a8be15c4..901e49126 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -379,22 +379,22 @@ void EnSob1_SpawnShopItems(EnSob1* this, PlayState* play, ShopItem* shopItem) { } } -s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { - if (objIds[1] != OBJECT_ID_MAX) { - this->unusedObjIndex = Object_GetSlot(&play->objectCtx, objIds[1]); - if (this->unusedObjIndex < 0) { +s32 EnSob1_GetObjectIndices(EnSob1* this, PlayState* play, s16* objectIds) { + if (objectIds[1] != OBJECT_ID_MAX) { + this->unusedObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[1]); + if (this->unusedObjectSlot <= OBJECT_SLOT_NONE) { return false; } } else { - this->unusedObjIndex = -1; + this->unusedObjectSlot = OBJECT_SLOT_NONE; } - if (objIds[2] != OBJECT_ID_MAX) { - this->shopkeeperAnimObjIndex = Object_GetSlot(&play->objectCtx, objIds[2]); - if (this->shopkeeperAnimObjIndex < 0) { + if (objectIds[2] != OBJECT_ID_MAX) { + this->shopkeeperAnimObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[2]); + if (this->shopkeeperAnimObjectSlot <= OBJECT_SLOT_NONE) { return false; } } else { - this->shopkeeperAnimObjIndex = -1; + this->shopkeeperAnimObjectSlot = OBJECT_SLOT_NONE; } return true; } @@ -402,7 +402,7 @@ s32 EnSob1_GetObjIndices(EnSob1* this, PlayState* play, s16* objIds) { void EnSob1_Init(Actor* thisx, PlayState* play) { EnSob1* this = THIS; s32 pad; - s16* objIds; + s16* objectIds; switch (ENSOB1_GET_SHOPTYPE(thisx)) { case ZORA_SHOP: @@ -426,13 +426,13 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { return; } - objIds = sObjectIds[this->shopType]; - this->mainObjIndex = Object_GetSlot(&play->objectCtx, objIds[0]); - if (this->mainObjIndex < 0) { + objectIds = sObjectIds[this->shopType]; + this->mainObjectSlot = Object_GetSlot(&play->objectCtx, objectIds[0]); + if (this->mainObjectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } - if (!EnSob1_GetObjIndices(this, play, objIds)) { + if (!EnSob1_GetObjectIndices(this, play, objectIds)) { Actor_Kill(&this->actor); return; } @@ -1345,15 +1345,16 @@ void EnSob1_Blink(EnSob1* this) { } void EnSob1_ChangeObject(EnSob1* this, PlayState* play) { - gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); + gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment); } s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->mainObjIndex)) { - if ((this->unusedObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->mainObjectSlot)) { + if ((this->unusedObjectSlot > OBJECT_SLOT_NONE) && !Object_IsLoaded(&play->objectCtx, this->unusedObjectSlot)) { return false; } - if ((this->shopkeeperAnimObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) { + if ((this->shopkeeperAnimObjectSlot > OBJECT_SLOT_NONE) && + !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjectSlot)) { return false; } return true; @@ -1363,7 +1364,7 @@ s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gZoraSkel, NULL, this->jointTable, this->morphTable, ZORA_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment); Animation_Change(&this->skelAnime, &gZoraShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gZoraShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_ZoraShopkeeper_Draw; @@ -1372,7 +1373,7 @@ void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) { void EnSob1_GoronShopkeeper_Init(EnSob1* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->shopkeeperAnimObjectSlot].segment); Animation_Change(&this->skelAnime, &gGoronShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGoronShopkeeperAnim), ANIMMODE_LOOP, 0.0f); this->actor.draw = EnSob1_GoronShopkeeper_Draw; @@ -1394,7 +1395,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { if (EnSob1_AreObjectsLoaded(this, play)) { this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.objBankIndex = this->mainObjIndex; + this->actor.objectSlot = this->mainObjectSlot; Actor_SetObjectDependency(play, &this->actor); posOffset = &sPosOffset[this->shopType]; this->actor.world.pos.x += posOffset->x; diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h index 12c14301b..2ae018ce4 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h @@ -36,9 +36,9 @@ typedef struct EnSob1 { /* 0x1E0 */ Path* path; /* 0x1E4 */ s32 waypoint; /* 0x1E8 */ s16 delayTimer; - /* 0x1EA */ s8 mainObjIndex; - /* 0x1EB */ s8 unusedObjIndex; - /* 0x1EC */ s8 shopkeeperAnimObjIndex; + /* 0x1EA */ s8 mainObjectSlot; + /* 0x1EB */ s8 unusedObjectSlot; + /* 0x1EC */ s8 shopkeeperAnimObjectSlot; /* 0x1EE */ s16 headRot; /* 0x1F0 */ s16 headRotTarget; /* 0x1F2 */ Vec3s jointTable[ENSOB1_LIMB_MAX]; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index 2c2e20e6a..ba1828067 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -245,9 +245,9 @@ void func_808A54B0(EnSt* this, PlayState* play) { if ((this->unk_18C & 1) && (this->actor.colChkInfo.health != 0)) { OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->unk_2C0].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->objectSlot].segment); - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->unk_2C0].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->objectSlot].segment); Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); @@ -693,7 +693,7 @@ s32 func_808A6A3C(EnSt* this) { void func_808A6A78(EnSt* this, PlayState* play) { s32 pad[2]; - if (Object_IsLoaded(&play->objectCtx, this->unk_2C0)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 8.0f); SkelAnime_Init(play, &this->skelAnime, &object_st_Skel_005298, NULL, this->jointTable, this->morphTable, 30); SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); @@ -842,9 +842,9 @@ void func_808A701C(EnSt* this, PlayState* play) { void EnSt_Init(Actor* thisx, PlayState* play) { EnSt* this = THIS; - this->unk_2C0 = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); + this->objectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); if (((ENST_GET_SWITCH_FLAG(&this->actor) != 0x3F) && Flags_GetSwitch(play, ENST_GET_SWITCH_FLAG(&this->actor))) || - (this->unk_2C0 < 0)) { + (this->objectSlot <= OBJECT_SLOT_NONE)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_St/z_en_st.h b/src/overlays/actors/ovl_En_St/z_en_st.h index aab1204aa..dd40a3450 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.h +++ b/src/overlays/actors/ovl_En_St/z_en_st.h @@ -38,7 +38,7 @@ typedef struct EnSt { /* 0x1DC */ ColliderCylinder collider2; /* 0x228 */ ColliderCylinder collider3; /* 0x274 */ ColliderCylinder collider4; - /* 0x2C0 */ s8 unk_2C0; + /* 0x2C0 */ s8 objectSlot; /* 0x2C4 */ f32 unk_2C4; /* 0x2C8 */ f32 unk_2C8; /* 0x2CC */ f32 unk_2CC; diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index daf58065f..c80aaed0b 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -108,16 +108,16 @@ static Color_RGB8 sShirtColors[] = { void EnSth_Init(Actor* thisx, PlayState* play) { s32 pad; EnSth* this = THIS; - s32 objectId; + s32 objectSlot; // this actor can draw two separate bodies that use different objects if (STH_GET_SWAMP_BODY(&this->actor)) { - objectId = Object_GetSlot(&play->objectCtx, OBJECT_AHG); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_AHG); } else { - objectId = Object_GetSlot(&play->objectCtx, OBJECT_STH); + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STH); } - this->mainObjectId = objectId; - this->maskOfTruthObjectId = Object_GetSlot(&play->objectCtx, OBJECT_MASK_TRUTH); + this->mainObjectSlot = objectSlot; + this->maskOfTruthObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MASK_TRUTH); Actor_SetScale(&this->actor, 0.01f); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -619,8 +619,8 @@ void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play) { s32 pad; EnSth* this = THIS; - if (Object_IsLoaded(&play->objectCtx, this->mainObjectId)) { - this->actor.objBankIndex = this->mainObjectId; + if (Object_IsLoaded(&play->objectCtx, this->mainObjectSlot)) { + this->actor.objectSlot = this->mainObjectSlot; Actor_SetObjectDependency(play, &this->actor); if (STH_GET_SWAMP_BODY(&this->actor)) { @@ -733,14 +733,14 @@ void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, OPEN_DISPS(play->state.gfxCtx); if (this->sthFlags & STH_FLAG_DRAW_MASK_OF_TRUTH) { - if (Object_IsLoaded(&play->objectCtx, this->maskOfTruthObjectId)) { + if (Object_IsLoaded(&play->objectCtx, this->maskOfTruthObjectSlot)) { Matrix_Push(); Matrix_RotateZS(0x3A98, MTXMODE_APPLY); Matrix_Translate(0.0f, 190.0f, 0.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[this->maskOfTruthObjectId].segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.slots[this->maskOfTruthObjectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, object_mask_truth_DL_0001A0); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.h b/src/overlays/actors/ovl_En_Sth/z_en_sth.h index dbc459ce1..059ae8c76 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h @@ -42,8 +42,8 @@ typedef struct EnSth { /* 0x294 */ Vec3s headRot; /* 0x29A */ s16 animIndex; /* 0x29C */ u16 sthFlags; - /* 0x29E */ u8 mainObjectId; - /* 0x29F */ u8 maskOfTruthObjectId; + /* 0x29E */ u8 mainObjectSlot; + /* 0x29F */ u8 maskOfTruthObjectSlot; /* 0x2A0 */ EnSthActionFunc actionFunc; } EnSth; // size = 0x2A4 diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index be0821580..e45dd1394 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -35,7 +35,7 @@ ActorInit En_Sth2_InitVars = { void EnSth2_Init(Actor* thisx, PlayState* play) { EnSth2* this = THIS; - this->objIndex = Object_GetSlot(&play->objectCtx, OBJECT_STH); + this->objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_STH); Actor_SetScale(&this->actor, 0.01f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); this->unused = 0; @@ -60,8 +60,8 @@ void EnSth2_Update(Actor* thisx, PlayState* play) { s32 pad; EnSth2* this = THIS; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { - this->actor.objBankIndex = this->objIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->actor); SkelAnime_InitFlex(play, &this->skelAnime, &gSthSkel, &gEnSth2WavingHandAnim, this->jointTable, this->morphTable, STH_LIMB_MAX); diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h index d8ecc9cdb..9375532b4 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h @@ -14,7 +14,7 @@ typedef struct EnSth2 { /* 0x188 */ Vec3s jointTable[STH_LIMB_MAX]; /* 0x1E8 */ Vec3s morphTable[STH_LIMB_MAX]; /* 0x248 */ s16 unused; - /* 0x24A */ u8 objIndex; + /* 0x24A */ u8 objectSlot; /* 0x24C */ EnSth2ActionFunc actionFunc; } EnSth2; // size = 0x250 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 d909826bb..7a9e45bc2 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -79,18 +79,18 @@ void EnTest2_Init(Actor* thisx, PlayState* play) { void EnTest2_Update(Actor* thisx, PlayState* play) { s32 pad; - s32 objectIndex; + s32 objectSlot; EnTest2ModelInfo* modelInfo; EnTest2* this = THIS; - objectIndex = Object_GetSlot(&play->objectCtx, sObjectIds[this->actor.params]); - if (objectIndex < 0) { + objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[this->actor.params]); + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } - if (Object_IsLoaded(&play->objectCtx, objectIndex)) { + if (Object_IsLoaded(&play->objectCtx, objectSlot)) { modelInfo = &sModelInfo[this->actor.params]; - this->actor.objBankIndex = objectIndex; + this->actor.objectSlot = objectSlot; this->actor.draw = EnTest2_Draw; if (modelInfo->animMat != NULL) { Actor_SetObjectDependency(play, &this->actor); diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index 4ae591302..fcac1e837 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -60,7 +60,8 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnWarpTag_WaitForPlayer; } else { - if ((this->dangeonKeepObject = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) { + if ((this->dangeonKeepObjectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) <= + OBJECT_SLOT_NONE) { Actor_Kill(&this->dyna.actor); } @@ -83,11 +84,11 @@ void EnWarptag_Destroy(Actor* thisx, PlayState* play) { * Loads DynaPoly from GAMEPLAY_DANGEON_KEEP. */ void EnWarpTag_CheckDungeonKeepObject(EnWarptag* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObject)) { + if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObjectSlot)) { this->actionFunc = EnWarpTag_WaitForPlayer; DynaPolyActor_Init(&this->dyna, 0x1); DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCol); - this->dyna.actor.objBankIndex = this->dangeonKeepObject; + this->dyna.actor.objectSlot = this->dangeonKeepObjectSlot; this->dyna.actor.draw = EnWarpTag_Draw; } } diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h index ac76ccb67..840cf8a0f 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h @@ -9,7 +9,7 @@ typedef void (*EnWarptagActionFunc)(struct EnWarptag*, PlayState*); typedef struct EnWarptag { /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ s8 dangeonKeepObject; + /* 0x15C */ s8 dangeonKeepObjectSlot; /* 0x15E */ union { s16 reusedValue; // default name s16 unkValue15E; // passed to unk play func, mods player rotation, stepped to 0x2710 diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index ba4507b71..e7308c10d 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -55,12 +55,12 @@ void ItemEtcetera_Init(Actor* thisx, PlayState* play) { s32 pad; ItemEtcetera* this = THIS; s32 type = ITEMETCETERA_GET_FF(&this->actor); - s32 objBankIndex = Object_GetSlot(&play->objectCtx, sObjectIds[type]); + s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]); - if (objBankIndex < 0) { + if (objectSlot <= OBJECT_SLOT_NONE) { // assert on debug } else { - this->objIndex = objBankIndex; + this->objectSlot = objectSlot; } this->getItemDrawId = sGetItemDrawIds[type]; this->getItemId = sGetItemIds[type]; @@ -93,8 +93,8 @@ void ItemEtcetera_Destroy(Actor* thisx, PlayState* play) { } void ItemEtcetera_WaitForObject(ItemEtcetera* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { - this->actor.objBankIndex = this->objIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; this->actor.draw = this->drawFunc; this->actionFunc = this->futureActionFunc; } diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h index 4ac893ba5..92cda8710 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h @@ -32,7 +32,7 @@ typedef struct ItemEtcetera { /* 0x144 */ ItemEtceteraActionFunc futureActionFunc; /* 0x148 */ s16 getItemDrawId; /* 0x14A */ s16 getItemId; - /* 0x14C */ u8 objIndex; + /* 0x14C */ u8 objectSlot; /* 0x150 */ ActorFunc drawFunc; /* 0x154 */ ItemEtceteraActionFunc actionFunc; } ItemEtcetera; // size = 0x158 diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index 069c4b89b..57bfa823c 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -52,7 +52,7 @@ static ColliderCylinderInit sCylinderInit = { { 20, 14, 0, { 0, 0, 0 } }, }; -static s16 objectIds[] = { +static s16 sObjectIds[] = { GAMEPLAY_KEEP, GAMEPLAY_KEEP, GAMEPLAY_KEEP, @@ -71,7 +71,7 @@ static f32 oscillationTable[] = { void ObjEtcetera_Init(Actor* thisx, PlayState* play) { s32 pad; ObjEtcetera* this = THIS; - s32 objectIndex; + s32 objectSlot; s32 type = DEKU_FLOWER_TYPE(&this->dyna.actor); s32 floorBgId; Vec3f pos; @@ -80,9 +80,9 @@ void ObjEtcetera_Init(Actor* thisx, PlayState* play) { type = DEKU_FLOWER_TYPE_PINK; } - objectIndex = Object_GetSlot(&play->objectCtx, objectIds[type]); - if (objectIndex >= 0) { - this->objIndex = objectIndex; + objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[type]); + if (objectSlot > OBJECT_SLOT_NONE) { + this->objectSlot = objectSlot; } pos.x = this->dyna.actor.world.pos.x; @@ -257,8 +257,8 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { type = DEKU_FLOWER_TYPE_PINK; } - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { - this->dyna.actor.objBankIndex = this->objIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->dyna.actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->dyna.actor); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); thisCollisionHeader = collisionHeaders[type]; diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h index 454e3f674..6c8734c85 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h @@ -28,7 +28,7 @@ typedef struct ObjEtcetera { /* 0x270 */ f32 bounceOscillationScale; /* 0x274 */ s16 oscillationTimer; /* 0x276 */ u16 burrowFlag; - /* 0x278 */ s8 objIndex; + /* 0x278 */ s8 objectSlot; /* 0x27C */ Gfx* dList; /* 0x280 */ ObjEtceteraActionFunc actionFunc; } ObjEtcetera; // size = 0x284 diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index 93c79efa6..3885041fd 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -68,7 +68,7 @@ static ColliderCylinderInit sCylinderInit = { { 15, 30, 0, { 0, 0, 0 } }, }; -static s16 sObjectIdList[] = { GAMEPLAY_DANGEON_KEEP, OBJECT_KIBAKO }; +static s16 sObjectIds[] = { GAMEPLAY_DANGEON_KEEP, OBJECT_KIBAKO }; static Gfx* sKakeraDisplayLists[] = { gameplay_dangeon_keep_DL_007980, gSmallCrateFragmentDL }; @@ -135,12 +135,12 @@ void func_80926394(ObjKibako* this, PlayState* play) { void ObjKibako_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjKibako* this = THIS; - s32 whichBankIndex; + s32 objectIndex; - whichBankIndex = KIBAKO_BANK_INDEX(thisx); + objectIndex = KIBAKO_BANK_INDEX(thisx); Actor_ProcessInitChain(&this->actor, sInitChain); Actor_SetScale(&this->actor, 0.15f); - if (whichBankIndex == 0) { + if (objectIndex == 0) { this->actor.uncullZoneForward = 4000.0f; } else { this->actor.uncullZoneForward = 800.0f; @@ -149,8 +149,8 @@ void ObjKibako_Init(Actor* thisx, PlayState* play2) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collider); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->bankIndex = Object_GetSlot(&play->objectCtx, sObjectIdList[whichBankIndex]); - if (this->bankIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[objectIndex]); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -197,7 +197,7 @@ void ObjKibako_AirBreak(ObjKibako* this, PlayState* play) { } EffectSsKakera_Spawn(play, &pos, &velocity, worldPos, -200, phi_s0, 20, 0, 0, (Rand_ZeroOne() * 38.0f) + 10.0f, - 0, 0, 60, -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)], + 0, 0, 60, -1, sObjectIds[KIBAKO_BANK_INDEX(&this->actor)], sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]); } @@ -241,7 +241,7 @@ void ObjKibako_WaterBreak(ObjKibako* this, PlayState* play) { phi_s0 = (temp_rand < 0.2f) ? 0x40 : 0x20; EffectSsKakera_Spawn(play, &pos, &velocity, worldPos, -180, phi_s0, 50, 5, 0, (Rand_ZeroOne() * 35.0f) + 10.0f, - 0, 0, 70, -1, sObjectIdList[KIBAKO_BANK_INDEX(&this->actor)], + 0, 0, 70, -1, sObjectIds[KIBAKO_BANK_INDEX(&this->actor)], sKakeraDisplayLists[KIBAKO_BANK_INDEX(&this->actor)]); } } @@ -254,9 +254,9 @@ void func_80926B54(ObjKibako* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); - if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { this->actor.draw = ObjKibako_Draw; - this->actor.objBankIndex = this->bankIndex; + this->actor.objectSlot = this->objectSlot; ObjKibako_SetupIdle(this); } } diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h index 102dd1e1b..274a335d4 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h @@ -17,7 +17,7 @@ typedef struct ObjKibako { /* 0x144 */ ObjKibakoActionFunc actionFunc; /* 0x148 */ ColliderCylinder collider; /* 0x194 */ s16 timer; - /* 0x196 */ s16 bankIndex; + /* 0x196 */ s16 objectSlot; /* 0x198 */ s8 isDropCollected; /* 0x199 */ s8 unk199; /* room? */ } ObjKibako; // size = 0x19C diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index fdedd55a1..a4259857a 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -49,7 +49,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_U8(targetMode, TARGET_MODE_0, ICHAIN_STOP), }; -s16 D_80BA34B8[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ }; +static s16 sObjectIds[] = { OBJECT_SECOM_OBJ, OBJECT_GI_MSSA, OBJECT_SECOM_OBJ, OBJECT_SECOM_OBJ }; Vec3f D_80BA34C0 = { 0.0f, 0.0f, -1110.0f }; @@ -93,15 +93,15 @@ void ObjNozoki_Destroy(Actor* thisx, PlayState* play) { } void func_80BA2514(ObjNozoki* this, PlayState* play) { - s32 sp24 = Object_GetSlot(&play->objectCtx, D_80BA34B8[this->unk_15C]); + s32 objectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[this->unk_15C]); - if (sp24 < 0) { + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->dyna.actor); return; } - if (Object_IsLoaded(&play->objectCtx, sp24)) { - this->dyna.actor.objBankIndex = sp24; + if (Object_IsLoaded(&play->objectCtx, objectSlot)) { + this->dyna.actor.objectSlot = objectSlot; this->dyna.actor.draw = ObjNozoki_Draw; if (this->unk_15C == 0) { diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c index d8b04684b..9be9106d6 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -130,8 +130,8 @@ void ObjPurify_Init(Actor* thisx, PlayState* play) { if (sp20 == 1) { DynaPolyActor_Init(&this->dyna, 0); } - this->objIndex = Object_GetSlot(&play->objectCtx, info->objectId); - if (this->objIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, info->objectId); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->dyna.actor); } else if (sp20 == 0) { func_80A84EAC(this); @@ -158,10 +158,10 @@ void func_80A84EC0(ObjPurify* this, PlayState* play) { s32 sp28; s32 index; - if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { sp28 = OBJPURIFY_GET_UNK_FLAG(&this->dyna.actor); index = OBJPURIFY_GET_INFO_INDEX(&this->dyna.actor); - this->dyna.actor.objBankIndex = this->objIndex; + this->dyna.actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->dyna.actor); if (sp28 == 1) { DynaPolyActor_LoadMesh(play, &this->dyna, sObjPurifyInfo[index].colHeader); diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h index 2651bf049..cea8c6e9a 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h @@ -12,7 +12,7 @@ typedef struct ObjPurify { /* 0x15C */ ObjPurifyActionFunc actionFunc; /* 0x160 */ s32 gfxIndex; /* 0x164 */ s16 timer; - /* 0x166 */ s16 objIndex; + /* 0x166 */ s16 objectSlot; /* 0x168 */ f32 unk168[2]; } ObjPurify; // size = 0x170 diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index e89b6cd7f..478991a86 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -41,7 +41,7 @@ s16 D_809A4050[] = { 1, -1, 0, 0 }; s16 D_809A4058[] = { 0, 0, 1, -1 }; typedef struct { - /* 0x0 */ s16 unk_00; + /* 0x0 */ s16 objectId; /* 0x4 */ CollisionHeader* unk_04; /* 0x8 */ Gfx* unk_08; } ObjPzlblockStruct; // size = 0xC @@ -207,7 +207,7 @@ void ObjPzlblock_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - this->unk_17A = Object_GetSlot(&play->objectCtx, sp24->unk_00); + this->objectSlot = Object_GetSlot(&play->objectCtx, sp24->objectId); if (sp28 == 0) { func_809A3D1C(this); @@ -330,10 +330,10 @@ void ObjPzlblock_Update(Actor* thisx, PlayState* play) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y; Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); - if (Object_IsLoaded(&play->objectCtx, this->unk_17A)) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { ObjPzlblockStruct* sp2C = &D_809A4060[OBJPZLBLOCK_GET_1000(&this->dyna.actor)]; - this->dyna.actor.objBankIndex = this->unk_17A; + this->dyna.actor.objectSlot = this->objectSlot; Actor_SetObjectDependency(play, &this->dyna.actor); DynaPolyActor_LoadMesh(play, &this->dyna, sp2C->unk_04); this->dyna.actor.update = func_809A3E58; diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h index a6c205fb3..9f235ced1 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h @@ -22,7 +22,7 @@ typedef struct ObjPzlblock { /* 0x16E */ s16 unk_16E[4]; /* 0x176 */ s16 unk_176; /* 0x178 */ s16 unk_178; - /* 0x17A */ s8 unk_17A; + /* 0x17A */ s8 objectSlot; } ObjPzlblock; // size = 0x17C #endif // Z_OBJ_PZLBLOCK_H diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c index 1a316dfab..bdfc48aa8 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -54,7 +54,7 @@ ActorInit Obj_Tsubo_InitVars = { }; typedef struct { - /* 0x00 */ s16 objId; + /* 0x00 */ s16 objectId; /* 0x04 */ f32 scale; /* 0x08 */ Gfx* modelDL; /* 0x0C */ Gfx* shardDL; @@ -186,8 +186,8 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) { this->cylinderCollider.dim.radius = sPotTypeData[type].radius; this->cylinderCollider.dim.height = sPotTypeData[type].height; this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->objBankIndex = Object_GetSlot(&play->objectCtx, sPotTypeData[type].objId); - if (this->objBankIndex < 0) { + this->objectSlot = Object_GetSlot(&play->objectCtx, sPotTypeData[type].objectId); + if (this->objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } @@ -246,7 +246,7 @@ void ObjTsubo_PotBreak1(ObjTsubo* this, PlayState* play) { } scale = Rand_ZeroOne() * 110.0f + 15.0f; EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -260, phi_s0, 20, 0, 0, scale, 0, 0, 50, -1, - typeData->objId, typeData->shardDL); + typeData->objectId, typeData->shardDL); } func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 20, 50, true); func_800BBFB0(play, &this->actor.world.pos, 30.0f, 2, 10, 80, true); @@ -285,7 +285,7 @@ void ObjTsubo_MagicPotBreak1(ObjTsubo* this, PlayState* play) { } scale = Rand_ZeroOne() * 160.0f + 15.0f; EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -340, phi_s0, 20, 0, 0, scale, 0, 0, 50, -1, - typeData->objId, typeData->shardDL); + typeData->objectId, typeData->shardDL); } func_800BBFB0(play, &this->actor.world.pos, 50.0f, 2, 40, 50, true); func_800BBFB0(play, &this->actor.world.pos, 50.0f, 2, 20, 80, true); @@ -330,8 +330,8 @@ void ObjTsubo_PotBreak2(ObjTsubo* this, PlayState* play2) { phi_s0 = 0x20; } scale = Rand_ZeroOne() * 105.0f + 10.0f; - EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, typeData->objId, - typeData->shardDL); + EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, + typeData->objectId, typeData->shardDL); } } @@ -375,8 +375,8 @@ void ObjTsubo_MagicPotBreak2(ObjTsubo* this, PlayState* play2) { phi_s0 = 0xA0; } scale = (Rand_ZeroOne() * 150.0f) + 10.0f; - EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, typeData->objId, - typeData->shardDL); + EffectSsKakera_Spawn(play, &pos, &vel, worldPos, -170, phi_s0, 50, 5, 0, scale, 0, 0, 70, -1, + typeData->objectId, typeData->shardDL); } } @@ -412,7 +412,7 @@ void ObjTsubo_PotBreak3(ObjTsubo* this, PlayState* play2) { phi_s0 = 0x20; } EffectSsKakera_Spawn(play, &pos, &vel, &this->actor.world.pos, -170, phi_s0, 50, 3, 0, - (Rand_ZeroOne() * 105.0f) + 10.0f, 0, 0, 70, -1, typeData->objId, typeData->shardDL); + (Rand_ZeroOne() * 105.0f) + 10.0f, 0, 0, 70, -1, typeData->objectId, typeData->shardDL); } for (i = 0; i < 7; i++) { EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 30.0f, 40.0f, (Rand_ZeroOne() * 0.06f) + 0.09f); @@ -430,8 +430,8 @@ void func_80928914(ObjTsubo* this) { void func_80928928(ObjTsubo* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); - if (Object_IsLoaded(&play->objectCtx, this->objBankIndex)) { - this->actor.objBankIndex = this->objBankIndex; + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; func_809289B4(this); } } diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h index 2b3d1537f..b78f5ec0f 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h @@ -26,7 +26,7 @@ typedef struct ObjTsubo { /* 0x196 */ s8 homeRoom; /* 0x197 */ s8 unk_197; /* 0x198 */ s8 unk_198; - /* 0x199 */ s8 objBankIndex; + /* 0x199 */ s8 objectSlot; /* 0x19A */ s8 unk_19A; /* 0x19B */ u8 unk_19B; } ObjTsubo; // size = 0x19C diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 083b8c05f..2c52ecdec 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3342,7 +3342,7 @@ void Player_InitItemAction_SpawnHookshot(PlayState* play, Player* this) { return; } armsHook = (ArmsHook*)this->heldActor; - armsHook->actor.objBankIndex = this->actor.objBankIndex; + armsHook->actor.objectSlot = this->actor.objectSlot; armsHook->unk_208 = this->transformation; } @@ -10634,7 +10634,7 @@ Vec3f D_8085D340 = { 0.0f, 50.0f, 0.0f }; void Player_Init(Actor* thisx, PlayState* play) { s32 pad; Player* this = THIS; - s8 objBankIndex; + s8 objectSlot; s32 respawnFlag; s32 var_a1; PlayerInitMode initMode; @@ -10661,9 +10661,9 @@ void Player_Init(Actor* thisx, PlayState* play) { if (this->actor.shape.rot.x != 0) { this->transformation = this->actor.shape.rot.x - 1; - objBankIndex = Object_GetSlot(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); - this->actor.objBankIndex = objBankIndex; - if (objBankIndex < 0) { + objectSlot = Object_GetSlot(&play->objectCtx, gPlayerFormObjectIds[this->transformation]); + this->actor.objectSlot = objectSlot; + if (objectSlot <= OBJECT_SLOT_NONE) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c index a7161d37e..fffd5b1d9 100644 --- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c +++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c @@ -19,14 +19,14 @@ EffectSsInit Effect_En_Ice_Block_InitVars = { EffectEnIceBlock_Init, }; -#define rObjId regs[0] +#define rObjectSlot regs[0] #define rScale regs[1] #define rRot regs[2] #define rRotVel regs[3] u32 EffectEnIceBlock_CheckIceBlockObject(EffectSs* this, PlayState* play) { - if (((this->rObjId = Object_GetSlot(&play->objectCtx, OBJECT_ICE_BLOCK)) < 0) || - (!Object_IsLoaded(&play->objectCtx, this->rObjId))) { + if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_ICE_BLOCK)) <= OBJECT_SLOT_NONE) || + (!Object_IsLoaded(&play->objectCtx, this->rObjectSlot))) { this->life = -1; this->draw = NULL; return false; @@ -63,7 +63,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x06, - play->objectCtx.slots[this->rObjId].segment); // object: OBJECT_ICE_BLOCK + play->objectCtx.slots[this->rObjectSlot].segment); // object: OBJECT_ICE_BLOCK Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index 5febef413..0cc62b42d 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -13,7 +13,7 @@ #define rAlphaStep regs[6] #define rFadeDelay regs[7] #define rScaleStep regs[8] -#define rObjectIndex regs[9] +#define rObjectSlot regs[9] #define PARAMS ((EffectSsDFireInitParams*)initParamsx) @@ -29,8 +29,8 @@ EffectSsInit Effect_Ss_D_Fire_InitVars = { static TexturePtr sFireTextures[] = { gDodongoFire0Tex, gDodongoFire1Tex, gDodongoFire2Tex, gDodongoFire3Tex }; s32 EffectSsDFire_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjectIndex = Object_GetSlot(&play->objectCtx, OBJECT_DODONGO)) < 0) || - !Object_IsLoaded(&play->objectCtx, this->rObjectIndex)) { + if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_DODONGO)) <= OBJECT_SLOT_NONE) || + !Object_IsLoaded(&play->objectCtx, this->rObjectSlot)) { this->life = -1; this->draw = NULL; return false; @@ -65,16 +65,16 @@ u32 EffectSsDFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) { GraphicsContext* gfxCtx = play->state.gfxCtx; s32 pad; - void* object; + void* objectPtr; f32 scale; if (EffectSsDFire_CheckForObject(this, play)) { - object = play->objectCtx.slots[this->rObjectIndex].segment; + objectPtr = play->objectCtx.slots[this->rObjectSlot].segment; OPEN_DISPS(gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(object); - gSPSegment(POLY_XLU_DISP++, 0x06, object); + gSegments[6] = VIRTUAL_TO_PHYSICAL(objectPtr); + gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr); scale = this->rScale / 100.0f; diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index e15e58f25..f8b20175b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -23,7 +23,7 @@ EffectSsInit Effect_Ss_Extra_InitVars = { static TexturePtr sPointTextures[] = { gYabusamePoint30Tex, gYabusamePoint60Tex, gYabusamePoint100Tex }; -#define rObjId regs[0] +#define rObjectSlot regs[0] #define rTimer regs[1] #define rScoreIndex regs[2] #define rScale regs[3] @@ -31,13 +31,13 @@ static TexturePtr sPointTextures[] = { gYabusamePoint30Tex, gYabusamePoint60Tex, u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx) { s32 pad; EffectSsExtraInitParams* params = PARAMS; - s32 objIndex; + s32 objectSlot; - objIndex = Object_GetSlot(&play->objectCtx, OBJECT_YABUSAME_POINT); - if ((objIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objIndex))) { + objectSlot = Object_GetSlot(&play->objectCtx, OBJECT_YABUSAME_POINT); + if ((objectSlot > OBJECT_SLOT_NONE) && (Object_IsLoaded(&play->objectCtx, objectSlot))) { void* segBackup = gSegments[6]; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objIndex].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); this->pos = params->pos; this->velocity = params->velocity; @@ -48,7 +48,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->rScoreIndex = params->scoreIndex; this->rScale = params->scale; this->rTimer = 5; - this->rObjId = objIndex; + this->rObjectSlot = objectSlot; gSegments[6] = segBackup; return 1; @@ -59,16 +59,16 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) { s32 pad; f32 scale; - void* storedSegment; + void* objectPtr; scale = this->rScale / 100.0f; - storedSegment = play->objectCtx.slots[this->rObjId].segment; + objectPtr = play->objectCtx.slots[this->rObjectSlot].segment; OPEN_DISPS(play->state.gfxCtx); - gSegments[6] = VIRTUAL_TO_PHYSICAL(storedSegment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(objectPtr); - gSPSegment(POLY_XLU_DISP++, 0x06, storedSegment); + gSPSegment(POLY_XLU_DISP++, 0x06, objectPtr); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c index 828570685..521b6db54 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c @@ -11,8 +11,8 @@ #define rYaw regs[1] #define rFlags regs[2] #define rScale regs[3] -#define rObjId regs[4] -#define rObjBankIndex regs[5] +#define rObjectId regs[4] +#define rObjectSlot regs[5] #define rMinLife regs[6] #define PARAMS ((EffectSsHahenInitParams*)initParamsx) @@ -27,8 +27,8 @@ EffectSsInit Effect_Ss_Hahen_InitVars = { }; void EffectSsHahen_CheckForObject(EffectSs* this, PlayState* play) { - if (((this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId)) < 0) || - !Object_IsLoaded(&play->objectCtx, this->rObjBankIndex)) { + if (((this->rObjectSlot = Object_GetSlot(&play->objectCtx, this->rObjectId)) <= OBJECT_SLOT_NONE) || + !Object_IsLoaded(&play->objectCtx, this->rObjectSlot)) { this->life = -1; this->draw = NULL; } @@ -44,11 +44,11 @@ u32 EffectSsHahen_Init(PlayState* play, u32 index, EffectSs* this, void* initPar if (initParams->dList != NULL) { this->gfx = initParams->dList; - this->rObjId = initParams->objId; + this->rObjectId = initParams->objectId; EffectSsHahen_CheckForObject(this, play); } else { this->gfx = gEffFragments1DL; - this->rObjId = HAHEN_OBJECT_DEFAULT; + this->rObjectId = HAHEN_OBJECT_DEFAULT; } this->draw = EffectSsHahen_Draw; @@ -68,8 +68,8 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); - if (this->rObjId != HAHEN_OBJECT_DEFAULT) { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); + if (this->rObjectId != HAHEN_OBJECT_DEFAULT) { + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(play->state.gfxCtx); @@ -84,8 +84,8 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) { OPEN_DISPS(gfxCtx); - if (this->rObjId != -1) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); + if (this->rObjectId != -1) { + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Xlu(play->state.gfxCtx); @@ -125,7 +125,7 @@ void EffectSsHahen_Update(PlayState* play, u32 index, EffectSs* this) { this->life = 0; } - if (this->rObjId != HAHEN_OBJECT_DEFAULT) { + if (this->rObjectId != HAHEN_OBJECT_DEFAULT) { EffectSsHahen_CheckForObject(this, play); } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h index d962bf55f..5fc6303d4 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h @@ -15,7 +15,7 @@ typedef struct { /* 0x24 */ Gfx* dList; /* 0x28 */ s16 flags; /* 0x2A */ s16 scale; - /* 0x2C */ s16 objId; + /* 0x2C */ s16 objectId; /* 0x2C */ s16 life; } EffectSsHahenInitParams; // size = 0x30 diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index bde2227d2..7c3bcd0ad 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -17,8 +17,8 @@ #define rScale regs[7] #define rReg8 regs[8] #define rReg9 regs[9] -#define rObjId regs[10] -#define rObjBankIndex regs[11] +#define rObjectId regs[10] +#define rObjectSlot regs[11] #define rColorIndex regs[12] #define PARAMS ((EffectSsKakeraInitParams*)initParamsx) @@ -51,14 +51,14 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa this->priority = 101; if (initParams->dList != NULL) { this->gfx = initParams->dList; - switch (initParams->objId) { + switch (initParams->objectId) { case GAMEPLAY_KEEP: case GAMEPLAY_FIELD_KEEP: case GAMEPLAY_DANGEON_KEEP: - this->rObjId = KAKERA_OBJECT_DEFAULT; + this->rObjectId = KAKERA_OBJECT_DEFAULT; break; default: - this->rObjId = initParams->objId; + this->rObjectId = initParams->objectId; EffectSsKakera_CheckForObject(this, play); break; } @@ -93,11 +93,11 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { s32 colorIndex = this->rColorIndex; OPEN_DISPS(gfxCtx); - if (this->rObjId != KAKERA_OBJECT_DEFAULT) { + if (this->rObjectId != KAKERA_OBJECT_DEFAULT) { if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { - gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment); } else { - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment); } } @@ -127,8 +127,8 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { } void EffectSsKakera_CheckForObject(EffectSs* this, PlayState* play) { - this->rObjBankIndex = Object_GetSlot(&play->objectCtx, this->rObjId); - if ((this->rObjBankIndex < 0) || (!Object_IsLoaded(&play->objectCtx, this->rObjBankIndex))) { + this->rObjectSlot = Object_GetSlot(&play->objectCtx, this->rObjectId); + if ((this->rObjectSlot <= OBJECT_SLOT_NONE) || (!Object_IsLoaded(&play->objectCtx, this->rObjectSlot))) { this->life = 0; this->draw = NULL; } @@ -369,7 +369,7 @@ void EffectSsKakera_Update(PlayState* play, u32 index, EffectSs* this) { this->life = 0; } func_8097E7E0(this, play); - if (this->rObjId != KAKERA_OBJECT_DEFAULT) { + if (this->rObjectId != KAKERA_OBJECT_DEFAULT) { EffectSsKakera_CheckForObject(this, play); } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h index d55a683cd..f2e5a609c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h @@ -30,7 +30,7 @@ typedef struct { /* 0x32 */ s16 unk_32; /* 0x34 */ s32 life; /* 0x38 */ s16 colorIdx; - /* 0x3A */ s16 objId; + /* 0x3A */ s16 objectId; /* 0x3C */ Gfx* dList; } EffectSsKakeraInitParams; // size = 0x40 diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index fcdca875f..f3de09474 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -7,7 +7,7 @@ #include "z_eff_ss_stick.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define rObjBankIndex regs[0] +#define rObjectSlot regs[0] #define rYaw regs[1] #define PARAMS ((EffectSsStickInitParams*)initParamsx) @@ -25,7 +25,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar EffectSsStickInitParams* initParams = PARAMS; Vec3f pos; - this->rObjBankIndex = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); + this->rObjectSlot = Object_GetSlot(&play->objectCtx, GAMEPLAY_KEEP); pos = initParams->pos; this->pos = pos; this->vec = pos; @@ -51,7 +51,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateZYX(0, this->rYaw, 0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjBankIndex].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[this->rObjectSlot].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index a5bcf5354..85b13487c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2688,7 +2688,7 @@ 0x8013D768:("SubS_MoveActorToPoint",), 0x8013D83C:("SubS_GetDistSqAndOrientPath",), 0x8013D8DC:("SubS_IsObjectLoaded",), - 0x8013D924:("SubS_GetObjectIndex",), + 0x8013D924:("SubS_GetObjectSlot",), 0x8013D960:("SubS_FindActor",), 0x8013D9C8:("SubS_UpdateFidgetTables",), 0x8013DB90:("SubS_IsFloorAbove",), @@ -9607,7 +9607,7 @@ 0x80A0CC88:("EnSob1_GetGoodbye",), 0x80A0CCEC:("EnSob1_BombShopkeeper_EndInteraction",), 0x80A0CD48:("EnSob1_SpawnShopItems",), - 0x80A0CE10:("EnSob1_GetObjIndices",), + 0x80A0CE10:("EnSob1_GetObjectIndices",), 0x80A0CED4:("EnSob1_Init",), 0x80A0D008:("EnSob1_Destroy",), 0x80A0D034:("EnSob1_UpdateCursorPos",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 1d3913e65..b427905c9 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1323,7 +1323,7 @@ 0x801C2650:("naviQuestHintFiles","RomFile","[2]",0x10), 0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48), 0x801C26A8:("sSceneCmdHandlers","scene_header_func","[31]",0x7c), - 0x801C2730:("gPlayerFormObjectIndices","s16","[5]",0xA), + 0x801C2730:("gPlayerFormObjectIds","s16","[5]",0xA), 0x801C273C:("gObjectTableSize","ObjectId","",0x4), 0x801C2740:("gObjectTable","RomFile","[643]",0x1418), 0x801C3B60:("sSceneDrawDefaultDL","Gfx","[11]",0x58), @@ -5407,7 +5407,7 @@ 0x80867784:("D_80867784","UNK_TYPE1","",0x1), 0x8086778C:("D_8086778C","UNK_PTR","",0x4), 0x8086780C:("En_Door_InitVars","UNK_TYPE1","",0x1), - 0x8086782C:("sObjInfo","UNK_TYPE2","",0x126), + 0x8086782C:("sObjectInfo","UNK_TYPE2","",0x126), 0x80867954:("sInitChain","UNK_TYPE1","",0x1), 0x80867964:("sAnimations","AnimationHeader","[10]",0x28), 0x8086798C:("sAnimOpenFrames","u8","[10]",0x10), @@ -6619,7 +6619,7 @@ 0x808CD5E8:("D_808CD5E8","f32","",0x4), 0x808CE290:("Demo_Effect_InitVars","UNK_TYPE1","",0x1), 0x808CE2B0:("D_808CE2B0","UNK_TYPE4","",0x4), - 0x808CE2C0:("sEffectTypeObjects","s16","",0x12), + 0x808CE2C0:("sEffectTypeObjectIds","s16","",0x12), 0x808CE2D4:("sAlphaTypes","u8","",0x15), 0x808CE2F0:("jtbl_808CE2F0","UNK_PTR","",0x4), 0x808CE314:("D_808CE314","f32","",0x4), @@ -12701,7 +12701,7 @@ 0x80AC1E04:("D_80AC1E04","f32","",0x4), 0x80AC2580:("En_Door_Etc_InitVars","UNK_TYPE1","",0x1), 0x80AC25A0:("sCylinderInit","UNK_TYPE1","",0x1), - 0x80AC25CC:("sObjInfo","UNK_TYPE2","",0x2), + 0x80AC25CC:("sObjectInfo","UNK_TYPE2","",0x2), 0x80AC2634:("sInitChain","UNK_TYPE1","",0x1), 0x80AC2650:("D_80AC2650","f32","",0x4), 0x80AC4510:("En_Bigokuta_InitVars","UNK_TYPE1","",0x1), diff --git a/tools/namefixer.py b/tools/namefixer.py index 12ff471aa..ea6d5e19e 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -781,7 +781,8 @@ wordReplace = { "func_8013AED4": "SubS_SetOfferMode", "SubS_UpdateFlags": "SubS_SetOfferMode", "func_8013D8DC": "SubS_IsObjectLoaded", - "func_8013D924": "SubS_GetObjectIndex", + "func_8013D924": "SubS_GetObjectSlot", + "SubS_GetObjectIndex": "SubS_GetObjectSlot", "func_8013D5E8": "SubS_AngleDiffLessEqual", "func_8013DCE0": "SubS_ActorPathing_Init", "func_8013DE04": "SubS_ActorPathing_Update", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 323a6af9e..240f6a0b1 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2202,7 +2202,7 @@ asm/non_matchings/code/z_sub_s/SubS_GetDistSqAndOrientPoints.s,SubS_GetDistSqAnd asm/non_matchings/code/z_sub_s/SubS_MoveActorToPoint.s,SubS_MoveActorToPoint,0x8013D768,0x35 asm/non_matchings/code/z_sub_s/SubS_GetDistSqAndOrientPath.s,SubS_GetDistSqAndOrientPath,0x8013D83C,0x28 asm/non_matchings/code/z_sub_s/SubS_IsObjectLoaded.s,SubS_IsObjectLoaded,0x8013D8DC,0x12 -asm/non_matchings/code/z_sub_s/SubS_GetObjectIndex.s,SubS_GetObjectIndex,0x8013D924,0xF +asm/non_matchings/code/z_sub_s/SubS_GetObjectSlot.s,SubS_GetObjectSlot,0x8013D924,0xF asm/non_matchings/code/z_sub_s/SubS_FindActor.s,SubS_FindActor,0x8013D960,0x1A asm/non_matchings/code/z_sub_s/SubS_UpdateFidgetTables.s,SubS_UpdateFidgetTables,0x8013D9C8,0x72 asm/non_matchings/code/z_sub_s/SubS_IsFloorAbove.s,SubS_IsFloorAbove,0x8013DB90,0x2C From 6ea91335c5937c5bd975a941cb2a999e732d19b2 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Fri, 6 Oct 2023 02:45:26 +0200 Subject: [PATCH 51/74] object_zl1 (#1381) * object_zl1 * formating * improvements * offset * order * offset * blobs * offset --- assets/xml/objects/object_zl1.xml | 197 +++++++++++++++++------------- 1 file changed, 112 insertions(+), 85 deletions(-) diff --git a/assets/xml/objects/object_zl1.xml b/assets/xml/objects/object_zl1.xml index 2b8a101bc..ed7fbf987 100644 --- a/assets/xml/objects/object_zl1.xml +++ b/assets/xml/objects/object_zl1.xml @@ -1,90 +1,117 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 16bc54b63b985ef47a6da2f3aac148bde44108c9 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:40:56 +0200 Subject: [PATCH 52/74] object_lightblock (#1414) * naming * Original naming * sun block --- assets/xml/objects/object_lightblock.xml | 11 ++++++----- .../actors/ovl_Obj_Lightblock/z_obj_lightblock.c | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/assets/xml/objects/object_lightblock.xml b/assets/xml/objects/object_lightblock.xml index d58ec0004..07c5da688 100644 --- a/assets/xml/objects/object_lightblock.xml +++ b/assets/xml/objects/object_lightblock.xml @@ -1,9 +1,10 @@  + - - - - - + + + + + diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index 90feb9634..28ead0679 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -98,7 +98,7 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) { return; } - DynaPolyActor_LoadMesh(play, &this->dyna, &object_lightblock_Colheader_000B80); + DynaPolyActor_LoadMesh(play, &this->dyna, &gSunBlockCol); Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); this->collider.dim.radius = typeVars->radius; @@ -200,13 +200,13 @@ void ObjLightblock_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->alpha); - gSPDisplayList(POLY_XLU_DISP++, object_lightblock_DL_000178); + gSPDisplayList(POLY_XLU_DISP++, gSunBlockDL); } else { Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); - gSPDisplayList(POLY_OPA_DISP++, object_lightblock_DL_000178); + gSPDisplayList(POLY_OPA_DISP++, gSunBlockDL); } CLOSE_DISPS(play->state.gfxCtx); From a980067bd8b0bb96e9b05537ff2aedb1a9771eb4 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sat, 7 Oct 2023 03:40:59 +0200 Subject: [PATCH 53/74] ovl_En_Takaraya decompiled (#1409) * EnTakaraya_Destroy * some matching * some matching * some matching * matched func_80ADF7CC * func_80ADEF74 wrong arg * data * clean up * improvements * actionFunc pointer * fake * improvements * improvements * naming for the bool * function naming * improvements * improvements * GET_PLAYER_FORM macro * macro --- assets/xml/objects/object_bg.xml | 121 +++--- spec | 3 +- .../actors/ovl_En_Takaraya/z_en_takaraya.c | 410 ++++++++++++++++-- .../actors/ovl_En_Takaraya/z_en_takaraya.h | 15 +- 4 files changed, 465 insertions(+), 84 deletions(-) diff --git a/assets/xml/objects/object_bg.xml b/assets/xml/objects/object_bg.xml index 272968b8d..9008fb381 100644 --- a/assets/xml/objects/object_bg.xml +++ b/assets/xml/objects/object_bg.xml @@ -1,62 +1,79 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -73,6 +90,8 @@ + + @@ -84,6 +103,8 @@ + + @@ -107,6 +128,8 @@ + + diff --git a/spec b/spec index 339a701c8..e4508b5bd 100644 --- a/spec +++ b/spec @@ -3334,8 +3334,7 @@ beginseg name "ovl_En_Takaraya" compress include "build/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.o" - include "build/data/ovl_En_Takaraya/ovl_En_Takaraya.data.o" - include "build/data/ovl_En_Takaraya/ovl_En_Takaraya.reloc.o" + include "build/src/overlays/actors/ovl_En_Takaraya/ovl_En_Takaraya_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c index a2c39f16b..692651860 100644 --- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c +++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c @@ -15,7 +15,25 @@ void EnTakaraya_Destroy(Actor* thisx, PlayState* play); void EnTakaraya_Update(Actor* thisx, PlayState* play); void EnTakaraya_Draw(Actor* thisx, PlayState* play); -#if 0 +void EnTakaraya_Blink(EnTakaraya* this); +void EnTakaraya_SetupWait(EnTakaraya* this); +void EnTakaraya_Wait(EnTakaraya* this, PlayState* play); +void EnTakaraya_SpawnWalls(EnTakaraya* this, PlayState* play); +void EnTakaraya_SetupTalk(EnTakaraya* this); +void EnTakaraya_Talk(EnTakaraya* this, PlayState* play); +void func_80ADF2D4(EnTakaraya* this); +void func_80ADF338(EnTakaraya* this, PlayState* play); +void func_80ADF4E0(EnTakaraya* this); +void func_80ADF520(EnTakaraya* this, PlayState* play); +void func_80ADF608(EnTakaraya* this, PlayState* play); +void func_80ADF654(EnTakaraya* this, PlayState* play); +void func_80ADF6DC(EnTakaraya* this); +void func_80ADF730(EnTakaraya* this, PlayState* play); +void func_80ADF7B8(EnTakaraya* this); +void func_80ADF7CC(EnTakaraya* this, PlayState* play); +s32 EnTakaraya_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); +void EnTakaraya_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx); + ActorInit En_Takaraya_InitVars = { ACTOR_EN_TAKARAYA, ACTORCAT_NPC, @@ -28,61 +46,391 @@ ActorInit En_Takaraya_InitVars = { (ActorFunc)EnTakaraya_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80ADFB20[] = { +TexturePtr sEyesUpTextures[] = { + gTreasureChestShopGalEyeOpenUpTex, + gTreasureChestShopGalEyeHalfUpTex, + gTreasureChestShopGalEyeClosedTex, + gTreasureChestShopGalEyeHalfUpTex, +}; + +TexturePtr sEyesDownTextures[] = { + gTreasureChestShopGalEyeOpenDownTex, + gTreasureChestShopGalEyeHalfDownTex, + gTreasureChestShopGalEyeClosedTex, + gTreasureChestShopGalEyeHalfDownTex, +}; + +static InitChainEntry sInitChain[] = { ICHAIN_U8(targetMode, TARGET_MODE_6, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 1000, ICHAIN_STOP), }; -#endif +u32 sTexturesDesegmented = false; -extern InitChainEntry D_80ADFB20[]; +u16 D_80ADFB2C[PLAYER_FORM_MAX] = { + 0x76D, // PLAYER_FORM_FIERCE_DEITY + 0x76E, // PLAYER_FORM_GORON + 0x76F, // PLAYER_FORM_ZORA + 0x76C, // PLAYER_FORM_DEKU + 0x76D, // PLAYER_FORM_HUMAN +}; -extern UNK_TYPE D_06001384; -extern UNK_TYPE D_06009890; -extern UNK_TYPE D_0600A280; -extern UNK_TYPE D_0600AD98; +u8 D_80ADFB38[PLAYER_FORM_MAX][2] = { + { 5, 5 }, // PLAYER_FORM_FIERCE_DEITY + { 12, 5 }, // PLAYER_FORM_GORON + { 4, 4 }, // PLAYER_FORM_ZORA + { 42, 41 }, // PLAYER_FORM_DEKU + { 5, 5 }, // PLAYER_FORM_HUMAN +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Init.s") +u16 D_80ADFB44[PLAYER_FORM_MAX] = { + 0x775, // PLAYER_FORM_FIERCE_DEITY + 0x776, // PLAYER_FORM_GORON + 0x777, // PLAYER_FORM_ZORA + 0x774, // PLAYER_FORM_DEKU + 0x775, // PLAYER_FORM_HUMAN +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Destroy.s") +u16 D_80ADFB50[PLAYER_FORM_MAX] = { + 0x771, // PLAYER_FORM_FIERCE_DEITY + 0x772, // PLAYER_FORM_GORON + 0x773, // PLAYER_FORM_ZORA + 0x770, // PLAYER_FORM_DEKU + 0x771, // PLAYER_FORM_HUMAN +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADED8C.s") +void EnTakaraya_Init(Actor* thisx, PlayState* play) { + EnTakaraya* this = THIS; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEDF8.s") + Actor_ProcessInitChain(&this->actor, sInitChain); + ActorShape_Init(&this->actor.shape, -60.0f, NULL, 0.0f); + SkelAnime_InitFlex(play, &this->skelAnime, &gTreasureChestShopGalSkel, &object_bg_Anim_009890, this->jointTable, + this->morphTable, TREASURE_CHEST_SHOP_GAL_LIMB_MAX); + this->switchFlag = EN_TAKARAYA_GET_SWITCH_FLAG(thisx); + thisx->params &= 0xFF; + if (!sTexturesDesegmented) { + for (i = 0; i < ARRAY_COUNT(sEyesDownTextures); i++) { + sEyesUpTextures[i] = Lib_SegmentedToVirtual(sEyesUpTextures[i]); + sEyesDownTextures[i] = Lib_SegmentedToVirtual(sEyesDownTextures[i]); + } + sTexturesDesegmented = true; + } + this->eyeTexIndex = 2; + if (gSaveContext.save.entrance == ENTRANCE(TREASURE_CHEST_SHOP, 1)) { + Audio_StopSubBgm(); + if (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_6) { + this->actor.textId = 0x77A; + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; + func_80ADF6DC(this); + } else { + this->actor.textId = 0x77C; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); + EnTakaraya_SetupWait(this); + } else { + func_80ADF6DC(this); + } + } + } else { + EnTakaraya_SetupWait(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEE4C.s") +void EnTakaraya_Destroy(Actor* thisx, PlayState* play) { + EnTakaraya* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADEF74.s") + Flags_UnsetSwitch(play, 5); + if (!this->unk2AD) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF03C.s") +void EnTakaraya_Blink(EnTakaraya* this) { + if (this->eyeTexIndex != 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex == 4) { + this->eyeTexIndex = 0; + } + } else if (Rand_ZeroOne() < 0.02f) { + this->eyeTexIndex++; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF050.s") +void EnTakaraya_SetupWait(EnTakaraya* this) { + if (this->skelAnime.animation == &object_bg_Anim_001384) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f); + } + this->actionFunc = EnTakaraya_Wait; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF2D4.s") +void EnTakaraya_Wait(EnTakaraya* this, PlayState* play) { + if (SkelAnime_Update(&this->skelAnime)) { + if (this->skelAnime.animation == &object_bg_Anim_00A280) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f); + } else { + Animation_MorphToLoop(&this->skelAnime, &object_bg_Anim_009890, -4.0f); + } + } + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { + if (Text_GetFaceReaction(play, FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL) == 0) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00A280, -4.0f); + } + EnTakaraya_SetupTalk(this); + } else if (Actor_IsFacingPlayer(&this->actor, 0x2000)) { + this->actor.textId = Text_GetFaceReaction(play, FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL); + if (this->actor.textId == 0) { + this->actor.textId = D_80ADFB2C[GET_PLAYER_FORM]; + } + this->formSwitchFlag = GET_PLAYER_FORM + this->switchFlag; + Actor_OfferTalk(&this->actor, play, 120.0f); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF338.s") +void EnTakaraya_SpawnWalls(EnTakaraya* this, PlayState* play) { + u8 var_v1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF4E0.s") + if (Flags_GetSwitch(play, this->formSwitchFlag)) { + var_v1 = D_80ADFB38[GET_PLAYER_FORM][1]; + } else { + var_v1 = D_80ADFB38[GET_PLAYER_FORM][0]; + } + Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_TAKARAYA_WALL, 0.0f, 0.0f, 0.0f, 0, 0, 5, + ((var_v1 << 5) + this->actor.params) + 0xB000, this->actor.csId, HALFDAYBIT_ALL, + NULL); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF520.s") +void EnTakaraya_SetupTalk(EnTakaraya* this) { + this->actionFunc = EnTakaraya_Talk; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF608.s") +void EnTakaraya_Talk(EnTakaraya* this, PlayState* play) { + u8 talkState; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF654.s") + if (SkelAnime_Update(&this->skelAnime)) { + if (this->skelAnime.animation == &object_bg_Anim_00AD98) { + Animation_PlayOnce(&this->skelAnime, &object_bg_Anim_000968); + } else if (this->skelAnime.animation == &object_bg_Anim_00A280) { + Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_001384); + } else { + Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_009890); + } + } + talkState = Message_GetState(&play->msgCtx); + if ((talkState == TEXT_STATE_CLOSING) || (talkState == TEXT_STATE_DONE)) { + if (this->actor.textId == 0x778) { + func_80ADF2D4(this); + } else { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); + EnTakaraya_SetupWait(this); + } + } else if ((talkState == TEXT_STATE_1) && (this->actor.textId != 0x778)) { + if (Message_ShouldAdvance(play)) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f); + } + } else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { + if (play->msgCtx.choiceIndex == 0) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { + this->actor.textId = 0x77B; + if (this->skelAnime.animation == &object_bg_Anim_009890) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 5.0f); + } + Audio_PlaySfx(NA_SE_SY_ERROR); + } else { + Audio_PlaySfx_MessageDecide(); + Rupees_ChangeBy(-play->msgCtx.unk1206C); + EnTakaraya_SpawnWalls(this, play); + this->actor.textId = 0x778; + if (this->skelAnime.animation != &object_bg_Anim_009890) { + Animation_MorphToLoop(&this->skelAnime, &object_bg_Anim_009890, 5.0f); + } + } + } else { + Audio_PlaySfx_MessageCancel(); + this->actor.textId = D_80ADFB44[GET_PLAYER_FORM]; + if (this->skelAnime.animation == &object_bg_Anim_009890) { + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_000968, 5.0f); + } + } + Message_ContinueTextbox(play, this->actor.textId); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF6DC.s") +void func_80ADF2D4(EnTakaraya* this) { + Actor_PlaySfx_FlaggedCentered2(&this->actor, NA_SE_SY_FOUND); + Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME); + this->timer = 145; + SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); + this->actionFunc = func_80ADF338; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF730.s") +void func_80ADF338(EnTakaraya* this, PlayState* play) { + Actor* chest = play->actorCtx.actorLists[ACTORCAT_CHEST].first; + Player* player = GET_PLAYER(play); + Vec3f subCamEye; + Vec3f subCamAt; + f32 sp2C; + s16 subCamId; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF7B8.s") + SkelAnime_Update(&this->skelAnime); + if ((CutsceneManager_GetCurrentCsId() == this->actor.csId) && (chest != NULL)) { + this->timer--; + subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); + if (this->timer >= 26) { + sp2C = 250.0f; + } else { + sp2C = ((chest->xzDistToPlayer - 250.0f) * (25 - this->timer) * 0.04f) + 250.0f; + } + subCamEye.x = (Math_SinS(chest->yawTowardsPlayer) * sp2C) + chest->world.pos.x; + subCamEye.y = player->actor.world.pos.y + 120.0f; + subCamEye.z = (Math_CosS(chest->yawTowardsPlayer) * sp2C) + chest->world.pos.z; + subCamAt.x = subCamEye.x - (Math_SinS(chest->yawTowardsPlayer) * 250.0f); + subCamAt.y = subCamEye.y - 90.0f; + subCamAt.z = subCamEye.z - (Math_CosS(chest->yawTowardsPlayer) * 250.0f); + Play_SetCameraAtEye(play, subCamId, &subCamAt, &subCamEye); + } else if (this->timer < 145) { + func_80ADF4E0(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF7CC.s") +void func_80ADF4E0(EnTakaraya* this) { + Interface_StartTimer(TIMER_ID_MINIGAME_2, 45); + this->timer = 1; + this->actionFunc = func_80ADF520; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Update.s") +void func_80ADF520(EnTakaraya* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + if (!Play_InCsMode(play)) { + if (Flags_GetTreasure(play, this->actor.params)) { + Flags_SetSwitch(play, this->formSwitchFlag); + play->actorCtx.sceneFlags.chest &= ~TAKARAYA_GET_TREASURE_FLAG(&this->actor); + this->timer = 0; + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; + func_80ADF608(this, play); + } else if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF) { + this->timer = 50; + Message_StartTextbox(play, 0x77D, &this->actor); + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; + func_80ADF608(this, play); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF94C.s") +void func_80ADF608(EnTakaraya* this, PlayState* play) { + func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); + this->unk2AD = true; + this->actionFunc = func_80ADF654; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/func_80ADF984.s") +void func_80ADF654(EnTakaraya* this, PlayState* play) { + if (this->timer > 0) { + this->timer--; + } else { + if (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_6) { + play->transitionType = TRANS_TYPE_80; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + } else { + play->transitionType = TRANS_TYPE_64; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; + } + gSaveContext.nextCutsceneIndex = 0; + play->nextEntrance = ENTRANCE(TREASURE_CHEST_SHOP, 1); + play->transitionTrigger = TRANS_TRIGGER_START; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Takaraya/EnTakaraya_Draw.s") +void func_80ADF6DC(EnTakaraya* this) { + Animation_PlayLoop(&this->skelAnime, &object_bg_Anim_001384); + this->eyeTexIndex = 0; + this->actor.flags |= ACTOR_FLAG_10000; + this->actionFunc = func_80ADF730; +} + +void func_80ADF730(EnTakaraya* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { + this->actor.flags &= ~ACTOR_FLAG_10000; + func_80ADF7B8(this); + } else { + this->formSwitchFlag = GET_PLAYER_FORM + this->switchFlag; + Actor_OfferTalk(&this->actor, play, 120.0f); + } +} + +void func_80ADF7B8(EnTakaraya* this) { + this->actionFunc = func_80ADF7CC; +} + +void func_80ADF7CC(EnTakaraya* this, PlayState* play) { + SkelAnime_Update(&this->skelAnime); + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + if (this->actor.textId == 0x77A) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { + Message_CloseTextbox(play); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED); + EnTakaraya_SetupWait(this); + } else { + this->actor.textId = 0x77C; + Message_ContinueTextbox(play, this->actor.textId); + } + } else { + this->actor.textId = D_80ADFB50[GET_PLAYER_FORM]; + Message_ContinueTextbox(play, this->actor.textId); + Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 5.0f); + EnTakaraya_SetupTalk(this); + } + } +} + +void EnTakaraya_Update(Actor* thisx, PlayState* play) { + EnTakaraya* this = THIS; + s32 pad; + Vec3s torsoRot; + + this->actionFunc(this, play); + Actor_TrackPlayer(play, &this->actor, &this->headRot, &torsoRot, this->actor.focus.pos); + EnTakaraya_Blink(this); +} + +s32 EnTakaraya_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnTakaraya* this = THIS; + + if (limbIndex == TREASURE_CHEST_SHOP_GAL_LIMB_HEAD) { + rot->x += this->headRot.y; + } + return false; +} + +void EnTakaraya_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { + EnTakaraya* this = THIS; + + if (limbIndex == TREASURE_CHEST_SHOP_GAL_LIMB_HEAD) { + Matrix_RotateYS(0x400 - this->headRot.x, MTXMODE_APPLY); + Matrix_MultVecX(500.0f, &thisx->focus.pos); + } +} + +void EnTakaraya_Draw(Actor* thisx, PlayState* play) { + EnTakaraya* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + if ((GET_PLAYER_FORM == PLAYER_FORM_DEKU) || (GET_PLAYER_FORM == PLAYER_FORM_HUMAN)) { + gSPSegment(POLY_OPA_DISP++, 0x08, sEyesDownTextures[this->eyeTexIndex]); + } else { + gSPSegment(POLY_OPA_DISP++, 0x08, sEyesUpTextures[this->eyeTexIndex]); + } + SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, + this->skelAnime.dListCount, EnTakaraya_OverrideLimbDraw, NULL, + EnTakaraya_TransformLimbDraw, &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h index cfa37125e..3124097de 100644 --- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h +++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h @@ -2,16 +2,27 @@ #define Z_EN_TAKARAYA_H #include "global.h" +#include "objects/object_bg/object_bg.h" struct EnTakaraya; typedef void (*EnTakarayaActionFunc)(struct EnTakaraya*, PlayState*); +#define EN_TAKARAYA_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 0x8) & 0xFF) +#define TAKARAYA_GET_TREASURE_FLAG(thisx) (1 << (thisx)->params) + typedef struct EnTakaraya { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x164]; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ Vec3s jointTable[TREASURE_CHEST_SHOP_GAL_LIMB_MAX]; + /* 0x218 */ Vec3s morphTable[TREASURE_CHEST_SHOP_GAL_LIMB_MAX]; /* 0x2A8 */ EnTakarayaActionFunc actionFunc; - /* 0x2AC */ char unk_2AC[0x10]; + /* 0x2AC */ u8 eyeTexIndex; + /* 0x2AD */ u8 unk2AD; + /* 0x2AE */ s16 timer; + /* 0x2B0 */ s16 formSwitchFlag; + /* 0x2B2 */ s16 switchFlag; + /* 0x2B4 */ Vec3s headRot; } EnTakaraya; // size = 0x2BC #endif // Z_EN_TAKARAYA_H From 43df8f44547354006cff735d9ba2c0b0f0defc83 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sat, 7 Oct 2023 06:47:03 +0200 Subject: [PATCH 54/74] object_comb (#1420) * naming * OutName --- assets/xml/objects/object_comb.xml | 12 ++++++++---- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/assets/xml/objects/object_comb.xml b/assets/xml/objects/object_comb.xml index d2b00b0dd..2bea4db20 100644 --- a/assets/xml/objects/object_comb.xml +++ b/assets/xml/objects/object_comb.xml @@ -1,8 +1,12 @@  + - - - - + + + + + + + diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c index be3d243e0..4227178e2 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -127,7 +127,7 @@ void func_8098CEAC(ObjComb* this, PlayState* play) { phi_v0 = 0x20; } EffectSsKakera_Spawn(play, &spD0, &spC4, &spD0, phi_s0, phi_v0, phi_s1, 4, 0, temp_f10, 0, 0, 60, -1, - OBJECT_COMB, object_comb_DL_001040); + OBJECT_COMB, gBeehiveFragmentDL); } spD0.x = this->actor.world.pos.x; @@ -185,7 +185,7 @@ void func_8098D19C(ObjComb* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spD0, &spC4, &spD0, phi_s0, phi_v0, phi_s1, 4, 0, temp_f8, 0, 0, 60, -1, - OBJECT_COMB, object_comb_DL_001040); + OBJECT_COMB, gBeehiveFragmentDL); } spD0.x = this->actor.world.pos.x; @@ -236,7 +236,7 @@ void func_8098D47C(ObjComb* this, PlayState* play) { } EffectSsKakera_Spawn(play, &spC8, &spBC, &spC8, phi_s0, phi_v0, 40, 0, 0, temp_f10, 0, 0, 80, -1, OBJECT_COMB, - object_comb_DL_001040); + gBeehiveFragmentDL); } } @@ -566,7 +566,7 @@ void ObjComb_Draw(Actor* thisx, PlayState* play) { Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_comb_DL_000CB0); + gSPDisplayList(POLY_OPA_DISP++, gBeehiveDL); Collider_UpdateSpheres(0, &this->collider); From da0c9072f5332edbde00d405b2f1c94e92ece434 Mon Sep 17 00:00:00 2001 From: Zach North Date: Sat, 7 Oct 2023 01:11:10 -0400 Subject: [PATCH 55/74] Document object_skb (#1404) * object_skb: Limb and Anim docs * object_skb: DL and text docs * Formatting changed files * Changed names for some bones to reflect oot names * updating some names to address code review comments * Whoops, forgot to change the name of MAX * Rename EnHinkSkbAnimation in src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Changed STALCHILD_ANIM_x to STALCHILD_HINT_ANIM_x * forgot to rename both parts of a typedef enum * gStalchildSwingOnBranch missing Anim tag Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Fixed all instances of gStalchildSwingOnBranchAnim --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_skb.xml | 113 +++++++-------- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 133 +++++++++--------- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.h | 4 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 30 ++-- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 46 +++--- 5 files changed, 164 insertions(+), 162 deletions(-) diff --git a/assets/xml/objects/object_skb.xml b/assets/xml/objects/object_skb.xml index 78413a9de..b1afaf353 100644 --- a/assets/xml/objects/object_skb.xml +++ b/assets/xml/objects/object_skb.xml @@ -1,64 +1,65 @@  + - - - - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index b0ea746d9..86cb7235d 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -125,37 +125,37 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0xF), }; -typedef enum EnHinkSkbAnimation { - /* 0 */ ENHINTSKB_ANIM_0, - /* 1 */ ENHINTSKB_ANIM_1, - /* 2 */ ENHINTSKB_ANIM_2, - /* 3 */ ENHINTSKB_ANIM_3, - /* 4 */ ENHINTSKB_ANIM_4, - /* 5 */ ENHINTSKB_ANIM_5, - /* 6 */ ENHINTSKB_ANIM_6, - /* 7 */ ENHINTSKB_ANIM_7, - /* 8 */ ENHINTSKB_ANIM_8, - /* 9 */ ENHINTSKB_ANIM_9, - /* 10 */ ENHINTSKB_ANIM_10, - /* 11 */ ENHINTSKB_ANIM_11, - /* 12 */ ENHINTSKB_ANIM_12, - /* 13 */ ENHINTSKB_ANIM_MAX -} EnHinkSkbAnimation; +typedef enum StalchildHintAnimation { + /* 0 */ STALCHILD_HINT_ANIM_WALK, + /* 1 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_1, + /* 2 */ STALCHILD_HINT_ANIM_ATTACK, + /* 3 */ STALCHILD_HINT_ANIM_STAGGER_MORPH_4, + /* 4 */ STALCHILD_HINT_ANIM_COLLAPSE, + /* 5 */ STALCHILD_HINT_ANIM_SIT_LAUGH, + /* 6 */ STALCHILD_HINT_ANIM_SIT_TAP_TOES, + /* 7 */ STALCHILD_HINT_ANIM_SWING_ON_BRANCH, + /* 8 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_8, + /* 9 */ STALCHILD_HINT_ANIM_STAND_UP_MORPH_16, + /* 10 */ STALCHILD_HINT_ANIM_STAGGER_MORPH_8, + /* 11 */ STALCHILD_HINT_ANIM_SALUTE, + /* 12 */ STALCHILD_HINT_ANIM_IDLE, + /* 13 */ STALCHILD_HINT_ANIM_MAX +} StalchildHintAnimation; -static AnimationInfo sAnimationInfo[ENHINTSKB_ANIM_MAX] = { - { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_0 - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // ENHINTSKB_ANIM_1 - { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, // ENHINTSKB_ANIM_2 - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_3 - { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // ENHINTSKB_ANIM_4 - { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_5 - { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_6 - { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // ENHINTSKB_ANIM_7 - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_8 - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, // ENHINTSKB_ANIM_9 - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_10 - { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENHINTSKB_ANIM_11 - { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENHINTSKB_ANIM_12 +static AnimationInfo sAnimationInfo[STALCHILD_HINT_ANIM_MAX] = { + { &gStalchildWalkAnim, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_WALK + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_1 + { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, // STALCHILD_HINT_ANIM_ATTACK + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // STALCHILD_HINT_ANIM_STAGGER_MORPH_4 + { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // STALCHILD_HINT_ANIM_COLLAPSE + { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SIT_LAUGH + { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SIT_TAP_TOES + { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, // STALCHILD_HINT_ANIM_SWING_ON_BRANCH + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_8 + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, // STALCHILD_HINT_ANIM_STAND_UP_MORPH_16 + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_STAGGER_MORPH_8 + { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // STALCHILD_HINT_ANIM_SALUTE + { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // STALCHILD_HINT_ANIM_IDLE }; static InitChainEntry sInitChain[] = { @@ -168,8 +168,8 @@ void EnHintSkb_Init(Actor* thisx, PlayState* play) { EnHintSkb* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable, - this->morphTable, OBJECT_SKB_LIMB_MAX); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitLaughAnim, this->jointTable, this->morphTable, + STALCHILD_LIMB_MAX); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElement); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); @@ -197,7 +197,7 @@ void func_80C1FE20(EnHintSkb* this, PlayState* play) { } void func_80C1FE30(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_WALK); this->actor.speed = 1.6f; this->actionFunc = func_80C1FE80; } @@ -216,7 +216,7 @@ void func_80C1FE80(EnHintSkb* this, PlayState* play) { void func_80C1FF30(EnHintSkb* this) { this->collider.base.atFlags &= ~AT_BOUNCED; this->actor.speed = 0.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_2); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_ATTACK); this->actionFunc = func_80C1FF88; } @@ -240,7 +240,7 @@ void func_80C1FF88(EnHintSkb* this, PlayState* play) { } void func_80C2003C(EnHintSkb* this) { - Animation_Change(&this->skelAnime, &object_skb_Anim_002190, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f, + Animation_Change(&this->skelAnime, &gStalchildAttackAnim, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f, ANIMMODE_ONCE_INTERP, 0.0f); this->collider.base.atFlags &= ~AT_BOUNCED; this->actionFunc = func_80C200B8; @@ -277,7 +277,7 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) { if (this->actor.colChkInfo.health == 0) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD); func_80C20484(this); - } else if (this->skelAnime.animation == &object_skb_Anim_00697C) { + } else if (this->skelAnime.animation == &gStalchildSitLaughAnim) { func_80C1FE0C(this); } else if (func_80C21414(this)) { func_80C1FF30(this); @@ -288,14 +288,14 @@ void func_80C2016C(EnHintSkb* this, PlayState* play) { } void func_80C20274(EnHintSkb* this) { - if (this->skelAnime.animation == &object_skb_Anim_00697C) { + if (this->skelAnime.animation == &gStalchildSitLaughAnim) { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAND_UP_MORPH_8); this->actor.gravity = -1.0f; this->actor.speed = 1.0f; } else { this->actor.world.rot.y = this->actor.yawTowardsPlayer; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -4.0f; } @@ -333,7 +333,7 @@ void func_80C20334(EnHintSkb* this, PlayState* play) { } void func_80C20484(EnHintSkb* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_4); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_COLLAPSE); this->unk_3E8 |= 4; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->actor.speed = -6.0f; @@ -365,7 +365,7 @@ void func_80C20590(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -392,7 +392,7 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) { this->drawDmgEffAlpha = 0.0f; if (this->actor.colChkInfo.health != 0) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); this->unk_3E8 |= 1; func_80C20274(this); @@ -416,15 +416,15 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) { this->unk_3DC = 1; Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; - if (this->skelAnime.animation == &object_skb_Anim_00697C) { + if (this->skelAnime.animation == &gStalchildSitLaughAnim) { play->msgCtx.msgMode = MSGMODE_PAUSED; this->actor.speed = 2.4f; this->actor.gravity = -1.0f; this->actor.velocity.y = 3.0f; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_8); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAND_UP_MORPH_8); } } else { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_SALUTE); Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; } @@ -480,11 +480,11 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) { } } - if ((this->skelAnime.animation == &object_skb_Anim_003584) && + if ((this->skelAnime.animation == &gStalchildStandUpAnim) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { Message_StartTextbox(play, 0x1147, &this->actor); this->unk_3E6 = 0x1147; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_WALK); } } @@ -559,7 +559,7 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) { case 0x1147: Message_StartTextbox(play, 0x1148, &this->actor); this->unk_3E6 = 0x1148; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_11); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_SALUTE); break; case 0x1148: @@ -611,7 +611,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { this->actor.hintId = TATL_HINT_ID_NONE; this->actor.textId = 0; if (this->actionFunc == func_80C1FE80) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_12); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_IDLE); } func_80C2075C(this); } @@ -620,7 +620,7 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) { this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); this->actor.hintId = TATL_HINT_ID_STALCHILD; this->actor.textId = 0; - if (this->skelAnime.animation == &object_skb_Anim_00697C) { + if (this->skelAnime.animation == &gStalchildSitLaughAnim) { func_80C1FE0C(this); } else { func_80C1FE30(this); @@ -724,7 +724,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { this->drawDmgEffScale = 0.5f; Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4); func_80C2066C(this); break; @@ -743,7 +743,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) { case 13: Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE); - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENHINTSKB_ANIM_3); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, STALCHILD_HINT_ANIM_STAGGER_MORPH_4); func_80C20274(this); break; @@ -873,7 +873,7 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 EnHintSkb* this = THIS; f32 temp_f10; - if (limbIndex == OBJECT_SKB_LIMB_0B) { + if (limbIndex == STALCHILD_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); temp_f10 = fabsf(Math_SinS(play->state.frames * 6000) * 95.0f) + 160.0f; @@ -882,13 +882,13 @@ s32 EnHintSkb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 gDPSetEnvColor(POLY_OPA_DISP++, (s16)temp_f10, (s16)temp_f10, (s16)temp_f10, 255); CLOSE_DISPS(play->state.gfxCtx); - } else if (limbIndex == OBJECT_SKB_LIMB_0A) { + } else if (limbIndex == STALCHILD_LIMB_RIBCAGE) { Matrix_MultZero(&this->actor.focus.pos); - } else if ((limbIndex == OBJECT_SKB_LIMB_0C) && (this->unk_3DE == 1)) { + } else if ((limbIndex == STALCHILD_LIMB_LOWER_JAW) && (this->unk_3DE == 1)) { Matrix_RotateZS(0x71C, MTXMODE_APPLY); } - if (((limbIndex == OBJECT_SKB_LIMB_0B) || (limbIndex == OBJECT_SKB_LIMB_0C)) && (this->unk_3E8 & 2)) { + if (((limbIndex == STALCHILD_LIMB_HEAD) || (limbIndex == STALCHILD_LIMB_LOWER_JAW)) && (this->unk_3E8 & 2)) { *dList = NULL; } @@ -902,25 +902,26 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if (!(this->unk_3E8 & 8)) { Collider_UpdateSpheres(limbIndex, &this->collider); - if ((limbIndex == OBJECT_SKB_LIMB_0B) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { + if ((limbIndex == STALCHILD_LIMB_HEAD) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); this->unk_3E8 |= 2; } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && - ((limbIndex != OBJECT_SKB_LIMB_0B) || !(this->unk_3E8 & 1)) && (limbIndex != OBJECT_SKB_LIMB_0C)) { + ((limbIndex != STALCHILD_LIMB_HEAD) || !(this->unk_3E8 & 1)) && + (limbIndex != STALCHILD_LIMB_LOWER_JAW)) { Actor_SpawnBodyParts(&this->actor, play, 1, dList); } if (this->drawDmgEffTimer != 0) { - if ((limbIndex == OBJECT_SKB_LIMB_02) || (limbIndex == OBJECT_SKB_LIMB_04) || - (limbIndex == OBJECT_SKB_LIMB_05) || (limbIndex == OBJECT_SKB_LIMB_06) || - (limbIndex == OBJECT_SKB_LIMB_07) || (limbIndex == OBJECT_SKB_LIMB_08) || - (limbIndex == OBJECT_SKB_LIMB_09) || (limbIndex == OBJECT_SKB_LIMB_0D) || - (limbIndex == OBJECT_SKB_LIMB_0E) || (limbIndex == OBJECT_SKB_LIMB_0F) || - (limbIndex == OBJECT_SKB_LIMB_10) || (limbIndex == OBJECT_SKB_LIMB_11) || - (limbIndex == OBJECT_SKB_LIMB_12)) { + if ((limbIndex == STALCHILD_LIMB_PELVIS) || (limbIndex == STALCHILD_LIMB_RIGHT_THIGH) || + (limbIndex == STALCHILD_LIMB_RIGHT_SHIN) || (limbIndex == STALCHILD_LIMB_RIGHT_FOOT) || + (limbIndex == STALCHILD_LIMB_LEFT_THIGH) || (limbIndex == STALCHILD_LIMB_LEFT_SHIN) || + (limbIndex == STALCHILD_LIMB_LEFT_FOOT) || (limbIndex == STALCHILD_LIMB_RIGHT_UPPER_ARM) || + (limbIndex == STALCHILD_LIMB_RIGHT_LOWER_ARM) || (limbIndex == STALCHILD_LIMB_RIGHT_HAND) || + (limbIndex == STALCHILD_LIMB_LEFT_UPPER_ARM) || (limbIndex == STALCHILD_LIMB_LEFT_LOWER_ARM) || + (limbIndex == STALCHILD_LIMB_LEFT_HAND)) { Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; - } else if ((limbIndex == OBJECT_SKB_LIMB_0B) && !(this->unk_3E8 & 2)) { + } else if ((limbIndex == STALCHILD_LIMB_HEAD) && !(this->unk_3E8 & 2)) { Matrix_MultVec3f(&D_80C21E70, &this->bodyPartsPos[this->bodyPartsCount]); this->bodyPartsCount++; } diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h index 95576210d..d29dd7fbf 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h @@ -38,8 +38,8 @@ typedef struct EnHintSkb { /* 0x2D4 */ f32 drawDmgEffAlpha; /* 0x2D8 */ f32 drawDmgEffScale; /* 0x2DC */ s32 bodyPartsCount; - /* 0x2E0 */ Vec3s jointTable[OBJECT_SKB_LIMB_MAX]; - /* 0x358 */ Vec3s morphTable[OBJECT_SKB_LIMB_MAX]; + /* 0x2E0 */ Vec3s jointTable[STALCHILD_LIMB_MAX]; + /* 0x358 */ Vec3s morphTable[STALCHILD_LIMB_MAX]; /* 0x3D0 */ UNK_TYPE1 unk3D0[0xC]; /* 0x3DC */ s16 unk_3DC; /* 0x3DE */ s16 unk_3DE; diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index b6bd9a2d2..226aec92b 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -63,19 +63,19 @@ ActorInit En_Rail_Skb_InitVars = { }; static AnimationInfo sAnimationInfo[] = { - { &object_skb_Anim_0064E0, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, - { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, + { &gStalchildWalkAnim, 0.96f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, + { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, }; static ColliderJntSphElementInit sJntSphElementsInit[2] = { @@ -270,8 +270,8 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) { func_80B708C0(this, play); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_0064E0, this->jointTable, - this->morphTable, 20); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildWalkAnim, this->jointTable, this->morphTable, + STALCHILD_LIMB_MAX); Collider_InitJntSph(play, &this->collider); Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 9d57b9638..98223faea 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -50,19 +50,19 @@ s32 func_80996594(EnSkb* this, PlayState* play); void func_80996BEC(EnSkb* this, PlayState* play); static AnimationInfo sAnimationInfo[] = { - { &object_skb_Anim_0064E0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &object_skb_Anim_002190, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, - { &object_skb_Anim_00270C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, - { &object_skb_Anim_00697C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, - { &object_skb_Anim_006D90, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, - { &object_skb_Anim_001D1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_003584, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, - { &object_skb_Anim_002AC8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, - { &object_skb_Anim_0015EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, - { &object_skb_Anim_0009E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, + { &gStalchildWalkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gStalchildAttackAnim, 0.6f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 4.0f }, + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, + { &gStalchildCollapseAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, + { &gStalchildSitLaughAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, + { &gStalchildSitTapToesAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, + { &gStalchildSwingOnBranchAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gStalchildStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -16.0f }, + { &gStalchildStaggerAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, + { &gStalchildSaluteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0 }, + { &gStalchildIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0 }, }; static Vec3f D_80997468[] = { @@ -176,29 +176,29 @@ void func_809947B0(PlayState* play, EnSkb* this, Vec3f* inPos) { } void func_8099495C(EnSkb* this, PlayState* play) { - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_003584, this->jointTable, - this->morphTable, 20); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildStandUpAnim, this->jointTable, this->morphTable, + STALCHILD_LIMB_MAX); this->unk_3DC = 0; func_80994E2C(this); } void func_809949C4(EnSkb* this, PlayState* play) { - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_00697C, this->jointTable, - this->morphTable, 20); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitLaughAnim, this->jointTable, this->morphTable, + STALCHILD_LIMB_MAX); this->unk_3DC = 1; func_809952D8(this); } void func_80994A30(EnSkb* this, PlayState* play) { - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_006D90, this->jointTable, - this->morphTable, 20); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSitTapToesAnim, this->jointTable, + this->morphTable, STALCHILD_LIMB_MAX); this->unk_3DC = 1; func_809953E8(this); } void func_80994A9C(EnSkb* this, PlayState* play) { - SkelAnime_Init(play, &this->skelAnime, &object_skb_Skel_005EF8, &object_skb_Anim_001D1C, this->jointTable, - this->morphTable, 20); + SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildSwingOnBranchAnim, this->jointTable, + this->morphTable, STALCHILD_LIMB_MAX); this->unk_3DC = 1; func_809954F8(this); } @@ -535,7 +535,7 @@ void func_80995818(EnSkb* this, PlayState* play) { } void func_809958F4(EnSkb* this) { - Animation_Change(&this->skelAnime, &object_skb_Anim_003584, -1.0f, Animation_GetLastFrame(&object_skb_Anim_003584), + Animation_Change(&this->skelAnime, &gStalchildStandUpAnim, -1.0f, Animation_GetLastFrame(&gStalchildStandUpAnim), 0.0f, ANIMMODE_ONCE, -4.0f); this->unk_3E4 = 0; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; @@ -620,7 +620,7 @@ void func_80995C84(EnSkb* this, PlayState* play) { } void func_80995D3C(EnSkb* this) { - Animation_Change(&this->skelAnime, &object_skb_Anim_002190, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f, + Animation_Change(&this->skelAnime, &gStalchildAttackAnim, -0.4f, this->skelAnime.curFrame - 1.0f, 0.0f, ANIMMODE_ONCE_INTERP, 0.0f); this->collider.base.atFlags &= ~AT_BOUNCED; this->unk_3DE = 4; From ae4a8fbe00e429a289bef24059301c693cb4e11b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:57:25 +1100 Subject: [PATCH 56/74] Object Name Cleanup (#1427) --- assets/xml/interface/week_static.xml | 6 +-- assets/xml/objects/gameplay_keep.xml | 12 ++--- assets/xml/objects/object_az.xml | 4 +- assets/xml/objects/object_bigpo.xml | 6 +-- assets/xml/objects/object_boss07.xml | 2 +- assets/xml/objects/object_box.xml | 14 +++--- assets/xml/objects/object_dinofos.xml | 6 +-- assets/xml/objects/object_dnj.xml | 2 +- assets/xml/objects/object_dnk.xml | 2 +- assets/xml/objects/object_dns.xml | 2 +- assets/xml/objects/object_ds2n.xml | 12 ++--- assets/xml/objects/object_dy_obj.xml | 2 +- assets/xml/objects/object_eg.xml | 2 +- assets/xml/objects/object_fish.xml | 2 +- assets/xml/objects/object_gla.xml | 2 +- assets/xml/objects/object_hs.xml | 2 +- assets/xml/objects/object_ik.xml | 32 ++++++------ assets/xml/objects/object_kaizoku_obj.xml | 2 +- assets/xml/objects/object_kusa.xml | 4 +- assets/xml/objects/object_ob.xml | 4 +- assets/xml/objects/object_obj_tokeidai.xml | 6 +-- assets/xml/objects/object_obj_yasi.xml | 8 +-- assets/xml/objects/object_rotlift.xml | 4 +- assets/xml/objects/object_ru2.xml | 2 +- assets/xml/objects/object_sdn.xml | 50 +++++++++---------- assets/xml/objects/object_sichitai_obj.xml | 2 +- assets/xml/objects/object_stk.xml | 14 +++--- assets/xml/objects/object_tro.xml | 2 +- assets/xml/objects/object_wdor04.xml | 2 +- assets/xml/objects/object_zl4.xml | 4 +- assets/xml/objects/object_zod.xml | 6 +-- docs/tutorial/object_decomp_example.md | 4 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 2 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 18 +++---- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 28 +++++------ .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 12 ++--- src/overlays/actors/ovl_En_Dnh/z_en_dnh.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- .../ovl_En_Ending_Hero4/z_en_ending_hero4.c | 2 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 18 +++---- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 12 ++--- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 8 +-- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 4 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 6 +-- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 18 +++---- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 4 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 4 +- .../ovl_Obj_Grass_Carry/z_obj_grass_carry.c | 4 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 4 +- .../actors/ovl_player_actor/z_player.c | 2 +- 55 files changed, 192 insertions(+), 192 deletions(-) diff --git a/assets/xml/interface/week_static.xml b/assets/xml/interface/week_static.xml index 12cc885fa..e2b098410 100644 --- a/assets/xml/interface/week_static.xml +++ b/assets/xml/interface/week_static.xml @@ -1,7 +1,7 @@ - - - + + + diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 5dababaab..37fb3fc61 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -1223,8 +1223,8 @@ - - + + @@ -1281,7 +1281,7 @@ - + @@ -1486,9 +1486,9 @@ - - - + + + diff --git a/assets/xml/objects/object_az.xml b/assets/xml/objects/object_az.xml index e4e56aa88..42e5bdc61 100644 --- a/assets/xml/objects/object_az.xml +++ b/assets/xml/objects/object_az.xml @@ -64,8 +64,8 @@ - - + + diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml index 46c79310e..fbde9e8e5 100644 --- a/assets/xml/objects/object_bigpo.xml +++ b/assets/xml/objects/object_bigpo.xml @@ -7,13 +7,13 @@ - + - + @@ -57,7 +57,7 @@ - + diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml index f1be3cf31..2d3aa4fa1 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -150,7 +150,7 @@ - + diff --git a/assets/xml/objects/object_box.xml b/assets/xml/objects/object_box.xml index c0603a6cf..8bb2b7efe 100644 --- a/assets/xml/objects/object_box.xml +++ b/assets/xml/objects/object_box.xml @@ -11,12 +11,12 @@ - - - - - - + + + + + + @@ -24,7 +24,7 @@ - + diff --git a/assets/xml/objects/object_dinofos.xml b/assets/xml/objects/object_dinofos.xml index 7ed5f81f5..c3c575b0f 100644 --- a/assets/xml/objects/object_dinofos.xml +++ b/assets/xml/objects/object_dinofos.xml @@ -36,8 +36,8 @@ - - + + @@ -64,7 +64,7 @@ - + diff --git a/assets/xml/objects/object_dnj.xml b/assets/xml/objects/object_dnj.xml index 3b4f27579..f7f9d830c 100644 --- a/assets/xml/objects/object_dnj.xml +++ b/assets/xml/objects/object_dnj.xml @@ -59,7 +59,7 @@ - + diff --git a/assets/xml/objects/object_dnk.xml b/assets/xml/objects/object_dnk.xml index b085eed28..0e35b1f97 100644 --- a/assets/xml/objects/object_dnk.xml +++ b/assets/xml/objects/object_dnk.xml @@ -33,7 +33,7 @@ - + diff --git a/assets/xml/objects/object_dns.xml b/assets/xml/objects/object_dns.xml index e5d91326f..903dfba6c 100644 --- a/assets/xml/objects/object_dns.xml +++ b/assets/xml/objects/object_dns.xml @@ -25,7 +25,7 @@ " Format="rgba16" Width="8" Height="8" Offset="0x28E8" /> - + diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml index 7c04da8bf..e4757de31 100644 --- a/assets/xml/objects/object_ds2n.xml +++ b/assets/xml/objects/object_ds2n.xml @@ -20,9 +20,9 @@ - - - + + + @@ -49,9 +49,9 @@ - - - + + + diff --git a/assets/xml/objects/object_dy_obj.xml b/assets/xml/objects/object_dy_obj.xml index 37fef4ab1..b321240cc 100644 --- a/assets/xml/objects/object_dy_obj.xml +++ b/assets/xml/objects/object_dy_obj.xml @@ -51,7 +51,7 @@ - + diff --git a/assets/xml/objects/object_eg.xml b/assets/xml/objects/object_eg.xml index 28686f3ae..a79ff6332 100644 --- a/assets/xml/objects/object_eg.xml +++ b/assets/xml/objects/object_eg.xml @@ -41,7 +41,7 @@ - + diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index b4de27c4e..318cb53d5 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -213,7 +213,7 @@ - + diff --git a/assets/xml/objects/object_gla.xml b/assets/xml/objects/object_gla.xml index 60880a7a7..45da7754a 100644 --- a/assets/xml/objects/object_gla.xml +++ b/assets/xml/objects/object_gla.xml @@ -31,7 +31,7 @@ - + diff --git a/assets/xml/objects/object_hs.xml b/assets/xml/objects/object_hs.xml index c5ac723f8..be333f1dc 100644 --- a/assets/xml/objects/object_hs.xml +++ b/assets/xml/objects/object_hs.xml @@ -44,7 +44,7 @@ - + diff --git a/assets/xml/objects/object_ik.xml b/assets/xml/objects/object_ik.xml index fcbb90620..66df1e9ed 100644 --- a/assets/xml/objects/object_ik.xml +++ b/assets/xml/objects/object_ik.xml @@ -52,25 +52,25 @@ - - - + + + - - + + - - - - - + + + + + - - - - - - + + + + + + diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml index a8e773034..c13f32125 100644 --- a/assets/xml/objects/object_kaizoku_obj.xml +++ b/assets/xml/objects/object_kaizoku_obj.xml @@ -29,7 +29,7 @@ - + diff --git a/assets/xml/objects/object_kusa.xml b/assets/xml/objects/object_kusa.xml index 9ed22b39f..362e47114 100644 --- a/assets/xml/objects/object_kusa.xml +++ b/assets/xml/objects/object_kusa.xml @@ -1,6 +1,6 @@  - - + + diff --git a/assets/xml/objects/object_ob.xml b/assets/xml/objects/object_ob.xml index d23ab6790..1efe524b4 100644 --- a/assets/xml/objects/object_ob.xml +++ b/assets/xml/objects/object_ob.xml @@ -65,10 +65,10 @@ - + - + diff --git a/assets/xml/objects/object_obj_tokeidai.xml b/assets/xml/objects/object_obj_tokeidai.xml index 09e070254..94a302ea4 100644 --- a/assets/xml/objects/object_obj_tokeidai.xml +++ b/assets/xml/objects/object_obj_tokeidai.xml @@ -36,7 +36,7 @@ - + @@ -68,11 +68,11 @@ - + - + diff --git a/assets/xml/objects/object_obj_yasi.xml b/assets/xml/objects/object_obj_yasi.xml index a8e153edd..34ace132e 100644 --- a/assets/xml/objects/object_obj_yasi.xml +++ b/assets/xml/objects/object_obj_yasi.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/assets/xml/objects/object_rotlift.xml b/assets/xml/objects/object_rotlift.xml index da5db27d7..c2acf0540 100644 --- a/assets/xml/objects/object_rotlift.xml +++ b/assets/xml/objects/object_rotlift.xml @@ -3,7 +3,7 @@ - + @@ -11,7 +11,7 @@ - + diff --git a/assets/xml/objects/object_ru2.xml b/assets/xml/objects/object_ru2.xml index 89d00e9d7..7d5823a50 100644 --- a/assets/xml/objects/object_ru2.xml +++ b/assets/xml/objects/object_ru2.xml @@ -17,7 +17,7 @@ - + diff --git a/assets/xml/objects/object_sdn.xml b/assets/xml/objects/object_sdn.xml index 8271480be..bcc1f7637 100644 --- a/assets/xml/objects/object_sdn.xml +++ b/assets/xml/objects/object_sdn.xml @@ -3,19 +3,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -33,17 +33,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -61,6 +61,6 @@ - + diff --git a/assets/xml/objects/object_sichitai_obj.xml b/assets/xml/objects/object_sichitai_obj.xml index d1179beab..03bc4f7f3 100644 --- a/assets/xml/objects/object_sichitai_obj.xml +++ b/assets/xml/objects/object_sichitai_obj.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_stk.xml b/assets/xml/objects/object_stk.xml index a6f00c89b..eccbbb3a1 100644 --- a/assets/xml/objects/object_stk.xml +++ b/assets/xml/objects/object_stk.xml @@ -23,13 +23,13 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_tro.xml b/assets/xml/objects/object_tro.xml index eb1ba9984..0a4a3ea8b 100644 --- a/assets/xml/objects/object_tro.xml +++ b/assets/xml/objects/object_tro.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_wdor04.xml b/assets/xml/objects/object_wdor04.xml index 07ad601dd..d47e78a8e 100644 --- a/assets/xml/objects/object_wdor04.xml +++ b/assets/xml/objects/object_wdor04.xml @@ -2,6 +2,6 @@ - + diff --git a/assets/xml/objects/object_zl4.xml b/assets/xml/objects/object_zl4.xml index 667ca5f21..2c5eff1ef 100644 --- a/assets/xml/objects/object_zl4.xml +++ b/assets/xml/objects/object_zl4.xml @@ -104,7 +104,7 @@ - + @@ -118,7 +118,7 @@ - + diff --git a/assets/xml/objects/object_zod.xml b/assets/xml/objects/object_zod.xml index 45fb179cc..a926e6ef9 100644 --- a/assets/xml/objects/object_zod.xml +++ b/assets/xml/objects/object_zod.xml @@ -24,9 +24,9 @@ - - - + + + diff --git a/docs/tutorial/object_decomp_example.md b/docs/tutorial/object_decomp_example.md index e4025caae..10fcf2766 100644 --- a/docs/tutorial/object_decomp_example.md +++ b/docs/tutorial/object_decomp_example.md @@ -197,13 +197,13 @@ We can see this is the guard's Deku Flower: We can name the display list as such in the XML: ```xml - + ``` Then, like all steps before, we can run `./extract_assets.py -s objects/object_dns` and then update `z_en_dns.c` with our new name: ```c -gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlower); +gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlowerDL); ``` ## Step #5: Naming limb display lists diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c index 7f0312f0c..b6db682d2 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c @@ -57,7 +57,7 @@ static ColliderCylinderInit sCylinderInit = { }; void BgDkjailIvy_IvyCutEffects(BgDkjailIvy* this, PlayState* play) { - static Gfx* sLeafDlists[] = { gKakeraLeafMiddle, gKakeraLeafTip }; + static Gfx* sLeafDlists[] = { gKakeraLeafMiddleDL, gKakeraLeafTipDL }; static s16 sLeafScales[] = { 110, 80, 60, 40 }; f32 phi_fs0; s32 i; diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 05d4a27bf..ebdaeff51 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -386,7 +386,7 @@ void BgIngate_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gSichitaiBoat); + gSPDisplayList(POLY_OPA_DISP++, gSichitaiBoatDL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index ee323aa2b..e4f85e15c 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1998,17 +1998,17 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot switch (this->handType) { case SK_HAND_TYPE_HOLDING_LINK_MASK_AND_FLUTE: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedRightHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedRightHandDL); gSPDisplayList(POLY_OPA_DISP++, gSkullKidLinkMask2DL); break; case SK_HAND_TYPE_HOLDING_LINK_MASK: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidMaskHoldingRightHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidMaskHoldingRightHandDL); gSPDisplayList(POLY_OPA_DISP++, gSkullKidLinkMask3DL); break; case SK_HAND_TYPE_HOLDING_OCARINA: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaHoldingRightHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaHoldingRightHandDL); if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) { gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaOfTimeDL); @@ -2042,11 +2042,11 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot break; case SK_HAND_TYPE_HOLDING_LINK_MASK: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidUntexturedLeftHandDL); break; case SK_HAND_TYPE_HOLDING_MAJORAS_MASK: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL); gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask2DL); break; @@ -2054,21 +2054,21 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot if ((play->sceneId != SCENE_LOST_WOODS) || (gSaveContext.sceneLayer != 1)) { gSPDisplayList(POLY_OPA_DISP++, gSkullKidOcarinaOfTimeDL); } - gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL); break; case SK_HAND_TYPE_JUGGLING_OR_DROPPING_OCARINA: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidTwoFingersExtendedLeftHandDL); break; case SK_HAND_TYPE_HOLDING_FLUTE: - gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteHoldingLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteHoldingLeftHandDL); gSPDisplayList(POLY_OPA_DISP++, gSkullKidFluteDL); break; case SK_HAND_TYPE_DEFAULT: if (this->alpha == 255) { - gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHand); + gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHandDL); } break; diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index 88c0f4280..4a585c779 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -41,7 +41,7 @@ typedef enum { } DmZlAnimation; static AnimationInfo sAnimationInfo[ZELDA_ANIM_MAX] = { - { &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY + { &gDmZl4FacingAwayHandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY { &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_TURNING_TOWARD_PLAYER { &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_PLAYER { &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA_START diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 218de2cb5..43a557aae 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -78,20 +78,20 @@ typedef enum { } BeaverAnimation; static AnimationSpeedInfo sAnimationSpeedInfo[BEAVER_ANIM_IDLE_FACE_MAX] = { - { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, // BEAVER_ANIM_IDLE - { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_WALK - { &gBeaverSwimWithSpinningTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL - { &gBeaverSwimWithRaisedTail, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_RAISED_TAIL - { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK - { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_WAVE_ARMS - { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_RIGHT - { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_LEFT - { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM - { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_LEFT - { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_RIGHT - { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, // BEAVER_ANIM_BOW - { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_LEFT - { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_RIGHT + { &gBeaverIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f }, // BEAVER_ANIM_IDLE + { &gBeaverWalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_WALK + { &gBeaverSwimWithSpinningTailAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL + { &gBeaverSwimWithRaisedTailAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM_WITH_RAISED_TAIL + { &gBeaverTalkAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK + { &gBeaverTalkWaveArmsAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_WAVE_ARMS + { &gBeaverLaughRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_RIGHT + { &gBeaverLaughLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_LAUGH_LEFT + { &gBeaverSwimAnim, 2.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_SWIM + { &gBeaverTalkToLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_LEFT + { &gBeaverTalkToRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_TALK_TO_RIGHT + { &gBeaverBowAnim, 1.0f, ANIMMODE_ONCE, -5.0f }, // BEAVER_ANIM_BOW + { &gBeaverIdleFaceLeftAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_LEFT + { &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f }, // BEAVER_ANIM_IDLE_FACE_RIGHT }; ActorInit En_Az_InitVars = { diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 3d4d95b87..86d8524be 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -58,7 +58,7 @@ void EnDemoheishi_Init(Actor* thisx, PlayState* play) { EnDemoheishi* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.targetMode = TARGET_MODE_6; @@ -83,11 +83,11 @@ typedef enum { } EnDemoheishiAnimation; static AnimationHeader* sAnimations[DEMOHEISHI_ANIM_MAX] = { - &gSoldierStandHandOnHip, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP - &gSoldierCheerWithSpear, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR - &gSoldierWave, // DEMOHEISHI_ANIM_WAVE - &gSoldierSitAndReach, // DEMOHEISHI_ANIM_SIT_AND_REACH - &gSoldierStandUp, // DEMOHEISHI_ANIM_STAND_UP + &gSoldierStandHandOnHipAnim, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpearAnim, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWaveAnim, // DEMOHEISHI_ANIM_WAVE + &gSoldierSitAndReachAnim, // DEMOHEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUpAnim, // DEMOHEISHI_ANIM_STAND_UP }; static u8 sAnimationModes[DEMOHEISHI_ANIM_MAX] = { diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 4039386e0..e30ee26ab 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -60,7 +60,7 @@ typedef enum { } EnDnhAnimation; static AnimationInfoS sAnimationInfo[ENDNH_ANIM_MAX] = { - { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING + { &gKoumeKioskHeadMovingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING }; static TexturePtr sEyeTextures[] = { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 723ee895f..02777ec44 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -386,7 +386,7 @@ void func_8092D108(EnDns* this, PlayState* play) { Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlower); + gSPDisplayList(POLY_OPA_DISP++, gKingsChamberDekuGuardDekuFlowerDL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c index 3d75e19d7..b75e0f21c 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c @@ -37,7 +37,7 @@ void EnEndingHero4_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.targetMode = TARGET_MODE_6; this->actor.gravity = -3.0f; - SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpear, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierCheerWithSpearAnim, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); EnEndingHero4_SetupIdle(this); diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index c67a09e65..47312b722 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -56,15 +56,15 @@ static FlexSkeletonHeader* sSkeletons[ENDING_HERO6_TYPE_MAX] = { }; static AnimationHeader* sAnimations[ENDING_HERO6_TYPE_MAX] = { - &object_dt_Anim_000BE0, // ENDING_HERO6_TYPE_DT - &object_bai_Anim_0011C0, // ENDING_HERO6_TYPE_BAI - &object_toryo_Anim_000E50, // ENDING_HERO6_TYPE_TORYO - &gSoldierCheerWithSpear, // ENDING_HERO6_TYPE_SOLDIER - &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_RED - &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_BLUE - &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_GREEN - &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_PURPLE - &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_ORANGE + &object_dt_Anim_000BE0, // ENDING_HERO6_TYPE_DT + &object_bai_Anim_0011C0, // ENDING_HERO6_TYPE_BAI + &object_toryo_Anim_000E50, // ENDING_HERO6_TYPE_TORYO + &gSoldierCheerWithSpearAnim, // ENDING_HERO6_TYPE_SOLDIER + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_RED + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_BLUE + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_GREEN + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_PURPLE + &object_daiku_Anim_002FA0, // ENDING_HERO6_TYPE_DAIKU_ORANGE }; static s32 sLimbCounts[ENDING_HERO6_TYPE_MAX] = { diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index e00f3b523..92e3bf306 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -389,7 +389,7 @@ void EnGuardNuts_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gDekuPalaceGuardFlower); + gSPDisplayList(POLY_OPA_DISP++, gDekuPalaceGuardFlowerDL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index 19c2a34a8..650d4c69d 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -56,7 +56,7 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) { EnHeishi* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->paramsCopy = this->actor.params; @@ -99,11 +99,11 @@ typedef enum EnHeishiAnimation { } EnHeishiAnimation; static AnimationHeader* sAnimations[HEISHI_ANIM_MAX] = { - &gSoldierStandHandOnHip, // HEISHI_ANIM_STAND_HAND_ON_HIP - &gSoldierCheerWithSpear, // HEISHI_ANIM_CHEER_WITH_SPEAR - &gSoldierWave, // HEISHI_ANIM_WAVE - &gSoldierSitAndReach, // HEISHI_ANIM_SIT_AND_REACH - &gSoldierStandUp, // HEISHI_ANIM_STAND_UP + &gSoldierStandHandOnHipAnim, // HEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpearAnim, // HEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWaveAnim, // HEISHI_ANIM_WAVE + &gSoldierSitAndReachAnim, // HEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUpAnim, // HEISHI_ANIM_STAND_UP }; static u8 sAnimationModes[HEISHI_ANIM_MAX] = { diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 2b65c09e6..dafd131ee 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -307,7 +307,7 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) { scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) & 7; EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 0x50, - -1, 1, gKakeraLeafMiddle); + -1, 1, gKakeraLeafMiddleDL); pos.x = this->actor.world.pos.x + (directon->x * this->actor.scale.x * 40.0f); pos.y = this->actor.world.pos.y + (directon->y * this->actor.scale.y * 40.0f) + 10.0f; @@ -319,7 +319,7 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) { scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) % 7; EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 0x50, - -1, 1, gKakeraLeafTip); + -1, 1, gKakeraLeafTipDL); } } @@ -736,7 +736,7 @@ void EnKusa_DrawGrass(Actor* thisx, PlayState* play) { EnKusa* this = THIS; if (this->isCut) { - Gfx_DrawDListOpa(play, gKusaStump); + Gfx_DrawDListOpa(play, gKusaStumpDL); } else { if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) && (this->actionFunc == EnKusa_WaitForInteract)) { @@ -744,6 +744,6 @@ void EnKusa_DrawGrass(Actor* thisx, PlayState* play) { EnKusa_ApplySway(&D_80936AD8[this->kusaMtxIdx]); } } - Gfx_DrawDListOpa(play, gKusaSprout); + Gfx_DrawDListOpa(play, gKusaSproutDL); } } diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index 53e203330..e471eb8f7 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -1315,8 +1315,8 @@ void EnKusa2_Update(Actor* thisx, PlayState* play) { void func_80A5E6F0(Actor* thisx, PlayState* play) { static Gfx* D_80A5EB68[] = { - gKakeraLeafTip, - gKakeraLeafMiddle, + gKakeraLeafTipDL, + gKakeraLeafMiddleDL, }; EnKusa2* this = THIS; s32 i; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index a280a94c6..80fbff4b1 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -90,7 +90,7 @@ static AnimationInfoS sAnimationInfo[] = { { &gBusinessScrubFlyEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, }; -Gfx* D_80BCCCDC[] = { gKakeraLeafMiddle, gKakeraLeafTip }; +Gfx* D_80BCCCDC[] = { gKakeraLeafMiddleDL, gKakeraLeafTipDL }; Vec3f D_80BCCCE4 = { 0.0f, -0.5f, 0.0f }; diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index c0d9e1197..581962d60 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -62,8 +62,8 @@ static ColliderCylinderInit sCylinderInit = { static u16 sEnStoneHeishiTextIds[] = { 0x1473, 0x1474, 0x1475, 0x1476, 0x1477, 0x1478, 0x1479, 0x147A, 0x1472 }; static AnimationHeader* sAnimations[] = { - &gSoldierStandHandOnHip, &gSoldierDrink, &gSoldierCheerWithSpear, &gSoldierWave, - &gSoldierSitAndReach, &gSoldierDrink, &gSoldierStandUp, + &gSoldierStandHandOnHipAnim, &gSoldierDrinkAnim, &gSoldierCheerWithSpearAnim, &gSoldierWaveAnim, + &gSoldierSitAndReachAnim, &gSoldierDrinkAnim, &gSoldierStandUpAnim, }; static u8 sAnimationModes[] = { @@ -107,7 +107,7 @@ void EnStoneheishi_Init(Actor* thisx, PlayState* play) { EnStoneheishi* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWaveAnim, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index 8be9f715a..6a1b68bbc 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -85,21 +85,21 @@ static u16 sThirdDayLeaveMessages[] = { }; static AnimationHeader* sAnimations[SOLDIER_ANIM_MAX] = { - &gSoldierLookDown, // SOLDIER_ANIM_LOOK_DOWN - &gSoldierComeUpHere, // SOLDIER_ANIM_COME_UP_HERE - &gSoldierStandHandOnHip, // SOLDIER_ANIM_STAND_HAND_ON_HIP - &gSoldierStandAndLookDown, // SOLDIER_ANIM_STAND_LOOK_DOWN - &object_sdn_Anim_0057BC, // SOLDIER_ANIM_4 - &object_sdn_Anim_005D28, // SOLDIER_ANIM_5 - &object_sdn_Anim_0064C0, // SOLDIER_ANIM_6 - &gSoldierStandWithHandOnChest, // SOLDIER_ANIM_STAND_HAND_ON_CHEST + &gSoldierLookDownAnim, // SOLDIER_ANIM_LOOK_DOWN + &gSoldierComeUpHereAnim, // SOLDIER_ANIM_COME_UP_HERE + &gSoldierStandHandOnHipAnim, // SOLDIER_ANIM_STAND_HAND_ON_HIP + &gSoldierStandAndLookDownAnim, // SOLDIER_ANIM_STAND_LOOK_DOWN + &object_sdn_Anim_0057BC, // SOLDIER_ANIM_4 + &object_sdn_Anim_005D28, // SOLDIER_ANIM_5 + &object_sdn_Anim_0064C0, // SOLDIER_ANIM_6 + &gSoldierStandWithHandOnChestAnim, // SOLDIER_ANIM_STAND_HAND_ON_CHEST }; void EnStopheishi_Init(Actor* thisx, PlayState* play) { EnStopheishi* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierStandHandOnHip, this->jointTable, + SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierStandHandOnHipAnim, this->jointTable, this->morphTable, SOLDIER_LIMB_MAX); this->actor.colChkInfo.mass = MASS_IMMOVABLE; diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 5d352e734..ab1f940ce 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -622,7 +622,7 @@ void EnZod_DrawDrums(EnZod* this, PlayState* play) { } void EnZod_Draw(Actor* thisx, PlayState* play) { - static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpen, &gTijoEyesHalfOpen, &gTijoEyesClosed }; + static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpenTex, &gTijoEyesHalfOpenTex, &gTijoEyesClosedTex }; EnZod* this = THIS; Gfx* gfx; diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 9e6531ef1..d5ec2917a 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -303,8 +303,8 @@ void func_809375C8(ObjBean* this, PlayState* play) { void func_809375F4(ObjBean* this, PlayState* play) { static Gfx* D_80939024[] = { - gKakeraLeafMiddle, - gKakeraLeafTip, + gKakeraLeafMiddleDL, + gKakeraLeafTipDL, }; Vec3f spC4; Vec3f spB8; diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index a17f853df..e95f971c9 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -120,7 +120,7 @@ void func_809A9314(ObjGrassStruct1_1* ptr, PlayState* play) { spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f; EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddle); + D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL); spB0.x = ptr->unk_00.x + (ptr2->x * 16.0f); spB0.y = (ptr->unk_00.y + (ptr2->y * 16.0f)) + 10.0f; @@ -131,7 +131,7 @@ void func_809A9314(ObjGrassStruct1_1* ptr, PlayState* play) { spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f; EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTip); + D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL); } } diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c index 795d740f1..1554a2403 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c @@ -132,7 +132,7 @@ void func_809AAFE8(Vec3f* arg0, PlayState* play) { spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f; EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddle); + D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL); spB0.x = arg0->x + (ptr->x * 16.0f); spB0.y = arg0->y + (ptr->y * 16.0f) + 10.0f; @@ -143,7 +143,7 @@ void func_809AAFE8(Vec3f* arg0, PlayState* play) { spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f; EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTip); + D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL); } } diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 70a4e7022..7f8d87ca4 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -835,9 +835,9 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_WALL_CLOCK || OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK) { - gSPDisplayList(POLY_OPA_DISP++, gWallClockClockFace); + gSPDisplayList(POLY_OPA_DISP++, gWallClockClockFaceDL); } else { - gSPDisplayList(POLY_OPA_DISP++, gClockTowerClockFace); + gSPDisplayList(POLY_OPA_DISP++, gClockTowerClockFaceDL); } Matrix_Translate(0.0f, -1112.0f, -19.6f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 2c52ecdec..6e19ae832 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -9917,7 +9917,7 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r velocity.y = Rand_ZeroFloat(2.0f); velocity.z = Rand_CenteredFloat(3.0f); D_8085D288.y = -0.1f; - EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip); + EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTipDL); } } From 5dced7a09b53046e683dcd7da16cd7b7224491a3 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 02:13:41 +0200 Subject: [PATCH 57/74] object_f40_switch (#1418) * naming * naming to gStoneTowerFloorSwitch --- assets/xml/objects/object_f40_switch.xml | 11 ++++++----- .../actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/assets/xml/objects/object_f40_switch.xml b/assets/xml/objects/object_f40_switch.xml index 7e7fb5b1c..6be5a5bd5 100644 --- a/assets/xml/objects/object_f40_switch.xml +++ b/assets/xml/objects/object_f40_switch.xml @@ -1,9 +1,10 @@  + - - - - - + + + + + diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c index 9e4f9a590..18063efce 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c @@ -1,7 +1,7 @@ /* * File: z_bg_f40_switch.c * Overlay: ovl_Bg_F40_Switch - * Description: Stone Tower Switch + * Description: Stone Tower FloorSwitch */ #include "z_bg_f40_switch.h" @@ -113,7 +113,7 @@ void BgF40Switch_Init(Actor* thisx, PlayState* play) { this->actionFunc = BgF40Switch_IdleUnpressed; this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f; DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_switch_Colheader_000118); + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerFloorSwitchCol); if (!sBgF40SwitchGlobalsInitialized) { sBgF40SwitchLastUpdateFrame = play->gameplayFrames; sBgF40SwitchGlobalsInitialized = true; @@ -189,6 +189,6 @@ void BgF40Switch_Update(Actor* thisx, PlayState* play) { void BgF40Switch_Draw(Actor* thisx, PlayState* play) { BgF40Switch* this = THIS; - Gfx_DrawDListOpa(play, object_f40_switch_DL_000438); - Gfx_DrawDListOpa(play, object_f40_switch_DL_000390); + Gfx_DrawDListOpa(play, gStoneTowerFloorSwitchDL); + Gfx_DrawDListOpa(play, gStoneTowerFloorSwitchOutlineDL); } From 808f60a1fa31a05f2a64040a4d662c932152b497 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 02:39:15 +0200 Subject: [PATCH 58/74] naming (#1425) --- assets/xml/objects/object_kzsaku.xml | 7 ++++--- src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/assets/xml/objects/object_kzsaku.xml b/assets/xml/objects/object_kzsaku.xml index af957d700..fa157409e 100644 --- a/assets/xml/objects/object_kzsaku.xml +++ b/assets/xml/objects/object_kzsaku.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c index 00f5e9957..94937b164 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -42,7 +42,7 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->dyna.actor, 1.0f); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - CollisionHeader_GetVirtual(&object_kzsaku_Colheader_001118, &col); + CollisionHeader_GetVirtual(&gUnderwaterGrateCol, &col); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col); @@ -124,7 +124,7 @@ void ObjKzsaku_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_kzsaku_DL_000040); + gSPDisplayList(POLY_OPA_DISP++, gUnderwaterGrateDL); CLOSE_DISPS(play->state.gfxCtx); } From d25e10dcc24b911ef0c67c5a84dd7ebcb3e45872 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 03:07:54 +0200 Subject: [PATCH 59/74] object_redead_obj (#1417) * naming * comment * Out Name * The Gibdo's Well Doors * naming * typos --- assets/xml/objects/object_redead_obj.xml | 7 ++++--- src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/assets/xml/objects/object_redead_obj.xml b/assets/xml/objects/object_redead_obj.xml index fd286d6e7..8460579b3 100644 --- a/assets/xml/objects/object_redead_obj.xml +++ b/assets/xml/objects/object_redead_obj.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 382ed890d..31a9f6a3d 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -81,7 +81,7 @@ ShutterInfo D_808A21B0[] = { { object_hakugin_obj_DL_000128, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { gGreatBayTempleObjectDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_ikana_obj_DL_014A40, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, - { object_redead_obj_DL_0001A0, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, + { gBeneathTheWellSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_ikninside_obj_DL_004440, object_ikninside_obj_DL_005260, 130, 0, 20, 15 }, { object_random_obj_DL_000190, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_kinsta1_obj_DL_000198, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, From ab4c207be49f9d3ac17f8522ec9c7dbc87675f24 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 03:25:49 +0200 Subject: [PATCH 60/74] object_random_obj (#1416) * naming * Secret Shrine doors * naming * OutName --- assets/xml/objects/object_random_obj.xml | 5 +++-- src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/xml/objects/object_random_obj.xml b/assets/xml/objects/object_random_obj.xml index 9b9986ca1..509ed86c7 100644 --- a/assets/xml/objects/object_random_obj.xml +++ b/assets/xml/objects/object_random_obj.xml @@ -1,6 +1,7 @@  + - - + + diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 31a9f6a3d..4286cb2a3 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -83,7 +83,7 @@ ShutterInfo D_808A21B0[] = { { object_ikana_obj_DL_014A40, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { gBeneathTheWellSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_ikninside_obj_DL_004440, object_ikninside_obj_DL_005260, 130, 0, 20, 15 }, - { object_random_obj_DL_000190, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, + { gSecretShrineSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_kinsta1_obj_DL_000198, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_kaizoku_obj_DL_0001A0, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_last_obj_DL_0039C0, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, From e174672223593ddfe0d3bcb8308fdd0e00d6f60c Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 04:05:12 +0200 Subject: [PATCH 61/74] object_ladder (#1419) * naming * Original naming * removed comments * comments --- assets/xml/objects/object_ladder.xml | 28 +++++++++++++------ .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 16 +++++------ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/assets/xml/objects/object_ladder.xml b/assets/xml/objects/object_ladder.xml index 29ee69b9b..2fc01e5bf 100644 --- a/assets/xml/objects/object_ladder.xml +++ b/assets/xml/objects/object_ladder.xml @@ -1,13 +1,23 @@  + - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c index 12cd5d334..8445e855a 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -37,10 +37,10 @@ static InitChainEntry sInitChain[] = { }; static Gfx* sLadderDLists[] = { - object_ladder_DL_0000A0, // 12 Rung - object_ladder_DL_0002D0, // 16 Rung - object_ladder_DL_000500, // 20 Rung - object_ladder_DL_000730, // 24 Rung + gWoodenLadder12RungDL, + gWoodenLadder16RungDL, + gWoodenLadder20RungDL, + gWoodenLadder24RungDL, }; void BgLadder_Init(Actor* thisx, PlayState* play) { @@ -55,13 +55,13 @@ void BgLadder_Init(Actor* thisx, PlayState* play) { size = thisx->params; if (size == LADDER_SIZE_12RUNG) { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_0001D8); + DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder12RungCol); } else if (size == LADDER_SIZE_16RUNG) { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000408); + DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder16RungCol); } else if (size == LADDER_SIZE_20RUNG) { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000638); + DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder20RungCol); } else if (size == LADDER_SIZE_24RUNG) { - DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000868); + DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenLadder24RungCol); } else { Actor_Kill(&this->dyna.actor); return; From e2dcde6a9296b7878e113568c819e429d54772ba Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:13:48 +0200 Subject: [PATCH 62/74] object_kinsta1_obj (#1415) * naming * Original naming * Original naming * wrong file * Swamp Spider House Door * naming * ups * fix --- assets/xml/objects/object_kinsta1_obj.xml | 7 ++++--- src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/assets/xml/objects/object_kinsta1_obj.xml b/assets/xml/objects/object_kinsta1_obj.xml index be178d1e8..d2a55b04d 100644 --- a/assets/xml/objects/object_kinsta1_obj.xml +++ b/assets/xml/objects/object_kinsta1_obj.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 4286cb2a3..b0805ef59 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -84,7 +84,7 @@ ShutterInfo D_808A21B0[] = { { gBeneathTheWellSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_ikninside_obj_DL_004440, object_ikninside_obj_DL_005260, 130, 0, 20, 15 }, { gSecretShrineSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, - { object_kinsta1_obj_DL_000198, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, + { gSwampSpiderHouseSlidingDoorDL, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_kaizoku_obj_DL_0001A0, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, { object_last_obj_DL_0039C0, gameplay_keep_DL_078A80, 130, 12, 20, 15 }, }; From dd4206bb244a47cbcb979dd0d3040c8f7ed998a8 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Mon, 9 Oct 2023 18:11:21 -0700 Subject: [PATCH 63/74] Document `object_jso` (Garo and Garo Master) (#1428) * Document `object_jso` (Garo and Garo Master) * Fix TexAnim names --- assets/xml/objects/object_jso.xml | 261 ++++++++++++++++-------------- 1 file changed, 143 insertions(+), 118 deletions(-) diff --git a/assets/xml/objects/object_jso.xml b/assets/xml/objects/object_jso.xml index bfe271d69..d94ffdafe 100644 --- a/assets/xml/objects/object_jso.xml +++ b/assets/xml/objects/object_jso.xml @@ -1,122 +1,147 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f17e85d1fd2a124ddde9adaecbb044db341ec0d4 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Wed, 11 Oct 2023 08:32:02 -0400 Subject: [PATCH 64/74] ovl_Obj_Grass_Unit OK and some grass documentation (#1172) * z_obj_grass_unit OK * document some grass * pr suggestions, add grass_unit comment * pr suggestions * implement constants --- include/z64math.h | 9 +- spec | 3 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 380 +++++++++--------- .../actors/ovl_Obj_Grass/z_obj_grass.h | 54 ++- .../ovl_Obj_Grass_Carry/z_obj_grass_carry.c | 283 +++++++------ .../ovl_Obj_Grass_Carry/z_obj_grass_carry.h | 10 +- .../ovl_Obj_Grass_Unit/z_obj_grass_unit.c | 166 +++++++- .../ovl_Obj_Grass_Unit/z_obj_grass_unit.h | 3 + 8 files changed, 533 insertions(+), 375 deletions(-) diff --git a/include/z64math.h b/include/z64math.h index 6fa64f4f4..4a4d15b98 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -39,6 +39,11 @@ typedef struct { /* 0x8 */ s32 z; } Vec3i; // size = 0xC +typedef struct { + /* 0x0 */ f32 distance; + /* 0x4 */ s16 angle; +} VecPolar; // size = 0x8 + typedef struct { /* 0x0 */ Vec3s center; /* 0x6 */ s16 radius; @@ -49,8 +54,8 @@ typedef struct { /* 0xC */ f32 radius; } Spheref; // size = 0x10 -/* -The plane paramaters are of form `ax + by + cz + d = 0` +/* +The plane paramaters are of form `ax + by + cz + d = 0` where `(a,b,c)` is the plane's normal vector and d is the originDist */ typedef struct { diff --git a/spec b/spec index e4508b5bd..7aab83ed8 100644 --- a/spec +++ b/spec @@ -2137,8 +2137,7 @@ beginseg name "ovl_Obj_Grass_Unit" compress include "build/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.o" - include "build/data/ovl_Obj_Grass_Unit/ovl_Obj_Grass_Unit.data.o" - include "build/data/ovl_Obj_Grass_Unit/ovl_Obj_Grass_Unit.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Grass_Unit/ovl_Obj_Grass_Unit_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index e95f971c9..a1ce45b82 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -1,7 +1,9 @@ /* * File: z_obj_grass.c * Overlay: ovl_Obj_Grass - * Description: "Master" instance of grass for unit spawned by Obj_Grass_Unit + * Description: Optimized manager for processing grass "spawned" by ObjGrassUnit + * + * Instances of ObjGrass must be spawned by ObjGrassUnit to function correctly. */ #include "prevent_bss_reordering.h" @@ -18,10 +20,10 @@ void ObjGrass_Destroy(Actor* thisx, PlayState* play); void ObjGrass_Update(Actor* thisx, PlayState* play); void ObjGrass_Draw(Actor* thisx, PlayState* play); -ObjGrassStruct1* D_809AADA0[4]; -f32 D_809AADB0[4]; -ObjGrassStruct1_1* D_809AADC0[20]; -f32 D_809AAE10[20]; +ObjGrassGroup* sNearestGrassGroups[OBJ_GRASS_NEAREST_GROUP_MAX]; +f32 sNearestGrassGroupsDist[OBJ_GRASS_NEAREST_GROUP_MAX]; +ObjGrassElement* sNearestGrassElements[OBJ_GRASS_NEAREST_ELEM_MAX]; +f32 sNearestGrassElementsDistSq[OBJ_GRASS_NEAREST_ELEM_MAX]; #include "overlays/ovl_Obj_Grass/ovl_Obj_Grass.c" @@ -57,35 +59,35 @@ static ColliderCylinderInit sCylinderInit = { { 6, 44, 0, { 0, 0, 0 } }, }; -Vec3f D_809AAB4C[] = { - { 0.0f, 0.707099974155f, 0.707099974155f }, - { 0.707099974155f, 0.707099974155f, 0.0f }, - { 0.0f, 0.707099974155f, -0.707099974155f }, - { -0.707099974155f, 0.707099974155f, 0.0f }, +static Vec3f sUnitDirections[] = { + { 0.0f, 0.7071f, 0.7071f }, + { 0.7071f, 0.7071f, 0.0f }, + { 0.0f, 0.7071f, -0.7071f }, + { -0.7071f, 0.7071f, 0.0f }, }; -s16 D_809AAB7C[] = { 0x6C, 0x66, 0x60, 0x54, 0x42, 0x37, 0x2A, 0x26 }; +static s16 sFragmentScales[] = { 108, 102, 96, 84, 66, 55, 42, 38 }; -s32 func_809A9110(PlayState* play, Vec3f* arg1) { - f32 sp2C; - Vec3f sp20; +s32 func_809A9110(PlayState* play, Vec3f* pos) { + f32 w; + Vec3f projectedPos; - SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, &sp20, &sp2C); + SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, pos, &projectedPos, &w); - if ((play->projectionMtxFDiagonal.z * -130.13191f) < sp20.z) { - if (sp2C < 1.0f) { - sp2C = 1.0f; + if ((play->projectionMtxFDiagonal.z * -130.13191f) < projectedPos.z) { + if (w < 1.0f) { + w = 1.0f; } - if (((fabsf(sp20.x) - (130.13191f * play->projectionMtxFDiagonal.x)) < sp2C) && - ((fabsf(sp20.y) - (130.13191f * play->projectionMtxFDiagonal.y)) < sp2C)) { + if (((fabsf(projectedPos.x) - (130.13191f * play->projectionMtxFDiagonal.x)) < w) && + ((fabsf(projectedPos.y) - (130.13191f * play->projectionMtxFDiagonal.y)) < w)) { return true; } } return false; } -void func_809A91FC(MtxF* matrix) { +void ObjGrass_OverrideMatrixCurrent(MtxF* matrix) { s32 i; MtxF* temp = Matrix_GetCurrent(); f32* tmp = &temp->xx; @@ -96,42 +98,44 @@ void func_809A91FC(MtxF* matrix) { } } -void func_809A92D0(ObjGrassStruct1_1* ptr, PlayState* play) { - if (!(ptr->unk_0E & 0x10)) { - Item_DropCollectibleRandom(play, NULL, &ptr->unk_00, ptr->unk_0E * 0x10); +void ObjGrass_DropCollectible(ObjGrassElement* grassElem, PlayState* play) { + if (!(grassElem->dropTable & 0x10)) { + Item_DropCollectibleRandom(play, NULL, &grassElem->pos, grassElem->dropTable * 0x10); } } -void func_809A9314(ObjGrassStruct1_1* ptr, PlayState* play) { - Vec3f spBC; - Vec3f spB0; +void ObjGrass_SpawnFragments(Vec3f* basePos, PlayState* play) { + Vec3f velocity; + Vec3f pos; s32 i; - Vec3f* ptr2; + Vec3f* dir; - for (i = 0; i < ARRAY_COUNT(D_809AAB4C); i++) { - ptr2 = &D_809AAB4C[i]; + for (i = 0; i < ARRAY_COUNT(sUnitDirections); i++) { + dir = &sUnitDirections[i]; - spB0.x = ptr->unk_00.x + (ptr2->x * 8.0f); - spB0.y = (ptr->unk_00.y + (ptr2->y * 8.0f)) + 10.0f; - spB0.z = ptr->unk_00.z + (ptr2->z * 8.0f); + pos.x = basePos->x + (dir->x * 8.0f); + pos.y = basePos->y + (dir->y * 8.0f) + 10.0f; + pos.z = basePos->z + (dir->z * 8.0f); - spBC.x = (Rand_ZeroOne() - 0.5f) * 8.0f; - spBC.y = Rand_ZeroOne() * 10.0f; - spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f; + velocity.x = (Rand_ZeroOne() - 0.5f) * 8.0f; + velocity.y = Rand_ZeroOne() * 10.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 8.0f; - EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, + sFragmentScales[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, GAMEPLAY_KEEP, + gKakeraLeafMiddleDL); - spB0.x = ptr->unk_00.x + (ptr2->x * 16.0f); - spB0.y = (ptr->unk_00.y + (ptr2->y * 16.0f)) + 10.0f; - spB0.z = ptr->unk_00.z + (ptr2->z * 16.0f); + pos.x = basePos->x + (dir->x * 16.0f); + pos.y = basePos->y + (dir->y * 16.0f) + 10.0f; + pos.z = basePos->z + (dir->z * 16.0f); - spBC.x = (Rand_ZeroOne() - 0.5f) * 6.0f; - spBC.y = Rand_ZeroOne() * 10.0f; - spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f; + velocity.x = (Rand_ZeroOne() - 0.5f) * 6.0f; + velocity.y = Rand_ZeroOne() * 10.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 6.0f; - EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809AAB7C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, + sFragmentScales[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, GAMEPLAY_KEEP, + gKakeraLeafTipDL); } } @@ -141,9 +145,9 @@ void ObjGrass_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.4f); - for (i = 0; i < ARRAY_COUNT(this->unk_2948); i++) { - Collider_InitCylinder(play, &this->unk_2948[i].collider); - Collider_SetCylinder(play, &this->unk_2948[i].collider, &this->actor, &sCylinderInit); + for (i = 0; i < ARRAY_COUNT(this->grassElemColliders); i++) { + Collider_InitCylinder(play, &this->grassElemColliders[i].collider); + Collider_SetCylinder(play, &this->grassElemColliders[i].collider, &this->actor, &sCylinderInit); } this->actor.colChkInfo.mass = MASS_IMMOVABLE; @@ -158,117 +162,121 @@ void ObjGrass_Destroy(Actor* thisx, PlayState* play) { ObjGrass* this = THIS; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_2948); i++) { - Collider_DestroyCylinder(play, &this->unk_2948[i].collider); + for (i = 0; i < ARRAY_COUNT(this->grassElemColliders); i++) { + Collider_DestroyCylinder(play, &this->grassElemColliders[i].collider); } - for (i = 0; i < ARRAY_COUNT(this->unk_3298); i++) { - ObjGrassCarry** ptr = &this->unk_3298[i]; + for (i = 0; i < ARRAY_COUNT(this->grassCarry); i++) { + ObjGrassCarry** grassCarry = &this->grassCarry[i]; - if (*ptr != NULL) { - (*ptr)->unk_190 = 0; - *ptr = NULL; + if (*grassCarry != NULL) { + (*grassCarry)->grassManager = NULL; + *grassCarry = NULL; } } } -void func_809A9790(ObjGrass* this, PlayState* play) { +void ObjGrass_ProcessColliders(ObjGrass* this, PlayState* play) { s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_2948); i++) { - ObjGrassStruct1_1* ptr = this->unk_2948[i].unk_4C; + for (i = 0; i < ARRAY_COUNT(this->grassElemColliders); i++) { + ObjGrassElement* grassElem = this->grassElemColliders[i].entity; - if ((ptr != NULL) && (this->unk_2948[i].collider.base.acFlags & AC_HIT)) { - func_809A9314(ptr, play); - func_809A92D0(ptr, play); - ptr->unk_0F |= 4; - SoundSource_PlaySfxAtFixedWorldPos(play, &ptr->unk_00, 20, NA_SE_EV_PLANT_BROKEN); + if ((grassElem != NULL) && (this->grassElemColliders[i].collider.base.acFlags & AC_HIT)) { + ObjGrass_SpawnFragments(&grassElem->pos, play); + ObjGrass_DropCollectible(grassElem, play); + grassElem->flags |= OBJ_GRASS_ELEM_REMOVED; + SoundSource_PlaySfxAtFixedWorldPos(play, &grassElem->pos, 20, NA_SE_EV_PLANT_BROKEN); } } } -void func_809A983C(ObjGrass* this, PlayState* play) { +void ObjGrass_UpdateGrass(ObjGrass* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 i; s32 j; s32 x; s32 y; - f32 temp_f0; - ObjGrassStruct1* ptr; - ObjGrassStruct1_1* ptr2; - ObjGrassStruct2* ptr3; + f32 distSq; + ObjGrassGroup* grassGroup; s16 yaw; - for (i = 0; i < ARRAY_COUNT(D_809AADC0); i++) { - D_809AADC0[i] = NULL; - D_809AAE10[i] = 422500.0f; + for (i = 0; i < OBJ_GRASS_NEAREST_ELEM_MAX; i++) { + sNearestGrassElements[i] = NULL; + sNearestGrassElementsDistSq[i] = SQ(650.0f); } - for (i = 0; i < ARRAY_COUNT(D_809AADA0); i++) { - D_809AADA0[i] = NULL; - D_809AADB0[i] = 422500.0f; + for (i = 0; i < OBJ_GRASS_NEAREST_GROUP_MAX; i++) { + sNearestGrassGroups[i] = NULL; + sNearestGrassGroupsDist[i] = SQ(650.0f); } - for (i = 0; i < this->unk_2944; i++) { - ptr = &this->unk_144[i]; + for (i = 0; i < this->activeGrassGroups; i++) { + grassGroup = &this->grassGroups[i]; - for (j = 0; j < ptr->unk_FC; j++) { - ptr->unk_0C[j].unk_0F &= (u16)~2; + for (j = 0; j < grassGroup->count; j++) { + grassGroup->elements[j].flags &= (u16)~OBJ_GRASS_ELEM_ANIM; } } - for (i = 0; i < this->unk_2944; i++) { - ptr = &this->unk_144[i]; - temp_f0 = Math3D_Vec3fDistSq(&ptr->unk_00, &player->actor.world.pos); + for (i = 0; i < this->activeGrassGroups; i++) { + grassGroup = &this->grassGroups[i]; + distSq = Math3D_Vec3fDistSq(&grassGroup->homePos, &player->actor.world.pos); - for (j = 0; j < ARRAY_COUNT(D_809AADB0); j++) { - if (temp_f0 < D_809AADB0[j]) { + for (j = 0; j < OBJ_GRASS_NEAREST_GROUP_MAX; j++) { + if (distSq < sNearestGrassGroupsDist[j]) { break; } } - if (j < ARRAY_COUNT(D_809AADB0)) { - for (x = 2; x >= j; x--) { - D_809AADB0[x + 1] = D_809AADB0[x]; - D_809AADA0[x + 1] = D_809AADA0[x]; + if (j < OBJ_GRASS_NEAREST_GROUP_MAX) { + // Insert the grassGroup into the list + + // Shift each element under j that remains in the list down 1 + for (x = OBJ_GRASS_NEAREST_GROUP_MAX - 2; x >= j; x--) { + sNearestGrassGroupsDist[x + 1] = sNearestGrassGroupsDist[x]; + sNearestGrassGroups[x + 1] = sNearestGrassGroups[x]; } - D_809AADB0[j] = temp_f0; - D_809AADA0[j] = ptr; + sNearestGrassGroupsDist[j] = distSq; + sNearestGrassGroups[j] = grassGroup; } } - this->unk_3294 = NULL; + this->carryGrassElem = NULL; - for (i = 0; i < ARRAY_COUNT(D_809AADA0); i++) { - ptr = D_809AADA0[i]; + for (i = 0; i < OBJ_GRASS_NEAREST_GROUP_MAX; i++) { + grassGroup = sNearestGrassGroups[i]; - if (ptr != NULL) { - for (j = 0; j < ptr->unk_FC; j++) { - if (!(ptr->unk_0C[j].unk_0F & 4)) { - temp_f0 = Math3D_Vec3fDistSq(&ptr->unk_0C[j].unk_00, &player->actor.world.pos); + if (grassGroup != NULL) { + for (j = 0; j < grassGroup->count; j++) { + if (!(grassGroup->elements[j].flags & OBJ_GRASS_ELEM_REMOVED)) { + distSq = Math3D_Vec3fDistSq(&grassGroup->elements[j].pos, &player->actor.world.pos); - for (x = 0; x < ARRAY_COUNT(D_809AAE10); x++) { - if (temp_f0 < D_809AAE10[x]) { + for (x = 0; x < OBJ_GRASS_NEAREST_ELEM_MAX; x++) { + if (distSq < sNearestGrassElementsDistSq[x]) { break; } } - if (x < ARRAY_COUNT(D_809AAE10)) { - for (y = 18; y >= x; y--) { - D_809AAE10[y + 1] = D_809AAE10[y]; - D_809AADC0[y + 1] = D_809AADC0[y]; + if (x < OBJ_GRASS_NEAREST_ELEM_MAX) { + // Insert the GrassElement into the list + + // Shift each element under j that remains in the list down 1 + for (y = OBJ_GRASS_NEAREST_ELEM_MAX - 2; y >= x; y--) { + sNearestGrassElementsDistSq[y + 1] = sNearestGrassElementsDistSq[y]; + sNearestGrassElements[y + 1] = sNearestGrassElements[y]; } - D_809AAE10[x] = temp_f0; - D_809AADC0[x] = &ptr->unk_0C[j]; + sNearestGrassElementsDistSq[x] = distSq; + sNearestGrassElements[x] = &grassGroup->elements[j]; - if (temp_f0 < 2500.0f) { + if (distSq < SQ(50.0f)) { yaw = player->actor.shape.rot.y - - Math_Vec3f_Yaw(&player->actor.world.pos, &ptr->unk_0C[j].unk_00); + Math_Vec3f_Yaw(&player->actor.world.pos, &grassGroup->elements[j].pos); if (ABS_ALT(yaw) < 0x2000) { - this->unk_3294 = &ptr->unk_0C[j]; + this->carryGrassElem = &grassGroup->elements[j]; } } } @@ -277,28 +285,29 @@ void func_809A983C(ObjGrass* this, PlayState* play) { } } - for (i = 0; i < ARRAY_COUNT(this->unk_2948); i++) { - ptr3 = &this->unk_2948[i]; + for (i = 0; i < ARRAY_COUNT(this->grassElemColliders); i++) { + ObjGrassCollider* grassCol = &this->grassElemColliders[i]; + ObjGrassElement* grassElem; - ptr3->collider.base.acFlags &= (u16)~AC_HIT; - ptr3->collider.base.ocFlags1 &= (u16)~OC1_HIT; + grassCol->collider.base.acFlags &= (u16)~AC_HIT; + grassCol->collider.base.ocFlags1 &= (u16)~OC1_HIT; - ptr2 = D_809AADC0[i]; - if (ptr2 != NULL) { - ptr3->collider.dim.pos.x = ptr2->unk_00.x; - ptr3->collider.dim.pos.y = ptr2->unk_00.y; - ptr3->collider.dim.pos.z = ptr2->unk_00.z; - CollisionCheck_SetAC(play, &play->colChkCtx, &ptr3->collider.base); - CollisionCheck_SetOC(play, &play->colChkCtx, &ptr3->collider.base); - ptr2->unk_0F |= 2; - ptr3->unk_4C = ptr2; + grassElem = sNearestGrassElements[i]; + if (grassElem != NULL) { + grassCol->collider.dim.pos.x = grassElem->pos.x; + grassCol->collider.dim.pos.y = grassElem->pos.y; + grassCol->collider.dim.pos.z = grassElem->pos.z; + CollisionCheck_SetAC(play, &play->colChkCtx, &grassCol->collider.base); + CollisionCheck_SetOC(play, &play->colChkCtx, &grassCol->collider.base); + grassElem->flags |= OBJ_GRASS_ELEM_ANIM; + grassCol->entity = grassElem; } else { - ptr3->unk_4C = NULL; + grassCol->entity = NULL; } } } -void func_809A9DB8(ObjGrass* this) { +void ObjGrass_CalcAnimationMatrices(ObjGrass* this) { s32 i; s32 pad; f32* ptr; @@ -345,8 +354,8 @@ void func_809A9DB8(ObjGrass* this) { sp6C[6] = (temp_f26 - temp_f22) * temp_f22 * temp_f20 * temp_f16 * 0.0015f; sp6C[7] = (spA4 - temp_f20) * sp94 * sp90 * temp_f16 * 0.0015f; - for (i = 0; i < ARRAY_COUNT(this->unk_2F88); i++) { - ptr = &this->unk_2F88[i].mf[0][0]; + for (i = 0; i < ARRAY_COUNT(this->distortionMtx); i++) { + ptr = &this->distortionMtx[i].mf[0][0]; tempf1 = sp6C[(i + 0) & 7]; tempf2 = sp6C[(i + 1) & 7]; @@ -379,64 +388,65 @@ void func_809A9DB8(ObjGrass* this) { void ObjGrass_Update(Actor* thisx, PlayState* play) { ObjGrass* this = THIS; - func_809A9790(this, play); - func_809A983C(this, play); - func_809A9DB8(this); + ObjGrass_ProcessColliders(this, play); + ObjGrass_UpdateGrass(this, play); + ObjGrass_CalcAnimationMatrices(this); } -void func_809AA278(ObjGrass* this, PlayState* play) { - ObjGrassStruct1* ptr; - ObjGrassStruct1_1* ptr2; +void ObjGrass_InitDraw(ObjGrass* this, PlayState* play) { + ObjGrassGroup* grassGroup; + ObjGrassElement* grassElem; s32 i; s32 j; f32 distSq; - f32 temp_f22; + f32 eyeDist; - for (i = 0; i < this->unk_2944; i++) { - ptr = &this->unk_144[i]; + for (i = 0; i < this->activeGrassGroups; i++) { + grassGroup = &this->grassGroups[i]; - temp_f22 = Math3D_Vec3fDistSq(&ptr->unk_00, &GET_ACTIVE_CAM(play)->eye); + eyeDist = Math3D_Vec3fDistSq(&grassGroup->homePos, &GET_ACTIVE_CAM(play)->eye); - if ((temp_f22 < SQ(1280.0f)) && func_809A9110(play, &ptr->unk_00)) { - ptr->unk_FE |= 1; + if ((eyeDist < SQ(1280.0f)) && func_809A9110(play, &grassGroup->homePos)) { + grassGroup->flags |= OBJ_GRASS_GROUP_DRAW; - for (j = 0; j < ptr->unk_FC; j++) { - ptr2 = &ptr->unk_0C[j]; + for (j = 0; j < grassGroup->count; j++) { + grassElem = &grassGroup->elements[j]; - if (ptr2->unk_0F & 4) { - ptr2->unk_10 = 255; - ptr2->unk_0F &= ~1; + if (grassElem->flags & OBJ_GRASS_ELEM_REMOVED) { + grassElem->alpha = 255; + grassElem->flags &= ~OBJ_GRASS_ELEM_DRAW; } else { - ptr2->unk_0F |= 1; - if (temp_f22 < SQ(980.0f)) { - ptr2->unk_10 = 255; + grassElem->flags |= OBJ_GRASS_ELEM_DRAW; + if (eyeDist < SQ(980.0f)) { + grassElem->alpha = 255; } else { - distSq = Math3D_Vec3fDistSq(&ptr2->unk_00, &GET_ACTIVE_CAM(play)->eye); - if ((distSq <= SQ(1080.0f)) || ((ptr2->unk_0F & 8) && (distSq < SQ(1180.0f)))) { - ptr2->unk_10 = 255; + distSq = Math3D_Vec3fDistSq(&grassElem->pos, &GET_ACTIVE_CAM(play)->eye); + if ((distSq <= SQ(1080.0f)) || + ((grassElem->flags & OBJ_GRASS_ELEM_UNDERWATER) && (distSq < SQ(1180.0f)))) { + grassElem->alpha = 255; } else if (distSq >= SQ(1180.0f)) { - ptr2->unk_10 = 0; + grassElem->alpha = 0; } else { - ptr2->unk_10 = (1180.0f - sqrtf(distSq)) * 2.55f; + grassElem->alpha = (1180.0f - sqrtf(distSq)) * 2.55f; } } } } } else { - ptr->unk_FE &= ~1; + grassGroup->flags &= ~OBJ_GRASS_GROUP_DRAW; } } } -void func_809AA54C(Actor* thisx, PlayState* play2) { +void ObjGrass_DrawOpa(Actor* thisx, PlayState* play2) { ObjGrass* this = THIS; PlayState* play = play2; - Lights* temp_s0; - ObjGrassStruct1* ptr; + Lights* lights; + ObjGrassGroup* grassGroup; s32 i; s32 j; - Vec3s sp70 = { 0, 0, 0 }; - ObjGrassStruct1_1* ptr2; + Vec3s rot = { 0, 0, 0 }; + ObjGrassElement* grassElem; OPEN_DISPS(play->state.gfxCtx); @@ -445,23 +455,23 @@ void func_809AA54C(Actor* thisx, PlayState* play2) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, gObjGrass_D_809AA9F0); - for (i = 0; i < this->unk_2944; i++) { - ptr = &this->unk_144[i]; + for (i = 0; i < this->activeGrassGroups; i++) { + grassGroup = &this->grassGroups[i]; - if (ptr->unk_FE & 1) { - temp_s0 = LightContext_NewLights(&play->lightCtx, play->state.gfxCtx); - Lights_BindAll(temp_s0, play->lightCtx.listHead, &ptr->unk_00, play); - Lights_Draw(temp_s0, play->state.gfxCtx); + if (grassGroup->flags & OBJ_GRASS_GROUP_DRAW) { + lights = LightContext_NewLights(&play->lightCtx, play->state.gfxCtx); + Lights_BindAll(lights, play->lightCtx.listHead, &grassGroup->homePos, play); + Lights_Draw(lights, play->state.gfxCtx); - for (j = 0; j < ptr->unk_FC; j++) { - ptr2 = &ptr->unk_0C[j]; + for (j = 0; j < grassGroup->count; j++) { + grassElem = &grassGroup->elements[j]; - if ((ptr2->unk_0F & 1) && (ptr2->unk_10 == 255)) { - sp70.y = ptr2->unk_0C; - Matrix_SetTranslateRotateYXZ(ptr2->unk_00.x, ptr2->unk_00.y, ptr2->unk_00.z, &sp70); + if ((grassElem->flags & OBJ_GRASS_ELEM_DRAW) && (grassElem->alpha == 255)) { + rot.y = grassElem->rotY; + Matrix_SetTranslateRotateYXZ(grassElem->pos.x, grassElem->pos.y, grassElem->pos.z, &rot); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - if (ptr2->unk_0F & 2) { - func_809A91FC(&this->unk_2F88[j]); + if (grassElem->flags & OBJ_GRASS_ELEM_ANIM) { + ObjGrass_OverrideMatrixCurrent(&this->distortionMtx[j]); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), @@ -475,13 +485,13 @@ void func_809AA54C(Actor* thisx, PlayState* play2) { CLOSE_DISPS(play->state.gfxCtx); } -void func_809AA798(Actor* thisx, PlayState* play) { +void ObjGrass_DrawXlu(Actor* thisx, PlayState* play) { ObjGrass* this = THIS; - ObjGrassStruct1* ptr; - ObjGrassStruct1_1* ptr2; + ObjGrassGroup* grassGroup; + ObjGrassElement* grassElem; s32 i; s32 j; - Vec3s sp6C = { 0, 0, 0 }; + Vec3s rot = { 0, 0, 0 }; OPEN_DISPS(play->state.gfxCtx); @@ -489,21 +499,21 @@ void func_809AA798(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gObjGrass_D_809AAA68); - for (i = 0; i < this->unk_2944; i++) { - ptr = &this->unk_144[i]; + for (i = 0; i < this->activeGrassGroups; i++) { + grassGroup = &this->grassGroups[i]; - if (ptr->unk_FE & 1) { - for (j = 0; j < ptr->unk_FC; j++) { - ptr2 = &ptr->unk_0C[j]; + if (grassGroup->flags & OBJ_GRASS_GROUP_DRAW) { + for (j = 0; j < grassGroup->count; j++) { + grassElem = &grassGroup->elements[j]; - if ((ptr2->unk_0F & 1) && (ptr2->unk_10 > 0) && (ptr2->unk_10 < 255)) { - sp6C.y = ptr2->unk_0C; - Matrix_SetTranslateRotateYXZ(ptr2->unk_00.x, ptr2->unk_00.y, ptr2->unk_00.z, &sp6C); + if ((grassElem->flags & OBJ_GRASS_ELEM_DRAW) && (grassElem->alpha > 0) && (grassElem->alpha < 255)) { + rot.y = grassElem->rotY; + Matrix_SetTranslateRotateYXZ(grassElem->pos.x, grassElem->pos.y, grassElem->pos.z, &rot); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr2->unk_10); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, grassElem->alpha); gSPDisplayList(POLY_XLU_DISP++, gObjGrass_D_809AAAE0); } } @@ -516,7 +526,7 @@ void func_809AA798(Actor* thisx, PlayState* play) { void ObjGrass_Draw(Actor* thisx, PlayState* play) { ObjGrass* this = THIS; - func_809AA278(this, play); - func_809AA54C(thisx, play); - func_809AA798(thisx, play); + ObjGrass_InitDraw(this, play); + ObjGrass_DrawOpa(thisx, play); + ObjGrass_DrawXlu(thisx, play); } diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h index fffcdad4e..f3fb8705d 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h @@ -7,40 +7,52 @@ struct ObjGrass; struct ObjGrassCarry; -typedef struct ObjGrassStruct1_1 { - /* 0x00 */ Vec3f unk_00; - /* 0x0C */ s16 unk_0C; - /* 0x0E */ s8 unk_0E; - /* 0x0F */ u8 unk_0F; - /* 0x10 */ u8 unk_10; -} ObjGrassStruct1_1; // size = 0x14 +#define OBJ_GRASS_NEAREST_GROUP_MAX 4 +#define OBJ_GRASS_NEAREST_ELEM_MAX 20 + +#define OBJ_GRASS_GROUP_ELEM_COUNT_MAX 12 + +#define OBJ_GRASS_GROUP_DRAW 1 + +#define OBJ_GRASS_ELEM_DRAW 1 +#define OBJ_GRASS_ELEM_ANIM 2 +#define OBJ_GRASS_ELEM_REMOVED 4 +#define OBJ_GRASS_ELEM_UNDERWATER 8 + +typedef struct ObjGrassElement { + /* 0x00 */ Vec3f pos; + /* 0x0C */ s16 rotY; + /* 0x0E */ s8 dropTable; + /* 0x0F */ u8 flags; + /* 0x10 */ u8 alpha; +} ObjGrassElement; // size = 0x14 typedef struct { - /* 0x00 */ Vec3f unk_00; - /* 0x0C */ ObjGrassStruct1_1 unk_0C[12]; - /* 0xFC */ s16 unk_FC; - /* 0xFE */ u8 unk_FE; -} ObjGrassStruct1; // size = 0x100 + /* 0x00 */ Vec3f homePos; + /* 0x0C */ ObjGrassElement elements[OBJ_GRASS_GROUP_ELEM_COUNT_MAX]; + /* 0xFC */ s16 count; + /* 0xFE */ u8 flags; +} ObjGrassGroup; // size = 0x100 typedef struct { /* 0x00 */ ColliderCylinder collider; - /* 0x4C */ ObjGrassStruct1_1* unk_4C; -} ObjGrassStruct2; // size = 0x50 + /* 0x4C */ ObjGrassElement* entity; +} ObjGrassCollider; // size = 0x50 typedef struct ObjGrass { /* 0x0000 */ Actor actor; - /* 0x0144 */ ObjGrassStruct1 unk_144[40]; - /* 0x2944 */ s16 unk_2944; - /* 0x2948 */ ObjGrassStruct2 unk_2948[20]; - /* 0x2F88 */ MtxF unk_2F88[12]; + /* 0x0144 */ ObjGrassGroup grassGroups[40]; + /* 0x2944 */ s16 activeGrassGroups; + /* 0x2948 */ ObjGrassCollider grassElemColliders[OBJ_GRASS_NEAREST_ELEM_MAX]; + /* 0x2F88 */ MtxF distortionMtx[OBJ_GRASS_GROUP_ELEM_COUNT_MAX]; /* 0x3288 */ s16 unk_3288; /* 0x328A */ s16 unk_328A; /* 0x328C */ s16 unk_328C; /* 0x328E */ s16 unk_328E; /* 0x3290 */ s16 unk_3290; - /* 0x3292 */ s16 unk_3292; - /* 0x3294 */ ObjGrassStruct1_1* unk_3294; - /* 0x3298 */ struct ObjGrassCarry* unk_3298[2]; + /* 0x3292 */ s16 activeGrassCarry; + /* 0x3294 */ ObjGrassElement* carryGrassElem; + /* 0x3298 */ struct ObjGrassCarry* grassCarry[2]; } ObjGrass; // size = 0x32A0 #endif // Z_OBJ_GRASS_H diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c index 1554a2403..4b9c424f4 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c @@ -17,17 +17,17 @@ void ObjGrassCarry_Init(Actor* thisx, PlayState* play); void ObjGrassCarry_Destroy(Actor* thisx, PlayState* play); void ObjGrassCarry_Update(Actor* thisx, PlayState* play); -void func_809AB3C4(ObjGrassCarry* this); -void func_809AB3D8(ObjGrassCarry* this, PlayState* play); -void func_809AB428(ObjGrassCarry* this); -void func_809AB43C(ObjGrassCarry* this, PlayState* play); -void func_809AB474(ObjGrassCarry* this); -void func_809AB4A8(ObjGrassCarry* this, PlayState* play); -void func_809AB5FC(ObjGrassCarry* this); -void func_809AB610(ObjGrassCarry* this, PlayState* play); -void func_809AB6FC(ObjGrassCarry* this); -void func_809AB77C(ObjGrassCarry* this, PlayState* play); -void func_809ABB7C(Actor* this, PlayState* play); +void ObjGrassCarry_SetupAwaitSpawnManager(ObjGrassCarry* this); +void ObjGrassCarry_AwaitSpawnManager(ObjGrassCarry* this, PlayState* play); +void ObjGrassCarry_SetupIdle(ObjGrassCarry* this); +void ObjGrassCarry_Idle(ObjGrassCarry* this, PlayState* play); +void ObjGrassCarry_Reset(ObjGrassCarry* this); +void ObjGrassCarry_Main(ObjGrassCarry* this, PlayState* play); +void ObjGrassCarry_SetupLiftedUp(ObjGrassCarry* this); +void ObjGrassCarry_LiftedUp(ObjGrassCarry* this, PlayState* play); +void ObjGrassCarry_SetupFall(ObjGrassCarry* this); +void ObjGrassCarry_Fall(ObjGrassCarry* this, PlayState* play); +void ObjGrassCarry_Draw(Actor* this, PlayState* play); ActorInit Obj_Grass_Carry_InitVars = { ACTOR_OBJ_GRASS_CARRY, @@ -61,19 +61,19 @@ static ColliderCylinderInit sCylinderInit = { { 10, 44, 0, { 0, 0, 0 } }, }; -s16 D_809ABBFC = 0; -s16 D_809ABC00 = 0; -s16 D_809ABC04 = 0; -s16 D_809ABC08 = 0; +static s16 sRotSpeedXTarget = 0; +static s16 sRotSpeedX = 0; +static s16 sRotSpeedYTarget = 0; +static s16 sRotSpeedY = 0; -Vec3f D_809ABC0C[] = { +static Vec3f sUnitDirections[] = { { 0.0f, 0.7071f, 0.7071f }, { 0.7071f, 0.7071f, 0.0f }, { 0.0f, 0.7071f, -0.7071f }, { -0.7071f, 0.7071f, 0.0f }, }; -s16 D_809ABC3C[] = { 0x6C, 0x66, 0x60, 0x54, 0x42, 0x37, 0x2A, 0x26 }; +static s16 sFragmentScales[] = { 108, 102, 96, 84, 66, 55, 42, 38 }; static InitChainEntry sInitChain[] = { ICHAIN_F32_DIV1000(gravity, -3200, ICHAIN_CONTINUE), @@ -81,69 +81,71 @@ static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 400, ICHAIN_STOP), }; -void func_809AAE60(ObjGrassCarry* this) { +void ObjGrassCarry_UpdateVelY(ObjGrassCarry* this) { this->actor.velocity.y += this->actor.gravity; if (this->actor.velocity.y < this->actor.terminalVelocity) { this->actor.velocity.y = this->actor.terminalVelocity; } } -void func_809AAE94(Vec3f* arg0, f32 arg1) { - arg1 += ((Rand_ZeroOne() * 0.2f) - 0.1f) * arg1; +void ObjGrassCarry_RandScaleVecToZero(Vec3f* velocity, f32 scale) { + scale += ((Rand_ZeroOne() * 0.2f) - 0.1f) * scale; - arg0->x -= (arg0->x * arg1); - arg0->y -= (arg0->y * arg1); - arg0->z -= (arg0->z * arg1); + velocity->x -= velocity->x * scale; + velocity->y -= velocity->y * scale; + velocity->z -= velocity->z * scale; } -void func_809AAF18(ObjGrassCarry* this) { - func_809AAE60(this); - func_809AAE94(&this->actor.velocity, 0.05f); +void ObjGrassCarry_UpdatePos(ObjGrassCarry* this) { + ObjGrassCarry_UpdateVelY(this); + ObjGrassCarry_RandScaleVecToZero(&this->actor.velocity, 0.05f); Actor_UpdatePos(&this->actor); } -void func_809AAF58(ObjGrassCarry* this, PlayState* play) { +void ObjGrassCarry_UpdateBgCheckInfo(ObjGrassCarry* this, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | UPDBGCHECKINFO_FLAG_80); } -void func_809AAF9C(Vec3f* arg0, s16 arg1, PlayState* play) { - if (!(arg1 & 0x10)) { - Item_DropCollectibleRandom(play, NULL, arg0, arg1 * 0x10); +void ObjGrassCarry_DropCollectible(Vec3f* pos, s16 dropTable, PlayState* play) { + if ((dropTable & 0x10) == 0) { + Item_DropCollectibleRandom(play, NULL, pos, dropTable * 0x10); } } -void func_809AAFE8(Vec3f* arg0, PlayState* play) { - Vec3f spBC; - Vec3f spB0; +void ObjGrassCarry_SpawnFragments(Vec3f* basePos, PlayState* play) { + Vec3f velocity; + Vec3f pos; s32 i; - Vec3f* ptr; + Vec3f* dir; - for (i = 0; i < ARRAY_COUNT(D_809ABC0C); i++) { - ptr = &D_809ABC0C[i]; + for (i = 0; i < ARRAY_COUNT(sUnitDirections); i++) { + dir = &sUnitDirections[i]; - spB0.x = arg0->x + (ptr->x * 8.0f); - spB0.y = arg0->y + (ptr->y * 8.0f) + 10.0f; - spB0.z = arg0->z + (ptr->z * 8.0f); + pos.x = basePos->x + (dir->x * 8.0f); + pos.y = basePos->y + (dir->y * 8.0f) + 10.0f; + pos.z = basePos->z + (dir->z * 8.0f); - spBC.x = (Rand_ZeroOne() - 0.5f) * 8.0f; - spBC.y = Rand_ZeroOne() * 10.0f; - spBC.z = (Rand_ZeroOne() - 0.5f) * 8.0f; + velocity.x = (Rand_ZeroOne() - 0.5f) * 8.0f; + velocity.y = Rand_ZeroOne() * 10.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 8.0f; - EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, 1, gKakeraLeafMiddleDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, + sFragmentScales[(s32)(Rand_ZeroOne() * 111.1f) & 7], 0, 0, 80, -1, GAMEPLAY_KEEP, + gKakeraLeafMiddleDL); - spB0.x = arg0->x + (ptr->x * 16.0f); - spB0.y = arg0->y + (ptr->y * 16.0f) + 10.0f; - spB0.z = arg0->z + (ptr->z * 16.0f); + pos.x = basePos->x + (dir->x * 16.0f); + pos.y = basePos->y + (dir->y * 16.0f) + 10.0f; + pos.z = basePos->z + (dir->z * 16.0f); - spBC.x = (Rand_ZeroOne() - 0.5f) * 6.0f; - spBC.y = Rand_ZeroOne() * 10.0f; - spBC.z = (Rand_ZeroOne() - 0.5f) * 6.0f; + velocity.x = (Rand_ZeroOne() - 0.5f) * 6.0f; + velocity.y = Rand_ZeroOne() * 10.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 6.0f; - EffectSsKakera_Spawn(play, &spB0, &spBC, &spB0, -100, 64, 40, 3, 0, - D_809ABC3C[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, 1, gKakeraLeafTipDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, + sFragmentScales[(s32)(Rand_ZeroOne() * 111.1f) % 7], 0, 0, 80, -1, GAMEPLAY_KEEP, + gKakeraLeafTipDL); } } @@ -154,7 +156,7 @@ void ObjGrassCarry_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = 80; - func_809AB3C4(this); + ObjGrassCarry_SetupAwaitSpawnManager(this); } void ObjGrassCarry_Destroy(Actor* thisx, PlayState* play) { @@ -162,73 +164,69 @@ void ObjGrassCarry_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); - if (this->unk_190 != NULL) { - ObjGrassCarry** carry = &this->unk_190->unk_3298[this->actor.params]; + if (this->grassManager != NULL) { + ObjGrassCarry** carry = &this->grassManager->grassCarry[this->actor.params]; if (this == *carry) { *carry = NULL; - this->unk_190 = NULL; + this->grassManager = NULL; } } } -void func_809AB3C4(ObjGrassCarry* this) { - this->actionFunc = func_809AB3D8; +void ObjGrassCarry_SetupAwaitSpawnManager(ObjGrassCarry* this) { + this->actionFunc = ObjGrassCarry_AwaitSpawnManager; } -void func_809AB3D8(ObjGrassCarry* this, PlayState* play) { - if (this->unk_190 != NULL) { - if (this->actor.params != this->unk_190->unk_3292) { - func_809AB474(this); +void ObjGrassCarry_AwaitSpawnManager(ObjGrassCarry* this, PlayState* play) { + if (this->grassManager != NULL) { + if (this->actor.params != this->grassManager->activeGrassCarry) { + ObjGrassCarry_Reset(this); } else { - func_809AB428(this); + ObjGrassCarry_SetupIdle(this); } } } -void func_809AB428(ObjGrassCarry* this) { - this->actionFunc = func_809AB43C; +void ObjGrassCarry_SetupIdle(ObjGrassCarry* this) { + this->actionFunc = ObjGrassCarry_Idle; } -void func_809AB43C(ObjGrassCarry* this, PlayState* play) { - if (this->actor.params != this->unk_190->unk_3292) { - func_809AB474(this); +void ObjGrassCarry_Idle(ObjGrassCarry* this, PlayState* play) { + if (this->actor.params != this->grassManager->activeGrassCarry) { + ObjGrassCarry_Reset(this); } } -void func_809AB474(ObjGrassCarry* this) { - this->actor.shape.rot.z = 0; - this->actionFunc = func_809AB4A8; - this->unk_194 = NULL; - this->actor.shape.rot.y = this->actor.shape.rot.z; - this->actor.shape.rot.x = this->actor.shape.rot.z; - this->actor.world.rot.z = this->actor.shape.rot.z; - this->actor.world.rot.y = this->actor.shape.rot.z; - this->actor.world.rot.x = this->actor.shape.rot.z; +void ObjGrassCarry_Reset(ObjGrassCarry* this) { + this->actionFunc = ObjGrassCarry_Main; + this->grassElem = NULL; + this->actor.world.rot.x = this->actor.world.rot.y = this->actor.world.rot.z = this->actor.shape.rot.x = + this->actor.shape.rot.y = this->actor.shape.rot.z = 0; } -void func_809AB4A8(ObjGrassCarry* this, PlayState* play) { +void ObjGrassCarry_Main(ObjGrassCarry* this, PlayState* play) { Actor* thisx = &this->actor; if (Actor_HasParent(thisx, play)) { - func_809AB5FC(this); - if (this->unk_194 != NULL) { - this->unk_194->unk_0F |= 4; + ObjGrassCarry_SetupLiftedUp(this); + if (this->grassElem != NULL) { + this->grassElem->flags |= OBJ_GRASS_ELEM_REMOVED; } - thisx->draw = func_809ABB7C; + thisx->draw = ObjGrassCarry_Draw; thisx->shape.shadowDraw = ActorShadow_DrawCircle; thisx->shape.shadowAlpha = 60; thisx->shape.shadowScale = 1.0f; - this->unk_190->unk_3292 ^= 1; + this->grassManager->activeGrassCarry ^= 1; thisx->room = -1; SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT); - } else if (this->unk_190->unk_3294 != NULL) { + } else if (this->grassManager->carryGrassElem != NULL) { Player* player = GET_PLAYER(play); - this->unk_194 = this->unk_190->unk_3294; - Math_Vec3f_Copy(&thisx->world.pos, &this->unk_194->unk_00); - thisx->shape.rot.y = thisx->world.rot.y = this->unk_194->unk_0C; - this->unk_198 = this->unk_194->unk_0E; + this->grassElem = this->grassManager->carryGrassElem; + Math_Vec3f_Copy(&thisx->world.pos, &this->grassElem->pos); + thisx->shape.rot.y = thisx->world.rot.y = this->grassElem->rotY; + this->dropTable = this->grassElem->dropTable; thisx->xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); thisx->playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor); thisx->xyzDistToPlayerSq = SQ(thisx->xzDistToPlayer) + SQ(thisx->playerHeightRel); @@ -237,87 +235,88 @@ void func_809AB4A8(ObjGrassCarry* this, PlayState* play) { } } -void func_809AB5FC(ObjGrassCarry* this) { - this->actionFunc = func_809AB610; +void ObjGrassCarry_SetupLiftedUp(ObjGrassCarry* this) { + this->actionFunc = ObjGrassCarry_LiftedUp; } -void func_809AB610(ObjGrassCarry* this, PlayState* play) { +void ObjGrassCarry_LiftedUp(ObjGrassCarry* this, PlayState* play) { s32 pad; - Vec3f sp30; - s32 sp2C; if (Actor_HasNoParent(&this->actor, play)) { - func_809AB6FC(this); + ObjGrassCarry_SetupFall(this); this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speed; this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speed; this->actor.gravity = -0.1f; this->actor.terminalVelocity = -17.0f; - func_809AAF18(this); - func_809AAF58(this, play); + ObjGrassCarry_UpdatePos(this); + ObjGrassCarry_UpdateBgCheckInfo(this, play); this->actor.gravity = -3.2f; } else { - sp30.x = this->actor.world.pos.x; - sp30.y = this->actor.world.pos.y + 20.0f; - sp30.z = this->actor.world.pos.z; + Vec3f pos; + s32 bgId; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + 20.0f; + pos.z = this->actor.world.pos.z; this->actor.floorHeight = - BgCheck_EntityRaycastFloor5(&play->colCtx, &this->actor.floorPoly, &sp2C, &this->actor, &sp30); + BgCheck_EntityRaycastFloor5(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &pos); } } -void func_809AB6FC(ObjGrassCarry* this) { - this->actionFunc = func_809AB77C; - D_809ABBFC = -0xBB8; - D_809ABC04 = (Rand_ZeroOne() - 0.5f) * 1600.0f; - D_809ABC00 = 0; - D_809ABC08 = 0; - this->unk_19A = 60; +void ObjGrassCarry_SetupFall(ObjGrassCarry* this) { + this->actionFunc = ObjGrassCarry_Fall; + sRotSpeedXTarget = -0xBB8; + sRotSpeedYTarget = (Rand_ZeroOne() - 0.5f) * 1600.0f; + sRotSpeedX = 0; + sRotSpeedY = 0; + this->fallTimer = 60; } -void func_809AB77C(ObjGrassCarry* this, PlayState* play) { - s16 phi_s0; - s32 temp_v0 = (this->collider.base.atFlags & AT_HIT) != 0; - Vec3f sp5C; +void ObjGrassCarry_Fall(ObjGrassCarry* this, PlayState* play) { + s16 angle; + s32 atHit = (this->collider.base.atFlags & AT_HIT) != 0; + Vec3f pos; s32 i; - if (temp_v0) { + if (atHit) { this->collider.base.atFlags &= ~AT_HIT; } - this->unk_19A--; + this->fallTimer--; - if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || temp_v0 || - (this->unk_19A <= 0)) { - func_809AAFE8(&this->actor.world.pos, play); - func_809AAF9C(&this->actor.world.pos, this->unk_198, play); + if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || atHit || + (this->fallTimer <= 0)) { + ObjGrassCarry_SpawnFragments(&this->actor.world.pos, play); + ObjGrassCarry_DropCollectible(&this->actor.world.pos, this->dropTable, play); this->actor.draw = NULL; this->actor.shape.shadowDraw = NULL; - if (this->unk_190 != NULL) { - this->actor.room = this->unk_190->actor.room; + if (this->grassManager != NULL) { + this->actor.room = this->grassManager->actor.room; } if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_PLANT_BROKEN); } - func_809AB428(this); + ObjGrassCarry_SetupIdle(this); return; } if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { - sp5C.y = this->actor.world.pos.y + this->actor.depthInWater; + pos.y = this->actor.world.pos.y + this->actor.depthInWater; - for (phi_s0 = 0, i = 0; i < 4; i++, phi_s0 += 0x4000) { - sp5C.x = (Math_SinS((s32)(Rand_ZeroOne() * 7200.0f) + phi_s0) * 15.0f) + this->actor.world.pos.x; - sp5C.z = (Math_CosS((s32)(Rand_ZeroOne() * 7200.0f) + phi_s0) * 15.0f) + this->actor.world.pos.z; - EffectSsGSplash_Spawn(play, &sp5C, NULL, NULL, 0, 190); + for (angle = 0, i = 0; i < 4; i++, angle += 0x4000) { + pos.x = (Math_SinS((s32)(Rand_ZeroOne() * 7200.0f) + angle) * 15.0f) + this->actor.world.pos.x; + pos.z = (Math_CosS((s32)(Rand_ZeroOne() * 7200.0f) + angle) * 15.0f) + this->actor.world.pos.z; + EffectSsGSplash_Spawn(play, &pos, NULL, NULL, 0, 190); } - sp5C.x = this->actor.world.pos.x; - sp5C.z = this->actor.world.pos.z; + pos.x = this->actor.world.pos.x; + pos.z = this->actor.world.pos.z; - EffectSsGSplash_Spawn(play, &sp5C, NULL, NULL, 0, 280); - EffectSsGRipple_Spawn(play, &sp5C, 300, 700, 0); + EffectSsGSplash_Spawn(play, &pos, NULL, NULL, 0, 280); + EffectSsGRipple_Spawn(play, &pos, 300, 700, 0); this->actor.terminalVelocity = -3.0f; this->actor.velocity.x *= 0.1f; @@ -325,20 +324,20 @@ void func_809AB77C(ObjGrassCarry* this, PlayState* play) { this->actor.velocity.z *= 0.1f; this->actor.gravity *= 0.5f; - D_809ABC00 = D_809ABC00 >> 1; - D_809ABBFC = D_809ABBFC >> 1; - D_809ABC08 = D_809ABC08 >> 1; - D_809ABC04 = D_809ABC04 >> 1; + sRotSpeedX >>= 1; + sRotSpeedXTarget >>= 1; + sRotSpeedY >>= 1; + sRotSpeedYTarget >>= 1; this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH; SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L); } - Math_StepToS(&D_809ABC00, D_809ABBFC, 0x1F4); - Math_StepToS(&D_809ABC08, D_809ABC04, 0xAA); - this->actor.shape.rot.x += D_809ABC00; - this->actor.shape.rot.y += D_809ABC08; - func_809AAF18(this); - func_809AAF58(this, play); + Math_StepToS(&sRotSpeedX, sRotSpeedXTarget, 0x1F4); + Math_StepToS(&sRotSpeedY, sRotSpeedYTarget, 0xAA); + this->actor.shape.rot.x += sRotSpeedX; + this->actor.shape.rot.y += sRotSpeedY; + ObjGrassCarry_UpdatePos(this); + ObjGrassCarry_UpdateBgCheckInfo(this, play); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); @@ -348,8 +347,8 @@ void func_809AB77C(ObjGrassCarry* this, PlayState* play) { void ObjGrassCarry_Update(Actor* thisx, PlayState* play) { ObjGrassCarry* this = THIS; - if (this->unk_190 == NULL) { - if ((this->actionFunc != func_809AB610) && (this->actionFunc != func_809AB77C)) { + if (this->grassManager == NULL) { + if ((this->actionFunc != ObjGrassCarry_LiftedUp) && (this->actionFunc != ObjGrassCarry_Fall)) { Actor_Kill(&this->actor); return; } @@ -358,6 +357,6 @@ void ObjGrassCarry_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); } -void func_809ABB7C(Actor* this, PlayState* play) { +void ObjGrassCarry_Draw(Actor* this, PlayState* play) { Gfx_DrawDListOpa(play, gKusaBushType1DL); } diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h index fa870305e..3f20ea1c1 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h @@ -5,17 +5,17 @@ struct ObjGrassCarry; struct ObjGrass; -struct ObjGrassStruct1_1; +struct ObjGrassElement; typedef void (*ObjGrassCarryActionFunc)(struct ObjGrassCarry*, PlayState*); typedef struct ObjGrassCarry { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ struct ObjGrass* unk_190; - /* 0x194 */ struct ObjGrassStruct1_1* unk_194; - /* 0x198 */ s16 unk_198; - /* 0x19A */ s16 unk_19A; + /* 0x190 */ struct ObjGrass* grassManager; + /* 0x194 */ struct ObjGrassElement* grassElem; + /* 0x198 */ s16 dropTable; + /* 0x19A */ s16 fallTimer; /* 0x19C */ ObjGrassCarryActionFunc actionFunc; } ObjGrassCarry; // size = 0x1A0 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 c57ed608f..dfb5d0527 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 @@ -1,38 +1,168 @@ /* * File: z_obj_grass_unit.c * Overlay: ovl_Obj_Grass_Unit - * Description: Spawner for circular patch of grass + * Description: Initializes a pattern of grass to be passed to an ObjGrass instance. + * + * ObjGrassUnit instances are intended to be spawned from room data so that just one ObjGrass instance manages the grass + * for that room. When a room with ObjGrassUnit spawns loads, it allocates ovl_Obj_Grass_Unit and creates N instances of + * ObjGrassUnit. The first instance processed initializes sGrassManager, then all instances live on that cycle pass type + * and position data to that ObjGrass instance before calling Actor_Kill. Since ovl_Obj_Grass_Unit uses + * ALLOCTYPE_NORMAL, it is deleted and loses the reference to the newly created ObjGrass. This allows for ObjGrassUnit + * spawned in a different room to be associated to a new ObjGrass instance. */ #include "z_obj_grass_unit.h" +#include "overlays/actors/ovl_Obj_Grass/z_obj_grass.h" +#include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h" #define FLAGS 0x00000000 #define THIS ((ObjGrassUnit*)thisx) -void ObjGrassUnit_Init(Actor* thisx, PlayState* play); +void ObjGrassUnit_Init(Actor* this, PlayState* play2); -#if 0 ActorInit Obj_Grass_Unit_InitVars = { - ACTOR_OBJ_GRASS_UNIT, - ACTORCAT_BG, - FLAGS, - GAMEPLAY_FIELD_KEEP, - sizeof(ObjGrassUnit), - (ActorFunc)ObjGrassUnit_Init, - (ActorFunc)Actor_Noop, - (ActorFunc)Actor_Noop, - (ActorFunc)NULL, + ACTOR_OBJ_GRASS_UNIT, ACTORCAT_BG, FLAGS, + GAMEPLAY_FIELD_KEEP, sizeof(ObjGrassUnit), (ActorFunc)ObjGrassUnit_Init, + (ActorFunc)Actor_Noop, (ActorFunc)Actor_Noop, (ActorFunc)NULL, }; -#endif +// Neat circular pattern with a single bush in the center +static VecPolar sGrassPatternCircle[] = { + { 0.0f, 0x0000 }, { 80.0f, 0x0000 }, { 80.0f, 0x2000 }, { 80.0f, 0x4000 }, { 80.0f, 0x6000 }, + { 80.0f, 0x8000 }, { 80.0f, 0xA000 }, { 80.0f, 0xC000 }, { 80.0f, 0xE000 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Grass_Unit/func_809ABDE0.s") +// "Random" looking pattern +static VecPolar sGrassPatternMixed[] = { + { 40.0f, 0x0666 }, { 40.0f, 0x2CCC }, { 40.0f, 0x5999 }, { 40.0f, 0x8667 }, { 20.0f, 0xC000 }, { 80.0f, 0x1333 }, + { 80.0f, 0x4000 }, { 80.0f, 0x6CCC }, { 80.0f, 0x9334 }, { 80.0f, 0xACCD }, { 80.0f, 0xC667 }, { 60.0f, 0xE000 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Grass_Unit/func_809ABE54.s") +typedef struct { + /* 0x0 */ s32 count; + /* 0x4 */ VecPolar* positions; +} ObjGrassUnitPattern; // size = 0x8 -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Grass_Unit/func_809ABEC4.s") +static ObjGrassUnitPattern sGrassPatterns[2] = { + { ARRAY_COUNT(sGrassPatternCircle), sGrassPatternCircle }, + { ARRAY_COUNT(sGrassPatternMixed), sGrassPatternMixed }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Grass_Unit/func_809ABF38.s") +ObjGrass* sGrassManager = NULL; +ObjGrassCarry* sGrassCarry0 = NULL; +ObjGrassCarry* sGrassCarry1 = NULL; +s32 sInitialized = false; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Grass_Unit/ObjGrassUnit_Init.s") +s32 ObjGrassUnit_SpawnObjGrass(Actor* this, PlayState* play) { + sGrassManager = (ObjGrass*)Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_GRASS, 0.0f, 0.0f, 0.0f, 0, 0, 0, -1); + if (sGrassManager != NULL) { + sGrassManager->actor.room = this->room; + return true; + } + return false; +} + +s32 ObjGrassUnit_SpawnObjGrassCarry0(Actor* this, PlayState* play) { + sGrassCarry0 = + (ObjGrassCarry*)Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_GRASS_CARRY, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0); + if (sGrassCarry0 != NULL) { + sGrassCarry0->actor.room = this->room; + return true; + } + return false; +} + +s32 ObjGrassUnit_SpawnObjGrassCarry1(Actor* this, PlayState* play) { + sGrassCarry1 = + (ObjGrassCarry*)Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_GRASS_CARRY, 0.0f, 0.0f, 0.0f, 0, 0, 0, 1); + if (sGrassCarry1 != NULL) { + sGrassCarry1->actor.room = this->room; + return true; + } + return false; +} + +s32 ObjGrassUnit_IsUnderwater(PlayState* play, Vec3f* pos) { + WaterBox* waterBox; + f32 ySurface; + s32 bgId; + + if (WaterBox_GetSurfaceImpl(play, &play->colCtx, pos->x, pos->z, &ySurface, &waterBox, &bgId) && + (pos->y < ySurface)) { + return true; + } + return false; +} + +void ObjGrassUnit_Init(Actor* this, PlayState* play2) { + PlayState* play = play2; + ObjGrassGroup* grassGroup; + ObjGrass* grassManager; + f32 homePosYSum; + f32 tmp; + s32 i; + VecPolar* grassPos; + CollisionPoly* poly; + s32 bgId; + ObjGrassElement* grassElem; + ObjGrassUnitPattern* grassPattern; + s8 dropTable = OBJGRASSUNIT_GET_DROPTABLE(this); + + if ((sGrassManager == NULL) && !ObjGrassUnit_SpawnObjGrass(this, play)) { + Actor_Kill(this); + return; + } + if ((sGrassCarry0 == NULL) && ObjGrassUnit_SpawnObjGrassCarry0(this, play)) { + sGrassCarry0->grassManager = sGrassManager; + } + if ((sGrassCarry1 == NULL) && ObjGrassUnit_SpawnObjGrassCarry1(this, play)) { + sGrassCarry1->grassManager = sGrassManager; + } + if (!sInitialized && (sGrassManager != NULL) && (sGrassCarry0 != NULL) && (sGrassCarry1 != NULL)) { + sInitialized = true; + sGrassManager->grassCarry[0] = sGrassCarry0; + sGrassManager->grassCarry[1] = sGrassCarry1; + sGrassCarry0->grassManager = sGrassManager; + sGrassCarry1->grassManager = sGrassManager; + } + + grassManager = sGrassManager; + if (sGrassManager->activeGrassGroups >= ARRAY_COUNT(sGrassManager->grassGroups)) { + Actor_Kill(this); + return; + } + + homePosYSum = 0.0f; + grassGroup = &grassManager->grassGroups[sGrassManager->activeGrassGroups]; + grassGroup->count = 0; + grassPattern = &sGrassPatterns[OBJGRASSUNIT_GET_PATTERN(this)]; + + for (i = 0; i < grassPattern->count; i++) { + grassElem = &grassGroup->elements[grassGroup->count]; + grassPos = &grassPattern->positions[i]; + + grassElem->pos.x = (Math_CosS((this->home.rot.y + grassPos->angle)) * grassPos->distance) + this->home.pos.x; + grassElem->pos.y = this->home.pos.y + 100.0f; + grassElem->pos.z = (Math_SinS((this->home.rot.y + grassPos->angle)) * grassPos->distance) + this->home.pos.z; + + grassElem->pos.y = BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, this, &grassElem->pos); + tmp = grassElem->pos.y - this->home.pos.y; + if ((fabsf(tmp) < 80.0f) && (grassElem->pos.y > BGCHECK_Y_MIN)) { + grassGroup->count++; + grassElem->rotY = (s16)(Rand_Next() >> 0x10); + grassElem->dropTable = dropTable; + if (ObjGrassUnit_IsUnderwater(play, &grassElem->pos)) { + grassElem->flags |= OBJ_GRASS_ELEM_UNDERWATER; + } + homePosYSum += grassElem->pos.y; + } + } + if (grassGroup->count > 0) { + grassManager->activeGrassGroups++; + grassGroup->homePos.x = this->home.pos.x; + grassGroup->homePos.y = (homePosYSum / grassGroup->count); + grassGroup->homePos.z = this->home.pos.z; + } + Actor_Kill(this); +} diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h index 58a8a427a..7c24d1e58 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h +++ b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h @@ -3,6 +3,9 @@ #include "global.h" +#define OBJGRASSUNIT_GET_DROPTABLE(thisx) (((thisx)->params >> 8) & 0x1F) +#define OBJGRASSUNIT_GET_PATTERN(thisx) ((thisx)->params & 1) + struct ObjGrassUnit; typedef struct ObjGrassUnit { From 2c182bf7e35f6b7ac7853071875343f591c37510 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Wed, 11 Oct 2023 15:44:20 +0200 Subject: [PATCH 65/74] object_icicle (#1421) * Naming * naming * naming * top comment --- assets/xml/objects/object_icicle.xml | 7 ++++--- src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/assets/xml/objects/object_icicle.xml b/assets/xml/objects/object_icicle.xml index ac0000471..d3275aa46 100644 --- a/assets/xml/objects/object_icicle.xml +++ b/assets/xml/objects/object_icicle.xml @@ -1,7 +1,8 @@  + - - - + + + diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c index a8eea2641..df6245c68 100644 --- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c +++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c @@ -69,7 +69,7 @@ void BgIcicle_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(thisx, sInitChain); DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_icicle_Colheader_000294); + DynaPolyActor_LoadMesh(play, &this->dyna, &gIcicleCol); Collider_InitAndSetCylinder(play, &this->collider, thisx, &sCylinderInit); Collider_UpdateCylinder(thisx, &this->collider); @@ -242,5 +242,5 @@ void BgIcicle_Update(Actor* thisx, PlayState* play) { } void BgIcicle_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_icicle_DL_0000D0); + Gfx_DrawDListOpa(play, gIcicleDL); } From 2e344b8d15e37dd0fa95309b0c7a3d7a5c70b45c Mon Sep 17 00:00:00 2001 From: CodeOverFLow Date: Fri, 13 Oct 2023 09:59:49 +0200 Subject: [PATCH 66/74] Boyo (#1341) * updated variables.txt * continue investigation * format to style * matching more asm * still more asm matching * finally matching * matching even more * add rodata * match more asm for Update * matching 99.58% of ObjBoyo_Update * matched ObjBoyo_Update * some cleanup * formatted * review: remove ACTOR_COLLISION_HANDLING_CASES define * review: fix main functions parameters * review: fix collision function signatures * review: fix ObjBoyo_FindCollidedActor parameters * review: better formatting for InitVars * review: fix ObjBoyoCollisionHandler typedef * review: fix segmented AnimatedMaterial * review: fix static ColliderCylinderInit * review: disassembled initchain * review: fix collision functions * review: fix functions.txt * review: fix variables.txt * review: clean z_obj_boyo.h * review: fix ObjBoyo_Destroy * remove fake variable from ObjBoyo_Init * review: rematch FindCollidedActor * review: make asm match again * review: update spec file * review: fix spec file * review: remove static D_*** * review: fix bad logic to find collided actor * review: fix ObjBoyo size (local make is now OK) * review: rename collision handlers array * review: use constant * review: clean PushPlayer function * review: fix LSP bad renaming * review: use GET_PLAYER macro * review: remove ugly pointer deref * review: replace += 1 with ++ * review: return NULL to emphasize it is a pointer * review: check against NULL instead of 0 * review: remove unnecessary casts * review: use constants * review: remove unnecessary include * review: rename variables + fix assembly matching * review: change ++i to i++ * review: fix inline comments * review: replace != with < in for loop --- spec | 3 +- src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c | 191 +++++++++++++++++- src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h | 16 +- tools/disasm/functions.txt | 8 +- tools/disasm/variables.txt | 7 +- 5 files changed, 201 insertions(+), 24 deletions(-) diff --git a/spec b/spec index 7aab83ed8..dd160ae09 100644 --- a/spec +++ b/spec @@ -2108,8 +2108,7 @@ beginseg name "ovl_Obj_Boyo" compress include "build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.o" - include "build/data/ovl_Obj_Boyo/ovl_Obj_Boyo.data.o" - include "build/data/ovl_Obj_Boyo/ovl_Obj_Boyo.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Boyo/ovl_Obj_Boyo_reloc.o" endseg beginseg 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 e5e53000a..9e791f7ae 100644 --- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c +++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c @@ -1,4 +1,7 @@ #include "z_obj_boyo.h" +#include "overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "objects/object_boyo/object_boyo.h" #define FLAGS (ACTOR_FLAG_10) @@ -9,7 +12,11 @@ void ObjBoyo_Destroy(Actor* thisx, PlayState* play2); void ObjBoyo_Update(Actor* thisx, PlayState* play2); void ObjBoyo_Draw(Actor* thisx, PlayState* play); -/* +void ObjBoyo_PushPlayer(ObjBoyo* this, Actor* actor); +void ObjBoyo_PushPirate(ObjBoyo* this, Actor* actor); +void ObjBoyo_ExplodeBomb(ObjBoyo* this, Actor* actor); +Actor* ObjBoyo_FindCollidedActor(ObjBoyo* this, PlayState* play, s32* index); + const ActorInit Obj_Boyo_InitVars = { ACTOR_OBJ_BOYO, ACTORCAT_PROP, @@ -19,22 +26,184 @@ const ActorInit Obj_Boyo_InitVars = { (ActorFunc)ObjBoyo_Init, (ActorFunc)ObjBoyo_Destroy, (ActorFunc)ObjBoyo_Update, - (ActorFunc)ObjBoyo_Draw + (ActorFunc)ObjBoyo_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Init.s") +typedef void (*ObjBoyoCollisionHandler)(ObjBoyo* this, Actor* actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Destroy.s") +typedef struct ObjBoyoUnkStruct { + /* 0x0 */ s16 id; + /* 0x4 */ ObjBoyoCollisionHandler colHandler; +} ObjBoyoUnkStruct; // size = 0x8 -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5DC0.s") +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_TYPE_PLAYER | AC_HARD | AC_ON, + OC1_TYPE_2 | OC1_TYPE_1 | OC1_TYPE_PLAYER | OC1_ON, + OC2_TYPE_2, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0x01CBFFBE, 0x00, 0x00 }, + TOUCH_NONE, + BUMP_ON, + OCELEM_ON, + }, + { + 60, + 140, + 0, + { 0, 0, 0 }, + }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5DE0.s") +static InitChainEntry sInitChain[] = { + ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5E14.s") +static ObjBoyoUnkStruct sCollisionHandlers[] = { + { ACTOR_PLAYER, ObjBoyo_PushPlayer }, + { ACTOR_EN_KAIZOKU, ObjBoyo_PushPirate }, + { ACTOR_EN_BOM, ObjBoyo_ExplodeBomb }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5E24.s") +void ObjBoyo_Init(Actor* thisx, PlayState* play) { + ObjBoyo* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Update.s") + Actor_ProcessInitChain(&this->actor, sInitChain); + Collider_InitCylinder(play, &this->collider); + Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); + Collider_UpdateCylinder(&this->actor, &this->collider); + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + this->animatedMaterial = Lib_SegmentedToVirtual(&object_boyo_Matanimheader_000E88); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Draw.s") +void ObjBoyo_Destroy(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + ObjBoyo* this = THIS; + + Collider_DestroyCylinder(play, &this->collider); +} + +void ObjBoyo_PushPlayer(ObjBoyo* this, Actor* actor) { + Player* player = (Player*)actor; + + player->pushedSpeed = 30.0f; + player->pushedYaw = this->actor.yawTowardsPlayer; +} + +void ObjBoyo_PushPirate(ObjBoyo* this, Actor* actor) { + EnKaizoku* kaizoku = (EnKaizoku*)actor; + + kaizoku->unk_2F0 = 30.0f; + kaizoku->unk_2F4 = Actor_WorldYawTowardActor(&this->actor, &kaizoku->picto.actor); +} + +void ObjBoyo_ExplodeBomb(ObjBoyo* this, Actor* actor) { + EnBom* bom = (EnBom*)actor; + + bom->timer = 0; +} + +/* + * Find the Actor we collided with. + */ +Actor* ObjBoyo_FindCollidedActor(ObjBoyo* this, PlayState* play, s32* index) { + Actor* collidedActor; + ObjBoyoUnkStruct* iter; + s32 i; + + if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) { + *index = 0; + return &GET_PLAYER(play)->actor; + } + iter = sCollisionHandlers + 1; + if (this->collider.base.ocFlags1 & OC1_HIT) { + collidedActor = this->collider.base.oc; + for (i = 1; i < 3; i++) { + if (iter->id == collidedActor->id) { + *index = i; + return collidedActor; + } + iter++; + } + } + return NULL; +} + +void ObjBoyo_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + ObjBoyo* this = THIS; + Actor* collidedActor; + s32 index; + + collidedActor = ObjBoyo_FindCollidedActor(this, play, &index); + + if (collidedActor != NULL) { + sCollisionHandlers[index].colHandler(this, collidedActor); + // TODO: find out what all of these are. + + this->unk194 = 0x64; + this->unk196 = 3; + this->unk198 = 0.01f; + this->unk19C = 0.03f; + this->unk1A4 = 0x3F40; + this->unk1A6 = 0x7D0; + this->unk1A8 = 0; + this->unk1A0 = 0.03f; + this->unk1AA = 0x2DF7; + this->unk1AC = 0x258; + } + + if (this->unk194 > 0) { + // compute new scaling + // this computation might help finding what those values are. + + this->unk194 -= this->unk196; + this->unk1AA += this->unk1AC; + this->unk1A8 += this->unk1AA; + + this->actor.scale.x = this->actor.scale.z = + (Math_CosS(this->unk1A8 + this->unk1A4) * (f32)this->unk194 * this->unk19C * this->unk198) + 0.1f; + + this->actor.scale.y = + (Math_CosS(this->unk1A8 + this->unk1A6) * (f32)this->unk194 * this->unk1A0 * this->unk198) + 0.1f; + } else { + Actor_SetScale(&this->actor, 0.1f); + if (this->collider.base.acFlags & AC_HIT) { + // TODO: find out what all of these are. + + this->unk194 = 0x1E; + this->unk196 = 2; + this->unk198 = 0.033333335f; + this->unk19C = 0.012f; + this->unk1A0 = 0.006f; + this->unk1A4 = 0x3F40; + this->unk1A6 = 0x7D0; + this->unk1A8 = 0; + this->unk1AA = 0x3A98; + this->unk1AC = 0x640; + } + } + this->collider.base.acFlags &= ~AC_HIT; + this->collider.base.ocFlags1 &= ~OC1_HIT; + this->collider.base.ocFlags2 &= ~OC2_HIT_PLAYER; + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + if (this->actor.xzDistToPlayer < 2000.0f) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } +} + +void ObjBoyo_Draw(Actor* thisx, PlayState* play) { + ObjBoyo* this = THIS; + + AnimatedMat_Draw(play, this->animatedMaterial); + Gfx_DrawDListOpa(play, object_boyo_DL_000300); +} diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h index feb95dcd1..eb1184a40 100644 --- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h +++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h @@ -3,11 +3,21 @@ #include "global.h" -struct ObjBoyo; - typedef struct ObjBoyo { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x6C]; + /* 0x144 */ ColliderCylinder collider; + /* 0x190 */ AnimatedMaterial* animatedMaterial; + /* 0x194 */ s16 unk194; + /* 0x196 */ s16 unk196; + /* 0x198 */ f32 unk198; + /* 0x19C */ f32 unk19C; + /* 0x1A0 */ f32 unk1A0; + /* 0x1A4 */ s16 unk1A4; + /* 0x1A6 */ s16 unk1A6; + /* 0x1A8 */ s16 unk1A8; + /* 0x1AA */ s16 unk1AA; + /* 0x1AC */ s16 unk1AC; + /* 0x1AE */ s16 unk1AE; } ObjBoyo; // size = 0x1B0 #endif // Z_OBJ_BOYO_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 85b13487c..9ad15cf7d 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8743,10 +8743,10 @@ 0x809A5B50:("ObjArmos_Draw",), 0x809A5D10:("ObjBoyo_Init",), 0x809A5D94:("ObjBoyo_Destroy",), - 0x809A5DC0:("func_809A5DC0",), - 0x809A5DE0:("func_809A5DE0",), - 0x809A5E14:("func_809A5E14",), - 0x809A5E24:("func_809A5E24",), + 0x809A5DC0:("ObjBoyo_PushPlayer",), + 0x809A5DE0:("ObjBoyo_PushPirate",), + 0x809A5E14:("ObjBoyo_ExplodeBomb",), + 0x809A5E24:("ObjBoyo_FindCollidedActor",), 0x809A5E98:("ObjBoyo_Update",), 0x809A610C:("ObjBoyo_Draw",), 0x809A6280:("EnGrasshopper_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b427905c9..7fd394acc 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9366,10 +9366,9 @@ 0x809A5BF0:("D_809A5BF0","f32","",0x4), 0x809A5BF4:("D_809A5BF4","f32","",0x4), 0x809A6150:("Obj_Boyo_InitVars","UNK_TYPE1","",0x1), - 0x809A6170:("D_809A6170","UNK_TYPE1","",0x1), - 0x809A619C:("D_809A619C","UNK_TYPE1","",0x1), - 0x809A61B0:("D_809A61B0","UNK_TYPE1","",0x1), - 0x809A61B4:("D_809A61B4","UNK_TYPE2","",0x2), + 0x809A6170:("sCylinderInit","ColliderCylinderInit","",0x1), + 0x809A619C:("sInitChain","InitChainEntry","[]",0x4), + 0x809A61AC:("gCollisionHandling","ObjBoyoUnkStruct","[]",0x20), 0x809A61D0:("D_809A61D0","f32","",0x4), 0x809A61D4:("D_809A61D4","f32","",0x4), 0x809A61D8:("D_809A61D8","f32","",0x4), From 01d581641786b25fc88762bb679abada38191326 Mon Sep 17 00:00:00 2001 From: Wimmer <71473855+Wimmerrad@users.noreply.github.com> Date: Fri, 13 Oct 2023 13:50:00 +0200 Subject: [PATCH 67/74] obj_big_fwall (#1435) * Big Fire Wall Big fire wall.xml / Z en encount3.c update * RingOfFire update --- assets/xml/objects/object_big_fwall.xml | 5 +++-- src/overlays/actors/ovl_En_Encount3/z_en_encount3.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/xml/objects/object_big_fwall.xml b/assets/xml/objects/object_big_fwall.xml index bb8b838be..f1becbe8e 100644 --- a/assets/xml/objects/object_big_fwall.xml +++ b/assets/xml/objects/object_big_fwall.xml @@ -1,6 +1,7 @@  + - - + + diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index 931e8c6d4..fa37bcb38 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -199,7 +199,7 @@ void EnEncount3_Draw(Actor* thisx, PlayState* play) { Matrix_Scale(this->unk168, this->unk174, this->unk168, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, object_big_fwall_DL_0009A0); + gSPDisplayList(POLY_XLU_DISP++, gRingOfFireDL); Matrix_Pop(); CLOSE_DISPS(play->state.gfxCtx); From a03335d325bae37b72beb90f2ad4aab957541e1f Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Fri, 13 Oct 2023 19:04:36 +0200 Subject: [PATCH 68/74] ovl_Door_Spiral decompiled (#1432) * data * some matching * all funcs * improvements * improvements * improvements * small clean up --- spec | 3 +- .../actors/ovl_Door_Spiral/z_door_spiral.c | 234 ++++++++++++++++-- .../actors/ovl_Door_Spiral/z_door_spiral.h | 14 +- 3 files changed, 232 insertions(+), 19 deletions(-) diff --git a/spec b/spec index dd160ae09..9b7dcc1fb 100644 --- a/spec +++ b/spec @@ -2079,8 +2079,7 @@ beginseg name "ovl_Door_Spiral" compress include "build/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.o" - include "build/data/ovl_Door_Spiral/ovl_Door_Spiral.data.o" - include "build/data/ovl_Door_Spiral/ovl_Door_Spiral.reloc.o" + include "build/src/overlays/actors/ovl_Door_Spiral/ovl_Door_Spiral_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c index 6c7d32152..0370023a8 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c @@ -21,8 +21,17 @@ void DoorSpiral_Destroy(Actor* thisx, PlayState* play); void DoorSpiral_Update(Actor* thisx, PlayState* play); void DoorSpiral_Draw(Actor* thisx, PlayState* play); -/* -const ActorInit Door_Spiral_InitVars = { +void DoorSpiral_SetupAction(DoorSpiral* this, DoorSpiralActionFunc actionFunc); +s32 func_809A2B70(DoorSpiral* this, PlayState* play); +u8 func_809A2BF8(PlayState* play); +f32 func_809A2E08(PlayState* play, DoorSpiral* this, f32 arg2, f32 arg3, f32 arg4); +void func_809A2DB0(DoorSpiral* this, PlayState* play); +void func_809A2FF8(DoorSpiral* this, PlayState* play); +void func_809A2DB0(DoorSpiral* this, PlayState* play); +void func_809A3098(DoorSpiral* this, PlayState* play); +s32 func_809A2EA0(DoorSpiral* this, PlayState* play); + +ActorInit Door_Spiral_InitVars = { ACTOR_DOOR_SPIRAL, ACTORCAT_DOOR, FLAGS, @@ -31,30 +40,223 @@ const ActorInit Door_Spiral_InitVars = { (ActorFunc)DoorSpiral_Init, (ActorFunc)DoorSpiral_Destroy, (ActorFunc)DoorSpiral_Update, - (ActorFunc)DoorSpiral_Draw + (ActorFunc)DoorSpiral_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2B60.s") +typedef struct { + /* 0x0 */ Gfx* dLists[2]; // represents a staircase up or down + /* 0x8 */ u32 unk_08; + /* 0x9 */ u8 unk_09; + /* 0xA */ u8 translateZ; + /* 0xB */ u8 unk_0B; + /* 0xC */ u8 unk_0C; +} SpiralInfo; // size = 0x10 -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2B70.s") +SpiralInfo sSpiralInfoTable[] = { + { { NULL, NULL }, 0, 130, 12, 50, 15 }, + { { gameplay_dangeon_keep_DL_0219E0, gameplay_dangeon_keep_DL_01D980 }, 0, 130, 12, 50, 15 }, + { { object_numa_obj_DL_004448, object_numa_obj_DL_0007A8 }, 0, 130, 12, 50, 15 }, + { { object_numa_obj_DL_0051B8, object_numa_obj_DL_0014C8 }, 0, 130, 12, 50, 15 }, + { { object_hakugin_obj_DL_009278, object_hakugin_obj_DL_006128 }, 0, 130, 12, 50, 15 }, + { { object_ikana_obj_DL_013EA8, object_ikana_obj_DL_012B70 }, 0, 130, 12, 50, 15 }, + { { object_ikninside_obj_DL_000EA0, object_ikninside_obj_DL_000590 }, 0, 130, 12, 50, 15 }, + { { object_danpei_object_DL_002110, object_danpei_object_DL_0012C0 }, 0, 130, 12, 50, 15 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2BF8.s") +typedef struct { + /* 0x0 */ s16 objectId; + /* 0x2 */ u8 index; +} SpiralObjectInfo; // size = 0x4 -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Init.s") +SpiralObjectInfo sSpiralObjectInfoTable[] = { + { GAMEPLAY_KEEP, 0 }, { GAMEPLAY_DANGEON_KEEP, 1 }, { OBJECT_NUMA_OBJ, 2 }, { OBJECT_HAKUGIN_OBJ, 4 }, + { OBJECT_IKANA_OBJ, 5 }, { OBJECT_DANPEI_OBJECT, 7 }, { OBJECT_IKNINSIDE_OBJ, 6 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Destroy.s") +typedef struct { + /* 0x0 */ s16 sceneId; + /* 0x2 */ u8 index; +} SpiralSceneInfo; // size = 0x4 -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2DB0.s") +SpiralSceneInfo sSpiralSceneInfoTable[] = { + { SCENE_MITURIN, 2 }, { SCENE_HAKUGIN, 3 }, { SCENE_INISIE_N, 4 }, { SCENE_INISIE_R, 4 }, + { SCENE_DANPEI2TEST, 5 }, { SCENE_IKNINSIDE, 6 }, { SCENE_CASTLE, 6 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2E08.s") +static InitChainEntry sInitChain[] = { + ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2EA0.s") +void DoorSpiral_SetupAction(DoorSpiral* this, DoorSpiralActionFunc actionFunc) { + this->actionFunc = actionFunc; + this->unk14A = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2FF8.s") +s32 func_809A2B70(DoorSpiral* this, PlayState* play) { + SpiralObjectInfo* spiralObjectInfo = &sSpiralObjectInfoTable[this->unk147]; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A3098.s") + this->unk148 = spiralObjectInfo->index; + if ((this->unk148 == 7) || ((this->unk148 == 2) && play->roomCtx.curRoom.enablePosLights)) { + if (this->unk148 == 2) { + this->unk148 = 3; + } + this->actor.flags |= ACTOR_FLAG_10000000; + } + DoorSpiral_SetupAction(this, func_809A2FF8); + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Update.s") +u8 func_809A2BF8(PlayState* play) { + SpiralSceneInfo* spiralSceneInfo = sSpiralSceneInfoTable; + s32 i; + u8 var_v1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Draw.s") + for (i = 0; i < ARRAY_COUNT(sSpiralSceneInfoTable); i++) { + if (play->sceneId == spiralSceneInfo->sceneId) { + break; + } + spiralSceneInfo++; + } + if (i < ARRAY_COUNT(sSpiralSceneInfoTable)) { + var_v1 = spiralSceneInfo->index; + } else { + var_v1 = (Object_GetSlot(&play->objectCtx, GAMEPLAY_DANGEON_KEEP) > OBJECT_SLOT_NONE) ? 1 : 0; + } + return var_v1; +} + +void DoorSpiral_Init(Actor* thisx, PlayState* play) { + DoorSpiral* this = THIS; + s32 transitionId = DOOR_GET_TRANSITION_ID(thisx); + s8 objectSlot; + + if (this->actor.room != play->doorCtx.transitionActorList[transitionId].sides[0].room) { + Actor_Kill(&this->actor); + return; + } + Actor_ProcessInitChain(&this->actor, sInitChain); + this->type = DOORSPIRAL_GET_TYPE(thisx); + this->direction = DOORSPIRAL_GET_DIRECTION(thisx); + this->unk147 = func_809A2BF8(play); + objectSlot = Object_GetSlot(&play->objectCtx, sSpiralObjectInfoTable[this->unk147].objectId); + this->objectSlot = objectSlot; + if (objectSlot <= OBJECT_SLOT_NONE) { + Actor_Kill(&this->actor); + return; + } + DoorSpiral_SetupAction(this, func_809A2DB0); + Actor_SetFocus(&this->actor, 60.0f); +} + +void DoorSpiral_Destroy(Actor* thisx, PlayState* play) { + s32 transitionId = DOOR_GET_TRANSITION_ID(thisx); + + play->doorCtx.transitionActorList[transitionId].id = -play->doorCtx.transitionActorList[transitionId].id; +} + +void func_809A2DB0(DoorSpiral* this, PlayState* play) { + if (Object_IsLoaded(&play->objectCtx, this->objectSlot)) { + this->actor.objectSlot = this->objectSlot; + func_809A2B70(this, play); + } +} + +f32 func_809A2E08(PlayState* play, DoorSpiral* this, f32 arg2, f32 arg3, f32 arg4) { + Player* player = GET_PLAYER(play); + Vec3f point; + Vec3f offset; + + point.x = player->actor.world.pos.x; + point.y = player->actor.world.pos.y + arg2; + point.z = player->actor.world.pos.z; + + Actor_OffsetOfPointInActorCoords(&this->actor, &offset, &point); + + if ((arg3 < fabsf(offset.x)) || (arg4 < fabsf(offset.y))) { + return FLT_MAX; + } else { + return offset.z; + } +} + +s32 func_809A2EA0(DoorSpiral* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + if (!Player_InCsMode(play)) { + SpiralInfo* spiralInfo = &sSpiralInfoTable[this->unk148]; + f32 temp_fv0 = func_809A2E08(play, this, 0.0f, spiralInfo->unk_0B, spiralInfo->unk_0C); + + if (fabsf(temp_fv0) < 64.0f) { + s16 var_v0 = player->actor.shape.rot.y - this->actor.shape.rot.y; + + if (temp_fv0 > 0.0f) { + var_v0 = 0x8000 - var_v0; + } + if (ABS_ALT(var_v0) < 0x3000) { + return (temp_fv0 >= 0.0f) ? 1.0f : -1.0f; + } + } + } + return 0; +} + +void func_809A2FF8(DoorSpiral* this, PlayState* play) { + Player* player; + u32 transitionId; + + if (this->shouldClimb) { + DoorSpiral_SetupAction(this, func_809A3098); + } else if (func_809A2EA0(this, play) != 0) { + player = GET_PLAYER(play); + player->doorType = PLAYER_DOORTYPE_STAIRCASE; + player->doorDirection = this->direction; + player->doorActor = &this->actor; + transitionId = DOOR_GET_TRANSITION_ID(&this->actor); + player->doorNext = (play->doorCtx.transitionActorList[transitionId].params >> 0xA); + func_80122F28(player); + } +} + +void func_809A3098(DoorSpiral* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + if (!(player->stateFlags1 & PLAYER_STATE1_20000000)) { + DoorSpiral_SetupAction(this, func_809A2DB0); + this->shouldClimb = false; + } +} + +void DoorSpiral_Update(Actor* thisx, PlayState* play) { + DoorSpiral* this = THIS; + Player* player = GET_PLAYER(play); + + if (!(player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_400 | PLAYER_STATE1_10000000)) || + (this->actionFunc == func_809A2DB0)) { + this->actionFunc(this, play); + } +} + +void DoorSpiral_Draw(Actor* thisx, PlayState* play) { + s32 pad; + DoorSpiral* this = THIS; + + if (this->actor.objectSlot == this->objectSlot) { + SpiralInfo* spiralInfo = &sSpiralInfoTable[this->unk148]; + Gfx* dList = spiralInfo->dLists[this->direction]; + + if (dList != NULL) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, spiralInfo->dLists[this->direction]); + + CLOSE_DISPS(play->state.gfxCtx); + } + } +} diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h index af4f27aea..6d9aac7e6 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h @@ -2,13 +2,25 @@ #define Z_DOOR_SPIRAL_H #include "global.h" +#include "z64door.h" struct DoorSpiral; +typedef void (*DoorSpiralActionFunc)(struct DoorSpiral*, PlayState*); + +#define DOORSPIRAL_GET_TYPE(thisx) (((thisx)->params >> 8) & 0x3) +#define DOORSPIRAL_GET_DIRECTION(thisx) (((thisx)->params >> 7) & 0x1) + typedef struct DoorSpiral { /* 0x000 */ Actor actor; /* 0x144 */ u8 shouldClimb; - /* 0x145 */ UNK_TYPE1 unk_145[0xB]; + /* 0x145 */ s8 type; + /* 0x146 */ u8 direction; // represents a staircase up or down + /* 0x147 */ u8 unk147; + /* 0x148 */ u8 unk148; + /* 0x149 */ s8 objectSlot; + /* 0x14A */ s8 unk14A; + /* 0x14C */ DoorSpiralActionFunc actionFunc; } DoorSpiral; // size = 0x150 #endif // Z_DOOR_SPIRAL_H From 576cf6964cf5155ac208e6cebb5f8d5cb53120bd Mon Sep 17 00:00:00 2001 From: Wimmer <71473855+Wimmerrad@users.noreply.github.com> Date: Fri, 13 Oct 2023 19:23:09 +0200 Subject: [PATCH 69/74] Obj_visiblock (#1422) * Obj_visiblock Object for the Lens of Truth Platforms * Update assets/xml/objects/object_visiblock.xml DList update Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update assets/xml/objects/object_visiblock.xml Tex outname update Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update z_obj_visiblock.c DList name update * Revert "Update assets/xml/objects/object_visiblock.xml " This reverts commit 228d6e8914d1a9df7f996809bd876b44130ddf86. * Revert "Update assets/xml/objects/object_visiblock.xml " This reverts commit 53a8786f269e60899408946283e2e55513890486. * Update object_visiblock.xml --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_visiblock.xml | 9 +++++---- src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/xml/objects/object_visiblock.xml b/assets/xml/objects/object_visiblock.xml index d714338fc..cae048322 100644 --- a/assets/xml/objects/object_visiblock.xml +++ b/assets/xml/objects/object_visiblock.xml @@ -1,8 +1,9 @@  + - - - - + + + + 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 9859d9c0f..c685f2836 100644 --- a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c +++ b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c @@ -39,7 +39,7 @@ void ObjVisiblock_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_visiblock_Colheader_000AD0); + DynaPolyActor_LoadMesh(play, &this->dyna, &gLensOfTruthPlatformCol); } void ObjVisiblock_Destroy(Actor* thisx, PlayState* play) { @@ -49,5 +49,5 @@ void ObjVisiblock_Destroy(Actor* thisx, PlayState* play) { } void ObjVisiblock_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListXlu(play, object_visiblock_DL_000140); + Gfx_DrawDListXlu(play, gLensOfTruthPlatformDL); } From 93713a1da05ba0c728a0da3eb07d281d700341eb Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 14 Oct 2023 07:39:10 +1100 Subject: [PATCH 70/74] Audio Sequences Decompiled & Documented (z_obj_sound OK, more code_8019AF00.c) (#1407) * import audio docs * cleanup * SEQ_SCREEN_WEIGHTED_DIST * PR * PR --- include/functions.h | 22 +- spec | 3 +- src/audio/code_8019AF00.c | 481 +++++++++++++++++- src/code/z_actor.c | 4 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 4 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 6 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 20 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 10 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 10 +- .../actors/ovl_Obj_Sound/z_obj_sound.c | 52 +- .../actors/ovl_Obj_Sound/z_obj_sound.h | 15 +- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 2 +- tools/sizes/code_functions.csv | 32 +- 15 files changed, 583 insertions(+), 112 deletions(-) diff --git a/include/functions.h b/include/functions.h index 74b593152..829291c25 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1292,21 +1292,13 @@ void Audio_SetBgmVolumeOn(void); void func_801A0204(s8 seqId); void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer); void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData); -// void func_801A1290(void); -// void func_801A1348(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); -// void func_801A13BC(void); -// void func_801A153C(void); -// void func_801A17F4(void); -// void func_801A1904(void); -// void func_801A1A10(void); -// void func_801A1A8C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -void func_801A1D44(Vec3f* vec, u8 seqId, f32 arg2); -void func_801A1DB8(Vec3f* vec, u8 seqId, f32 arg2); -// void func_801A1E0C(void); -void func_801A1F00(u8 arg0, u16 seqId); -void func_801A1F88(void); -void func_801A1FB4(u8 playerIndex, Vec3f* pos, u16 seqId, f32 maxDist); -// void func_801A2090(void); +void Audio_PlayObjSoundBgm(Vec3f* pos, s8 seqId); +void Audio_PlayObjSoundFanfare(Vec3f* pos, s8 seqId); +void Audio_PlaySubBgmAtPos(Vec3f* pos, u8 seqId, f32 maxDist); +void Audio_PlaySubBgmAtPosWithFilter(Vec3f* pos, u8 seqId, f32 arg2); +void Audio_PlaySequenceAtDefaultPos(u8 seqPlayerIndex, u16 seqId); +void Audio_StopSequenceAtDefaultPos(void); +void Audio_PlaySequenceAtPos(u8 seqPlayerIndex, Vec3f* pos, u16 seqId, f32 maxDist); void func_801A246C(u8 param_1, u8 param_2); void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne); void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne); diff --git a/spec b/spec index 9b7dcc1fb..6cd76563c 100644 --- a/spec +++ b/spec @@ -2000,8 +2000,7 @@ beginseg name "ovl_Obj_Sound" compress include "build/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.o" - include "build/data/ovl_Obj_Sound/ovl_Obj_Sound.data.o" - include "build/data/ovl_Obj_Sound/ovl_Obj_Sound.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Sound/ovl_Obj_Sound_reloc.o" endseg beginseg diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index dcefd2eae..5fb24860f 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -77,10 +77,10 @@ void Audio_PlayAmbience(u8 ambienceId); void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 volume); void Audio_UpdateRiverSoundVolumes(void); -void func_801A1290(void); -void func_801A1904(void); -void func_801A1E0C(void); -void func_801A2090(void); +void Audio_UpdateObjSoundProperties(void); +void Audio_UpdateObjSoundFanfare(void); +void Audio_UpdateSubBgmAtPos(void); +void Audio_UpdateSequenceAtPos(void); void Audio_UpdateSceneSequenceResumePoint(void); void func_801A312C(void); void func_801A3AC0(void); @@ -116,7 +116,14 @@ u8 sRiverSoundBgmTimer; u8 sFanfareState; u16 sFanfareSeqId; u8 sMuteOnlySfxAndAmbienceSeq; -u8 sAllPlayersMutedExceptOcaAndSys; +u8 sAllPlayersMutedExceptSystemAndOcarina; + +typedef enum { + /* 0 */ AUDIO_PAUSE_STATE_CLOSED, + /* 1 */ AUDIO_PAUSE_STATE_CLOSING, + /* 2 */ AUDIO_PAUSE_STATE_OPEN +} AudioPauseState; + u8 sAudioPauseState; u8 sSpatialSeqIsActive[4]; u8 sSequenceFilter[8 * 4]; @@ -237,6 +244,10 @@ Vec3f* sRiverSoundBgmPos = NULL; f32 sRiverSoundXZDistToPlayer = 2000.0f; u8 sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX; +// Weights distance strongest by depth (z), weaker by left/right screen (x), and weakest by top/bottom screen (y) +#define SEQ_SCREEN_WEIGHTED_DIST(projectedPos) \ + (sqrtf(SQ((projectedPos)->z) + ((SQ((projectedPos)->x) / 4.0f) + (SQ((projectedPos)->y) / 6.0f)))) + // Allows enemy bgm #define SEQ_FLAG_ENEMY (1 << 0) @@ -3639,11 +3650,11 @@ void Audio_Update(void) { Audio_UpdateSceneSequenceResumePoint(); func_801A312C(); Audio_UpdateSfxVolumeTransition(); - func_801A1E0C(); - func_801A1904(); - func_801A2090(); + Audio_UpdateSubBgmAtPos(); + Audio_UpdateObjSoundFanfare(); + Audio_UpdateSequenceAtPos(); func_801A3AC0(); - func_801A1290(); + Audio_UpdateObjSoundProperties(); Audio_ResetRequestedSceneSeqId(); AudioSfx_ProcessRequests(); AudioSeq_ProcessSeqCmds(); @@ -4870,37 +4881,455 @@ void Audio_SplitBgmChannels(s8 volumeSplit) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0E44.s") +void Audio_SetSequenceProperties(u8 seqPlayerIndex, Vec3f* projectedPos, s16 flags, f32 minDist, f32 maxDist, + f32 maxVolume, f32 minVolume) { + f32 dist; + f32 volume; + s8 surroundEffectIndex; + s8 pan; + s32 pad; -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1290.s") + // calculating surround sound effect from screen depth + if (projectedPos->z > 0.0f) { + if (projectedPos->z > 100.0f) { + surroundEffectIndex = 0; + } else { + surroundEffectIndex = ((100.0f - projectedPos->z) / 100.0f) * 64.0f; + } + } else { + if (projectedPos->z < -100.0f) { + surroundEffectIndex = 0x7F; + } else { + surroundEffectIndex = (s8)((-projectedPos->z / 100.0f) * 64.0f) + 0x3F; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1348.s") + // calculating pan from left-right screen position + if (projectedPos->x > 0.0f) { + if (projectedPos->x > 200.0f) { + pan = 0x6C; + } else { + pan = (s8)((projectedPos->x / 200.0f) * 45.0f) + 0x3F; + } + } else { + if (projectedPos->x < -200.0f) { + pan = 0x14; + } else { + pan = (s8)(((projectedPos->x + 200.0f) / 200.0f) * 44.0f) + 0x14; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A13BC.s") + // Calculate weighted volume + dist = SEQ_SCREEN_WEIGHTED_DIST(projectedPos); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A153C.s") + if (dist > maxDist) { + volume = minVolume; + } else if (dist < minDist) { + volume = 1.0f; + } else { + volume = (((maxDist - dist) / (maxDist - minDist)) * (1.0f - minVolume)) + minVolume; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A17F4.s") + AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(seqPlayerIndex, 0xFFFF); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1904.s") + if (flags & 1) { + AUDIOCMD_CHANNEL_SET_SURROUND_EFFECT_INDEX(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, surroundEffectIndex); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1A10.s") + if (flags & 2) { + AUDIOCMD_CHANNEL_SET_PAN(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, pan); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1A8C.s") + if (flags & 4) { + AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0x7F); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1D44.s") + // applies filter, stores result in sSequenceFilter + if (flags & 8) { + // Uses new filter gBandPassFilterData + AUDIOCMD_CHANNEL_SET_FILTER(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0x54, + ((u32)&sSequenceFilter[0] & ~0xF) + 0x10); + } else { + // Identity Filter + AUDIOCMD_CHANNEL_SET_FILTER(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0, ((u32)&sSequenceFilter[0] & ~0xF) + 0x10); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1DB8.s") + if (flags & 0x10) { + AUDIOCMD_CHANNEL_SET_GAIN(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0x7F); + } else { + AUDIOCMD_CHANNEL_SET_GAIN(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1E0C.s") + if (flags & 0x20) { + AUDIOCMD_CHANNEL_SET_VOL_SCALE(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, maxVolume * volume); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1F00.s") + if (flags & 0x40) { + AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 0x40); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1F88.s") + if (flags & 0x80) { + AUDIOCMD_CHANNEL_SET_REVERB_INDEX(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 1); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A1FB4.s") + if (flags & 0x100) { + AUDIOCMD_CHANNEL_SET_REVERB_VOLUME(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, 55); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2090.s") +// ======== BEGIN Z_OBJ_SOUND FUNCTIONS ======== + +/** + * Used for Main Bgm and Fanfares + */ +void Audio_UpdateObjSoundProperties(void) { + if (sObjSoundPlayerIndex != SEQ_PLAYER_INVALID) { + if ((AudioSeq_GetActiveSeqId(sObjSoundPlayerIndex) != NA_BGM_FINAL_HOURS) && + AudioSeq_IsSeqCmdNotQueued((sObjSoundPlayerIndex << 24) + NA_BGM_FINAL_HOURS, + SEQCMD_OP_MASK | SEQCMD_ASYNC_ACTIVE | SEQCMD_SEQPLAYER_MASK | + SEQCMD_SEQID_MASK) && + !sIsFinalHoursOrSoaring) { + Audio_SetSequenceProperties(sObjSoundPlayerIndex, &sObjSoundPos, sObjSoundFlags, sObjSoundMinDist, + sObjSoundMaxDist, sObjSoundMaxVol, sObjSoundMinVol); + } + sObjSoundPlayerIndex = SEQ_PLAYER_INVALID; + } +} + +/** + * Used for Main Bgm and Fanfares + */ +void Audio_SetObjSoundProperties(u8 seqPlayerIndex, Vec3f* pos, s16 flags, f32 minDist, f32 maxDist, f32 maxVolume, + f32 minVolume) { + sObjSoundPlayerIndex = seqPlayerIndex; + sObjSoundPos.x = pos->x; + sObjSoundPos.y = pos->y; + sObjSoundPos.z = pos->z; + sObjSoundFlags = flags; + sObjSoundMinDist = minDist; + sObjSoundMaxDist = maxDist; + sObjSoundMaxVol = maxVolume; + sObjSoundMinVol = minVolume; +} + +void Audio_StartObjSoundFanfare(u8 seqPlayerIndex, Vec3f* pos, s8 seqId, u16 seqIdOffset) { + s32 pad[3]; + u32 mask; + + if ((AudioSeq_GetActiveSeqId(seqPlayerIndex) == NA_BGM_FINAL_HOURS) || + !AudioSeq_IsSeqCmdNotQueued((seqPlayerIndex << 0x18) + NA_BGM_FINAL_HOURS, + SEQCMD_OP_MASK | SEQCMD_ASYNC_ACTIVE | SEQCMD_SEQPLAYER_MASK | SEQCMD_SEQID_MASK) || + sIsFinalHoursOrSoaring) { + sIsFinalHoursOrSoaring = true; + } else if (pos != NULL) { + if ((seqId != (s8)(AudioSeq_GetActiveSeqId(seqPlayerIndex) & 0xFFFF)) && + !gAudioCtx.seqPlayers[seqPlayerIndex].enabled && (sObjSoundMainBgmSeqId == NA_BGM_GENERAL_SFX)) { + + mask = 0xFFFF; + + SEQCMD_PLAY_SEQUENCE(seqPlayerIndex, ((((AudioThread_NextRandom() % 30) & 0xFF) + 1)), + ((seqId & mask) + seqIdOffset)); + sObjSoundMainBgmSeqId = seqId; + } + + Audio_SetObjSoundProperties(seqPlayerIndex, pos, 0x7F, 320.0f, 1280.0f, 1.0f, 0.0f); + } else { + SEQCMD_STOP_SEQUENCE(seqPlayerIndex, 5); + } +} + +void Audio_PlayObjSoundBgm(Vec3f* pos, s8 seqId) { + s32 pad[2]; + u16 sp36; + s32 sp2C; + u16 seqId0 = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN); + u32 temp_a0; + + if ((seqId0 == NA_BGM_FINAL_HOURS) || + !AudioSeq_IsSeqCmdNotQueued(NA_BGM_FINAL_HOURS, + SEQCMD_OP_MASK | SEQCMD_ASYNC_ACTIVE | SEQCMD_SEQPLAYER_MASK | SEQCMD_SEQID_MASK) || + sIsFinalHoursOrSoaring) { + sIsFinalHoursOrSoaring = true; + return; + } + + if (seqId0 == NA_BGM_SONG_OF_SOARING) { + sIsFinalHoursOrSoaring = true; + } + + if (pos != NULL) { + if (seqId == NA_BGM_ASTRAL_OBSERVATORY) { + + if ((seqId != (u8)(seqId0 & 0xFF)) && !sAllPlayersMutedExceptSystemAndOcarina) { + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, (u16)seqId); + sObjSoundMainBgmSeqId = seqId; + } else if ((seqId == (u8)(seqId0 & 0xFF)) && (sObjSoundMainBgmSeqId == NA_BGM_GENERAL_SFX)) { + sObjSoundMainBgmSeqId = seqId; + } + + Audio_SetObjSoundProperties(SEQ_PLAYER_BGM_MAIN, pos, 0x20, 100.0f, 1500.0f, 0.9f, 0.0f); + } else { + if (sObjSoundMainBgmSeqId == NA_BGM_GENERAL_SFX) { + temp_a0 = ((((AudioThread_NextRandom() % 30) & 0xFF) + 1) << 0x10) | ((u16)seqId + 0x7F00); + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, temp_a0); + sObjSoundMainBgmSeqId = seqId; + } + + if (seqId == NA_BGM_MILK_BAR_DUPLICATE) { + Audio_SetObjSoundProperties(SEQ_PLAYER_BGM_MAIN, pos, 0x1E3, 0.0f, 600.0f, 0.9f, 0.55f); + } else if (seqId == NA_BGM_MILK_BAR) { + Audio_SetObjSoundProperties(SEQ_PLAYER_BGM_MAIN, pos, 0x1FF, 0.0f, 600.0f, 0.9f, 0.55f); + } else { + Audio_SetObjSoundProperties(SEQ_PLAYER_BGM_MAIN, pos, 0x3F, 0.0f, 600.0f, 0.9f, 0.55f); + } + } + } else { + if (sObjSoundMainBgmSeqId == NA_BGM_ASTRAL_OBSERVATORY) { + AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(SEQ_PLAYER_BGM_MAIN, 0xFFFF); + AUDIOCMD_CHANNEL_SET_VOL_SCALE(SEQ_PLAYER_BGM_MAIN, AUDIOCMD_ALL_CHANNELS, 1.0f); + SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 10, NA_BGM_CAVERN); + } else { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 5); + } + + sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX; + } +} + +void Audio_PlayObjSoundFanfare(Vec3f* pos, s8 seqId) { + s32 requestFanfare = false; + s32 pad; + + if (sObjSoundFanfareSeqId == NA_BGM_GENERAL_SFX) { + // No spatial fanfare is currently playing + requestFanfare = true; + } else if (SEQ_SCREEN_WEIGHTED_DIST(pos) < SEQ_SCREEN_WEIGHTED_DIST(&sObjSoundFanfarePos)) { + // The spatial fanfare requested is closer than the spatial fanfare currently playing + requestFanfare = true; + } + + if (requestFanfare) { + sObjSoundFanfarePos.x = pos->x; + sObjSoundFanfarePos.y = pos->y; + sObjSoundFanfarePos.z = pos->z; + sObjSoundFanfareSeqId = seqId; + sObjSoundFanfareRequested = true; + } +} + +void Audio_UpdateObjSoundFanfare(void) { + if (sObjSoundFanfareRequested && (sAudioPauseState == AUDIO_PAUSE_STATE_CLOSED)) { + if (sObjSoundFanfareSeqId != NA_BGM_GENERAL_SFX) { + Audio_StartObjSoundFanfare(SEQ_PLAYER_FANFARE, &sObjSoundFanfarePos, sObjSoundFanfareSeqId, 0); + + if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) { + func_801A3038(); + } + + if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) && + (AudioSeq_GetActiveSeqId(SEQ_PLAYER_AMBIENCE) == NA_BGM_DISABLED)) { + Audio_PlayAmbience(AMBIENCE_ID_09); + } + + sAudioCutsceneFlag = true; + } else { + Audio_StartObjSoundFanfare(SEQ_PLAYER_FANFARE, NULL, sObjSoundFanfareSeqId, 0); + if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, 0); + } + sObjSoundFanfareRequested = false; + sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX; + sAudioCutsceneFlag = false; + } + sObjSoundFanfareSeqId = NA_BGM_GENERAL_SFX; + } +} + +// ======== END Z_OBJ_SOUND FUNCTIONS ======== + +void Audio_StopSequenceAtPos(u8 seqPlayerIndex, u8 volumeFadeTimer) { + SEQCMD_STOP_SEQUENCE((u32)seqPlayerIndex, 20); + if ((seqPlayerIndex == SEQ_PLAYER_BGM_SUB) && (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED)) { + AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, volumeFadeTimer); + Audio_SplitBgmChannels(0); + } +} + +void Audio_StartSubBgmAtPos(u8 seqPlayerIndex, Vec3f* projectedPos, u8 seqId, u8 flags, f32 minDist, f32 maxDist, + f32 arg6) { + f32 dist = SEQ_SCREEN_WEIGHTED_DIST(projectedPos); + u8 targetVolume; + u16 seqId0 = AudioSeq_GetActiveSeqId(seqPlayerIndex); + f32 relVolume; + s32 pad; + + if (dist > maxDist) { + if ((u8)seqId0 == seqId) { + Audio_StopSequenceAtPos(seqPlayerIndex, 10); + sSpatialSeqIsActive[seqPlayerIndex] = false; + } + return; + } + + if ((!gAudioCtx.seqPlayers[seqPlayerIndex].enabled && !sAllPlayersMutedExceptSystemAndOcarina) || + (seqId0 == (NA_BGM_ENEMY | 0x800))) { + if (seqPlayerIndex == SEQ_PLAYER_BGM_SUB) { + AudioSeq_SetVolumeScale(seqPlayerIndex, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 1); + } + + SEQCMD_PLAY_SEQUENCE((u32)seqPlayerIndex, 1, seqId); + + sSpatialSeqIsActive[seqPlayerIndex] = true; + } + + Audio_SetSequenceProperties(seqPlayerIndex, projectedPos, flags, minDist, maxDist, 1.0, 0.05f); + + if ((seqPlayerIndex == SEQ_PLAYER_BGM_SUB) && (gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].enabled == true)) { + + if (dist > maxDist) { + relVolume = 1.0f; + } else if (dist < minDist) { + relVolume = 0.0f; + } else { + relVolume = 1.0f - ((maxDist - dist) / (maxDist - minDist)); + } + + targetVolume = (u8)(relVolume * 127.0f); + + AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, targetVolume, 10); + Audio_SplitBgmChannels(0x7F - targetVolume); + } +} + +/** + * sSpatialSeqNoFilterPos takes priority over sSpatialSeqFilterPos + * Used only by guru guru for song of storms + */ +void Audio_PlaySubBgmAtPos(Vec3f* pos, u8 seqId, f32 maxDist) { + if (gAudioSpecId != 0xC) { + sSpatialSeqNoFilterPos.x = pos->x; + sSpatialSeqNoFilterPos.y = pos->y; + sSpatialSeqNoFilterPos.z = pos->z; + sSpatialSeqSeqId = seqId; + sSpatialSeqMaxDist = maxDist; + sSpatialSeqFlags |= 2; // Only update volume + sSpatialSubBgmFadeTimer = 4; + } +} + +// Used only by guru guru for song of storms in stock pot from hallway or neighboring room +void Audio_PlaySubBgmAtPosWithFilter(Vec3f* pos, u8 seqId, f32 maxDist) { + sSpatialSeqFilterPos.x = pos->x; + sSpatialSeqFilterPos.y = pos->y; + sSpatialSeqFilterPos.z = pos->z; + sSpatialSeqSeqId = seqId; + //! @bug Did not set sSpatialSeqMaxDist = maxDist; This will use the previously set value of sSpatialSeqMaxDist + sSpatialSeqFlags |= 1; // Update with volume and filter + sSpatialSubBgmFadeTimer = 4; +} + +// Another bgm by pos, less customization +void Audio_UpdateSubBgmAtPos(void) { + if (sSpatialSubBgmFadeTimer != 0) { + if (sSpatialSeqFlags & 2) { + // Affects only volume + Audio_StartSubBgmAtPos(SEQ_PLAYER_BGM_SUB, &sSpatialSeqNoFilterPos, sSpatialSeqSeqId, 0x20, 100.0f, + sSpatialSeqMaxDist, 1.0f); + } else { + // Set volume with band-pass filter + Audio_StartSubBgmAtPos(SEQ_PLAYER_BGM_SUB, &sSpatialSeqFilterPos, sSpatialSeqSeqId, 0x28, 100.0f, + sSpatialSeqMaxDist, 1.0f); + } + + sSpatialSubBgmFadeTimer--; + if (sSpatialSubBgmFadeTimer == 0) { + Audio_StopSequenceAtPos(SEQ_PLAYER_BGM_SUB, 10); + } + + sSpatialSeqFlags = 0; + } +} + +/** + * Play sequence at the default center of the screen. Does not check for final hours or soaring bgms playing + * Used only by minifrog for the frog song + */ +void Audio_PlaySequenceAtDefaultPos(u8 seqPlayerIndex, u16 seqId) { + if (!sAudioCutsceneFlag && (gAudioSpecId != 0xC)) { + sSpatialSeqFilterPos.x = gSfxDefaultPos.x; + sSpatialSeqFilterPos.y = gSfxDefaultPos.y; + sSpatialSeqFilterPos.z = gSfxDefaultPos.z; + sSpatialSeqMaxDist = 10000.0f; + sSpatialSeqFadeTimer = 128; + sSpatialSeqSeqId = seqId; + sSpatialSeqPlayerIndex = seqPlayerIndex; + } +} + +// Used only by minifrog +void Audio_StopSequenceAtDefaultPos(void) { + if (gAudioSpecId != 0xC) { + sSpatialSeqFadeTimer = 1; + sSpatialSeqSeqId = NA_BGM_GENERAL_SFX; + } +} + +/** + * Play the requested sequence at a position. Valid for sequences on players 0 - 3 + */ +void Audio_PlaySequenceAtPos(u8 seqPlayerIndex, Vec3f* pos, u16 seqId, f32 maxDist) { + if ((!sAudioCutsceneFlag) && ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) & 0xFF) != NA_BGM_SONG_OF_SOARING) && + (gAudioSpecId != 0xC) && (pos != NULL) && + ((sSpatialSeqPlayerIndex != SEQ_PLAYER_BGM_MAIN) || + (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) { + sSpatialSeqFilterPos.x = pos->x; + sSpatialSeqFilterPos.y = pos->y; + sSpatialSeqFilterPos.z = pos->z; + sSpatialSeqMaxDist = maxDist; + sSpatialSeqFadeTimer = 2; + sSpatialSeqSeqId = seqId & 0xFF; + sSpatialSeqPlayerIndex = seqPlayerIndex; + } +} + +void Audio_UpdateSequenceAtPos(void) { + u16 mainBgmSeqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN); + u8 volumeFadeTimer; + + if ((sSpatialSeqFadeTimer != 0) && (sAudioPauseState == AUDIO_PAUSE_STATE_CLOSED)) { + if ((sSpatialSeqSeqId == NA_BGM_GENERAL_SFX) || (mainBgmSeqId == NA_BGM_SONG_OF_SOARING)) { + volumeFadeTimer = 10; + + if (mainBgmSeqId == NA_BGM_SONG_OF_SOARING) { + sSpatialSeqFadeTimer = 0; + volumeFadeTimer = 1; + } else if (sSpatialSeqFadeTimer < 128) { + sSpatialSeqFadeTimer--; + } + + if (sSpatialSeqFadeTimer == 0) { + Audio_StopSequenceAtPos(sSpatialSeqPlayerIndex, volumeFadeTimer); + sSpatialSeqIsActive[sSpatialSeqPlayerIndex] = false; + } + } else { + if ((sSpatialSeqPlayerIndex == SEQ_PLAYER_BGM_MAIN) && (mainBgmSeqId == NA_BGM_FINAL_HOURS)) { + Audio_StopSequenceAtPos(sSpatialSeqPlayerIndex, 10); + sSpatialSeqIsActive[sSpatialSeqPlayerIndex] = false; + return; + } + + Audio_StartSubBgmAtPos(sSpatialSeqPlayerIndex, &sSpatialSeqFilterPos, sSpatialSeqSeqId, 0x20, 200.0f, + sSpatialSeqMaxDist, 1.0f); + if (!sSpatialSeqIsActive[sSpatialSeqPlayerIndex]) { + sSpatialSeqFadeTimer = 0; + } + } + + if (sSpatialSeqFadeTimer < 128) { + sSpatialSeqSeqId = NA_BGM_GENERAL_SFX; + } + } +} /** * Unused remnant of OoT's EnRiverSound @@ -5408,7 +5837,7 @@ void Audio_StartSfxPlayer(void) { void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 volume) { u8 channelIndex; - if (!sAllPlayersMutedExceptOcaAndSys) { + if (!sAllPlayersMutedExceptSystemAndOcarina) { for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { switch (channelIndex) { case SFX_CHANNEL_SYSTEM0: diff --git a/src/code/z_actor.c b/src/code/z_actor.c index eb5ba018d..e1c13ae4a 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2767,11 +2767,11 @@ void Actor_UpdateFlaggedAudio(Actor* actor) { if (sfxId != NA_SE_NONE) {} if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE) { - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f); + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f); } if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE) { - func_801A1FB4(SEQ_PLAYER_BGM_MAIN, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f); + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_MAIN, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f); } } diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index 92afb3083..b3ae6bbeb 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -350,12 +350,12 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { if (this->actor.params == 2) { if (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 100.0f) { - func_801A1DB8(&this->actor.projectedPos, NA_BGM_SONG_OF_STORMS, 540.0f); + Audio_PlaySubBgmAtPosWithFilter(&this->actor.projectedPos, NA_BGM_SONG_OF_STORMS, 540.0f); } return; } if (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 200.0f) { - func_801A1D44(&this->actor.projectedPos, NA_BGM_SONG_OF_STORMS, 540.0f); + Audio_PlaySubBgmAtPos(&this->actor.projectedPos, NA_BGM_SONG_OF_STORMS, 540.0f); } if (this->unusedTimer != 0) { this->unusedTimer--; diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 8495411d5..ce3beaa2a 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -150,7 +150,7 @@ void EnMinifrog_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); if (this->flags & 0x100) { - func_801A1F88(); + Audio_StopSequenceAtDefaultPos(); } } @@ -438,7 +438,7 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) { this->actionFunc = EnMinifrog_NextFrogMissing; this->timer = 60; this->actor.home.rot.y = Actor_WorldYawTowardActor(&this->actor, &this->frog->actor); - func_801A1F88(); + Audio_StopSequenceAtDefaultPos(); this->flags &= ~0x100; this->flags &= ~(0x2 << FROG_YELLOW | 0x2 << FROG_CYAN | 0x2 << FROG_PINK | 0x2 << FROG_BLUE | 0x2 << FROG_WHITE); @@ -460,7 +460,7 @@ void EnMinifrog_BeginChoirCutscene(EnMinifrog* this, PlayState* play) { CutsceneManager_Start(this->actor.csId, &this->actor); this->actionFunc = EnMinifrog_SetupNextFrogChoir; this->timer = 5; - func_801A1F00(3, NA_BGM_FROG_SONG); + Audio_PlaySequenceAtDefaultPos(SEQ_PLAYER_BGM_SUB, NA_BGM_FROG_SONG); this->flags |= 0x100; play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, ANIMMODE_LOOP); } else { diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index a7bfd13f0..a1ed46868 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -417,7 +417,7 @@ void func_80BFC058(EnRz* this, PlayState* play) { void func_80BFC078(EnRz* this, PlayState* play) { s32 pad; - Vec3f sp28; + Vec3f seqPos; EnRz_UpdateSkelAnime(this, play); @@ -443,10 +443,10 @@ void func_80BFC078(EnRz* this, PlayState* play) { } if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) { - sp28.x = this->actor.projectedPos.x; - sp28.y = this->actor.projectedPos.y; - sp28.z = this->actor.projectedPos.z; - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, NA_BGM_ROSA_SISTERS, 900.0f); + seqPos.x = this->actor.projectedPos.x; + seqPos.y = this->actor.projectedPos.y; + seqPos.z = this->actor.projectedPos.z; + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_ROSA_SISTERS, 900.0f); } } @@ -504,7 +504,7 @@ void func_80BFC36C(EnRz* this, PlayState* play) { void func_80BFC3F8(EnRz* this, PlayState* play) { s32 pad; - Vec3f bgmPos; + Vec3f seqPos; EnRz_UpdateSkelAnime(this, play); @@ -544,10 +544,10 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { } if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) { - bgmPos.x = this->actor.projectedPos.x; - bgmPos.y = this->actor.projectedPos.y; - bgmPos.z = this->actor.projectedPos.z; - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &bgmPos, NA_BGM_ROSA_SISTERS, 900.0f); + seqPos.x = this->actor.projectedPos.x; + seqPos.y = this->actor.projectedPos.y; + seqPos.z = this->actor.projectedPos.z; + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_ROSA_SISTERS, 900.0f); } } } diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index 9e6310a71..68dbd0e48 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -558,7 +558,7 @@ void func_80BA06BC(EnZob* this, PlayState* play) { void func_80BA0728(EnZob* this, PlayState* play) { s32 pad; - Vec3f sp28; + Vec3f seqPos; func_80B9F86C(this); @@ -585,10 +585,10 @@ void func_80BA0728(EnZob* this, PlayState* play) { func_800B874C(&this->actor, play, 200.0f, 150.0f); } - sp28.x = this->actor.projectedPos.x; - sp28.y = this->actor.projectedPos.y; - sp28.z = this->actor.projectedPos.z; - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, NA_BGM_BASS_PLAY, 1000.0f); + seqPos.x = this->actor.projectedPos.x; + seqPos.y = this->actor.projectedPos.y; + seqPos.z = this->actor.projectedPos.z; + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_BASS_PLAY, 1000.0f); } void func_80BA08E8(EnZob* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index ab1f940ce..f30aa51b8 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -387,7 +387,7 @@ void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play) { seqPos.y = this->actor.projectedPos.y; seqPos.z = this->actor.projectedPos.z; - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_DRUMS_PLAY, 700.0f); + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_DRUMS_PLAY, 700.0f); } void func_80BAFA44(EnZod* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 8a942ce17..249b8f6bb 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -542,7 +542,7 @@ void func_80BBBD5C(EnZos* this, PlayState* play) { void func_80BBBDE0(EnZos* this, PlayState* play) { Actor* thisx = &this->actor; - Vec3f sp28; + Vec3f seqPos; if (this->unk_2B6 & 1) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 2, 0x1000, 0x200); @@ -578,10 +578,10 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_10); } - sp28.x = this->actor.projectedPos.x; - sp28.y = this->actor.projectedPos.y; - sp28.z = this->actor.projectedPos.z; - func_801A1FB4(SEQ_PLAYER_BGM_SUB, &sp28, NA_BGM_PIANO_PLAY, 1000.0f); + seqPos.x = this->actor.projectedPos.x; + seqPos.y = this->actor.projectedPos.y; + seqPos.z = this->actor.projectedPos.z; + Audio_PlaySequenceAtPos(SEQ_PLAYER_BGM_SUB, &seqPos, NA_BGM_PIANO_PLAY, 1000.0f); } void func_80BBBFBC(EnZos* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c index 42c2bcc95..1bcfd0ab5 100644 --- a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c +++ b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c @@ -1,7 +1,7 @@ /* * File: z_obj_sound.c * Overlay: ovl_Obj_Sound - * Description: Plays certain sounds (e.g., swamp waterfall noise) + * Description: An invisible point-source to play sounds, including sfx and sequences. */ #include "z_obj_sound.h" @@ -13,8 +13,8 @@ void ObjSound_Init(Actor* thisx, PlayState* play); void ObjSound_Destroy(Actor* thisx, PlayState* play); void ObjSound_Update(Actor* thisx, PlayState* play); +void ObjSound_Draw(Actor* thisx, PlayState* play); -#if 0 ActorInit Obj_Sound_InitVars = { ACTOR_OBJ_SOUND, ACTORCAT_ITEMACTION, @@ -27,12 +27,50 @@ ActorInit Obj_Sound_InitVars = { (ActorFunc)NULL, }; -#endif +void ObjSound_Init(Actor* thisx, PlayState* play) { + ObjSound* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Sound/ObjSound_Init.s") + this->unk_144 = false; + this->soundType = OBJ_SOUND_GET_TYPE(&this->actor); + this->sfxType = OBJ_SOUND_GET_SFX_TYPE(&this->actor); + this->actor.params &= OBJ_SOUND_ID_MASK; + if (this->soundType == OBJ_SOUND_TYPE_FANFARE) { + this->actor.draw = ObjSound_Draw; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Sound/ObjSound_Destroy.s") +void ObjSound_Destroy(Actor* thisx, PlayState* play) { + ObjSound* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Sound/ObjSound_Update.s") + if (this->soundType == OBJ_SOUND_TYPE_BGM) { + Audio_PlayObjSoundBgm(NULL, NA_BGM_GENERAL_SFX); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Sound/func_8099AA84.s") +void ObjSound_Update(Actor* thisx, PlayState* play) { + ObjSound* this = THIS; + + if (this->soundType == OBJ_SOUND_TYPE_SFX) { + if (this->sfxType != 0) { + Actor_PlaySfx_Flagged(&this->actor, gAudioEnvironmentalSfx[this->actor.params]); + } else { + Actor_PlaySfx_FlaggedCentered3(&this->actor, gAudioEnvironmentalSfx[this->actor.params]); + } + } else if (this->unk_144) { + if (this->soundType == OBJ_SOUND_TYPE_BGM) { + Audio_PlayObjSoundBgm(&this->actor.projectedPos, this->actor.params); + } else if (this->soundType == OBJ_SOUND_TYPE_FIXED_SFX) { + Audio_PlaySfx_AtFixedPos(&this->actor.projectedPos, gAudioEnvironmentalSfx[this->actor.params]); + } + } else { + this->unk_144 = true; + } +} + +void ObjSound_Draw(Actor* thisx, PlayState* play) { + ObjSound* this = THIS; + + if (CHECK_EVENTINF(EVENTINF_41) || CHECK_EVENTINF(EVENTINF_35)) { + Audio_PlayObjSoundFanfare(&this->actor.projectedPos, this->actor.params); + } +} diff --git a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h index a83aa840b..f9ec7fa8f 100644 --- a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h +++ b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h @@ -5,9 +5,22 @@ struct ObjSound; +#define OBJ_SOUND_GET_TYPE(thisx) (((thisx)->params >> 8) & 0xFF) +#define OBJ_SOUND_GET_SFX_TYPE(thisx) (((thisx)->params >> 7) & 1) +#define OBJ_SOUND_ID_MASK 0x7F + +typedef enum { + /* 0 */ OBJ_SOUND_TYPE_SFX, + /* 1 */ OBJ_SOUND_TYPE_BGM, + /* 2 */ OBJ_SOUND_TYPE_FIXED_SFX, + /* 3 */ OBJ_SOUND_TYPE_FANFARE +} ObjSoundType; + typedef struct ObjSound { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x4]; + /* 0x144 */ u8 unk_144; + /* 0x145 */ u8 sfxType; + /* 0x146 */ s16 soundType; } ObjSound; // size = 0x148 #endif // Z_OBJ_SOUND_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9ad15cf7d..a902899ea 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3919,22 +3919,22 @@ 0x801A0C70:("Audio_ClearSariaBgm",), 0x801A0C90:("Audio_ClearSariaBgmAtPos",), 0x801A0CB0:("Audio_SplitBgmChannels",), - 0x801A0E44:("func_801A0E44",), - 0x801A1290:("func_801A1290",), - 0x801A1348:("func_801A1348",), - 0x801A13BC:("func_801A13BC",), - 0x801A153C:("func_801A153C",), - 0x801A17F4:("func_801A17F4",), - 0x801A1904:("func_801A1904",), - 0x801A1A10:("func_801A1A10",), - 0x801A1A8C:("func_801A1A8C",), - 0x801A1D44:("func_801A1D44",), - 0x801A1DB8:("func_801A1DB8",), - 0x801A1E0C:("func_801A1E0C",), - 0x801A1F00:("func_801A1F00",), - 0x801A1F88:("func_801A1F88",), - 0x801A1FB4:("func_801A1FB4",), - 0x801A2090:("func_801A2090",), + 0x801A0E44:("Audio_SetSequenceProperties",), + 0x801A1290:("Audio_UpdateObjSoundProperties",), + 0x801A1348:("Audio_SetObjSoundProperties",), + 0x801A13BC:("Audio_StartObjSoundFanfare",), + 0x801A153C:("Audio_PlayObjSoundBgm",), + 0x801A17F4:("Audio_PlayObjSoundFanfare",), + 0x801A1904:("Audio_UpdateObjSoundFanfare",), + 0x801A1A10:("Audio_StopSequenceAtPos",), + 0x801A1A8C:("Audio_StartSubBgmAtPos",), + 0x801A1D44:("Audio_PlaySubBgmAtPos",), + 0x801A1DB8:("Audio_PlaySubBgmAtPosWithFilter",), + 0x801A1E0C:("Audio_UpdateSubBgmAtPos",), + 0x801A1F00:("Audio_PlaySequenceAtDefaultPos",), + 0x801A1F88:("Audio_StopSequenceAtDefaultPos",), + 0x801A1FB4:("Audio_PlaySequenceAtPos",), + 0x801A2090:("Audio_UpdateSequenceAtPos",), 0x801A21FC:("Audio_PlaySariaBgm",), 0x801A2460:("Audio_ClearSariaBgm2",), 0x801A246C:("func_801A246C",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 7fd394acc..ad17bf28b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4181,7 +4181,7 @@ 0x801FD3AB:("sFanfareState","UNK_TYPE1","",0x1), 0x801FD3AC:("sFanfareSeqId","UNK_TYPE1","",0x1), 0x801FD3AE:("sMuteOnlySfxAndAmbienceSeq","UNK_TYPE1","",0x1), - 0x801FD3AF:("sAllPlayersMutedExceptOcaAndSys","UNK_TYPE1","",0x1), + 0x801FD3AF:("sAllPlayersMutedExceptSystemAndOcarina","UNK_TYPE1","",0x1), 0x801FD3B0:("sAudioPauseState","UNK_TYPE1","",0x1), 0x801FD3B4:("sSpatialSeqIsActive","u8","[4]",0x4), 0x801FD3B8:("sSequenceFilter","UNK_TYPE1","",0x1), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 240f6a0b1..54ec93503 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -3436,22 +3436,22 @@ asm/non_matchings/code/code_8019AF00/func_801A09D4.s,func_801A09D4,0x801A09D4,0x asm/non_matchings/code/code_8019AF00/Audio_ClearSariaBgm.s,Audio_ClearSariaBgm,0x801A0C70,0x8 asm/non_matchings/code/code_8019AF00/Audio_ClearSariaBgmAtPos.s,Audio_ClearSariaBgmAtPos,0x801A0C90,0x8 asm/non_matchings/code/code_8019AF00/Audio_SplitBgmChannels.s,Audio_SplitBgmChannels,0x801A0CB0,0x65 -asm/non_matchings/code/code_8019AF00/func_801A0E44.s,func_801A0E44,0x801A0E44,0x113 -asm/non_matchings/code/code_8019AF00/func_801A1290.s,func_801A1290,0x801A1290,0x2E -asm/non_matchings/code/code_8019AF00/func_801A1348.s,func_801A1348,0x801A1348,0x1D -asm/non_matchings/code/code_8019AF00/func_801A13BC.s,func_801A13BC,0x801A13BC,0x60 -asm/non_matchings/code/code_8019AF00/func_801A153C.s,func_801A153C,0x801A153C,0xAE -asm/non_matchings/code/code_8019AF00/func_801A17F4.s,func_801A17F4,0x801A17F4,0x44 -asm/non_matchings/code/code_8019AF00/func_801A1904.s,func_801A1904,0x801A1904,0x43 -asm/non_matchings/code/code_8019AF00/func_801A1A10.s,func_801A1A10,0x801A1A10,0x1F -asm/non_matchings/code/code_8019AF00/func_801A1A8C.s,func_801A1A8C,0x801A1A8C,0xAE -asm/non_matchings/code/code_8019AF00/func_801A1D44.s,func_801A1D44,0x801A1D44,0x1D -asm/non_matchings/code/code_8019AF00/func_801A1DB8.s,func_801A1DB8,0x801A1DB8,0x15 -asm/non_matchings/code/code_8019AF00/func_801A1E0C.s,func_801A1E0C,0x801A1E0C,0x3D -asm/non_matchings/code/code_8019AF00/func_801A1F00.s,func_801A1F00,0x801A1F00,0x22 -asm/non_matchings/code/code_8019AF00/func_801A1F88.s,func_801A1F88,0x801A1F88,0xB -asm/non_matchings/code/code_8019AF00/func_801A1FB4.s,func_801A1FB4,0x801A1FB4,0x37 -asm/non_matchings/code/code_8019AF00/func_801A2090.s,func_801A2090,0x801A2090,0x5B +asm/non_matchings/code/code_8019AF00/Audio_SetSequenceProperties.s,Audio_SetSequenceProperties,0x801A0E44,0x113 +asm/non_matchings/code/code_8019AF00/Audio_UpdateObjSoundProperties.s,Audio_UpdateObjSoundProperties,0x801A1290,0x2E +asm/non_matchings/code/code_8019AF00/Audio_SetObjSoundProperties.s,Audio_SetObjSoundProperties,0x801A1348,0x1D +asm/non_matchings/code/code_8019AF00/Audio_StartObjSoundFanfare.s,Audio_StartObjSoundFanfare,0x801A13BC,0x60 +asm/non_matchings/code/code_8019AF00/Audio_PlayObjSoundBgm.s,Audio_PlayObjSoundBgm,0x801A153C,0xAE +asm/non_matchings/code/code_8019AF00/Audio_PlayObjSoundFanfare.s,Audio_PlayObjSoundFanfare,0x801A17F4,0x44 +asm/non_matchings/code/code_8019AF00/Audio_UpdateObjSoundFanfare.s,Audio_UpdateObjSoundFanfare,0x801A1904,0x43 +asm/non_matchings/code/code_8019AF00/Audio_StopSequenceAtPos.s,Audio_StopSequenceAtPos,0x801A1A10,0x1F +asm/non_matchings/code/code_8019AF00/Audio_StartSubBgmAtPos.s,Audio_StartSubBgmAtPos,0x801A1A8C,0xAE +asm/non_matchings/code/code_8019AF00/Audio_PlaySubBgmAtPos.s,Audio_PlaySubBgmAtPos,0x801A1D44,0x1D +asm/non_matchings/code/code_8019AF00/Audio_PlaySubBgmAtPosWithFilter.s,Audio_PlaySubBgmAtPosWithFilter,0x801A1DB8,0x15 +asm/non_matchings/code/code_8019AF00/Audio_UpdateSubBgmAtPos.s,Audio_UpdateSubBgmAtPos,0x801A1E0C,0x3D +asm/non_matchings/code/code_8019AF00/Audio_PlaySequenceAtDefaultPos.s,Audio_PlaySequenceAtDefaultPos,0x801A1F00,0x22 +asm/non_matchings/code/code_8019AF00/Audio_StopSequenceAtDefaultPos.s,Audio_StopSequenceAtDefaultPos,0x801A1F88,0xB +asm/non_matchings/code/code_8019AF00/Audio_PlaySequenceAtPos.s,Audio_PlaySequenceAtPos,0x801A1FB4,0x37 +asm/non_matchings/code/code_8019AF00/Audio_UpdateSequenceAtPos.s,Audio_UpdateSequenceAtPos,0x801A2090,0x5B asm/non_matchings/code/code_8019AF00/Audio_PlaySariaBgm.s,Audio_PlaySariaBgm,0x801A21FC,0x99 asm/non_matchings/code/code_8019AF00/Audio_ClearSariaBgm2.s,Audio_ClearSariaBgm2,0x801A2460,0x3 asm/non_matchings/code/code_8019AF00/func_801A246C.s,func_801A246C,0x801A246C,0x36 From a1bdc6c3824233551a436e479637bf2bc9030e3e Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 14 Oct 2023 23:39:47 -0700 Subject: [PATCH 71/74] EnJso (Garo) OK and documented (#1440) * EnJso (Garo) OK and documented * Respond to review * Replace some weird ifs with early returns * Respond to Anghelo's review --- spec | 3 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 5 +- src/overlays/actors/ovl_En_Jso/z_en_jso.c | 1744 ++++++++++++++++- src/overlays/actors/ovl_En_Jso/z_en_jso.h | 95 +- src/overlays/actors/ovl_En_Part/z_en_part.h | 2 + .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 7 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 7 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 9 +- tools/disasm/functions.txt | 76 +- tools/disasm/variables.txt | 30 +- undefined_syms.txt | 5 - 11 files changed, 1803 insertions(+), 180 deletions(-) diff --git a/spec b/spec index 6cd76563c..a375a6692 100644 --- a/spec +++ b/spec @@ -2162,8 +2162,7 @@ beginseg name "ovl_En_Jso" compress include "build/src/overlays/actors/ovl_En_Jso/z_en_jso.o" - include "build/data/ovl_En_Jso/ovl_En_Jso.data.o" - include "build/data/ovl_En_Jso/ovl_En_Jso.reloc.o" + include "build/src/overlays/actors/ovl_En_Jso/ovl_En_Jso_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index 86cb7235d..e62be0095 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -5,6 +5,7 @@ */ #include "z_en_hint_skb.h" +#include "overlays/actors/ovl_En_Part/z_en_part.h" #include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -903,12 +904,12 @@ void EnHintSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Collider_UpdateSpheres(limbIndex, &this->collider); if ((limbIndex == STALCHILD_LIMB_HEAD) && (this->unk_3E8 & 1) && !(this->unk_3E8 & 2)) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); this->unk_3E8 |= 2; } else if ((this->unk_3E8 & 4) && !(this->unk_3E8 & 8) && ((limbIndex != STALCHILD_LIMB_HEAD) || !(this->unk_3E8 & 1)) && (limbIndex != STALCHILD_LIMB_LOWER_JAW)) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); } if (this->drawDmgEffTimer != 0) { diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.c b/src/overlays/actors/ovl_En_Jso/z_en_jso.c index 43a27759f..5d083246a 100644 --- a/src/overlays/actors/ovl_En_Jso/z_en_jso.c +++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.c @@ -5,6 +5,9 @@ */ #include "z_en_jso.h" +#include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" +#include "overlays/actors/ovl_En_Encount3/z_en_encount3.h" +#include "overlays/actors/ovl_En_Part/z_en_part.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) @@ -13,60 +16,135 @@ void EnJso_Init(Actor* thisx, PlayState* play); void EnJso_Destroy(Actor* thisx, PlayState* play); void EnJso_Update(Actor* thisx, PlayState* play); +void EnJso_Draw(Actor* thisx, PlayState* play); -void func_809ADCB8(EnJso* this, PlayState* play); -void func_809AE87C(EnJso* this, PlayState* play); -void func_809AEA08(EnJso* this, PlayState* play); -void func_809AED00(EnJso* this, PlayState* play); -void func_809AEDAC(EnJso* this, PlayState* play); -void func_809AEEC0(EnJso* this, PlayState* play); -void func_809AF110(EnJso* this, PlayState* play); -void func_809AF2F8(EnJso* this, PlayState* play); -void func_809AF3C0(EnJso* this, PlayState* play); -void func_809AF440(EnJso* this, PlayState* play); -void func_809AF53C(EnJso* this, PlayState* play); -void func_809AF714(EnJso* this, PlayState* play); -void func_809AF7F4(EnJso* this, PlayState* play); -void func_809AF99C(EnJso* this, PlayState* play); -void func_809AFAF4(EnJso* this, PlayState* play); -void func_809AFC10(EnJso* this, PlayState* play); -void func_809AFE38(EnJso* this, PlayState* play); +void EnJso_SetupHandleIntroCutscene(EnJso* this); +void EnJso_HandleIntroCutscene(EnJso* this, PlayState* play); +void EnJso_Reappear(EnJso* this, PlayState* play); +void EnJso_SetupCirclePlayer(EnJso* this, PlayState* play); +void EnJso_CirclePlayer(EnJso* this, PlayState* play); +void EnJso_Guard(EnJso* this, PlayState* play); +void EnJso_SetupSpinBeforeAttack(EnJso* this); +void EnJso_SpinBeforeAttack(EnJso* this, PlayState* play); +void EnJso_SetupDashAttack(EnJso* this); +void EnJso_DashAttack(EnJso* this, PlayState* play); +void EnJso_SetupSlash(EnJso* this, PlayState* play); +void EnJso_Slash(EnJso* this, PlayState* play); +void EnJso_SetupWaitAfterSlash(EnJso* this); +void EnJso_WaitAfterSlash(EnJso* this, PlayState* play); +void EnJso_SetupKnockedBack(EnJso* this); +void EnJso_KnockedBack(EnJso* this, PlayState* play); +void EnJso_SetupCower(EnJso* this); +void EnJso_Cower(EnJso* this, PlayState* play); +void EnJso_Stunned(EnJso* this, PlayState* play); +void EnJso_Damaged(EnJso* this, PlayState* play); +void EnJso_SetupJumpBack(EnJso* this); +void EnJso_JumpBack(EnJso* this, PlayState* play); +void EnJso_Dead(EnJso* this, PlayState* play); +void EnJso_SetupFallDownAndTalk(EnJso* this, PlayState* play); +void EnJso_FallDownAndTalk(EnJso* this, PlayState* play); +void EnJso_TellHint(EnJso* this, PlayState* play); +void EnJso_BurstIntoFlames(EnJso* this, PlayState* play); -#if 0 -// static DamageTable sDamageTable = { -static DamageTable D_809B0F48 = { - /* Deku Nut */ DMG_ENTRY(0, 0x1), - /* Deku Stick */ DMG_ENTRY(1, 0xF), - /* Horse trample */ DMG_ENTRY(0, 0x0), - /* Explosives */ DMG_ENTRY(1, 0xF), - /* Zora boomerang */ DMG_ENTRY(1, 0xF), - /* Normal arrow */ DMG_ENTRY(1, 0xF), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(0, 0x1), - /* Goron punch */ DMG_ENTRY(1, 0xF), - /* Sword */ DMG_ENTRY(1, 0xF), - /* Goron pound */ DMG_ENTRY(1, 0xF), - /* Fire arrow */ DMG_ENTRY(2, 0x2), - /* Ice arrow */ DMG_ENTRY(2, 0x3), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0xF), - /* Deku spin */ DMG_ENTRY(0, 0x1), - /* Deku bubble */ DMG_ENTRY(1, 0xF), - /* Deku launch */ DMG_ENTRY(2, 0xF), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1), - /* Zora barrier */ DMG_ENTRY(0, 0x5), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0xF), - /* Zora punch */ DMG_ENTRY(1, 0xF), - /* Spin attack */ DMG_ENTRY(1, 0xF), - /* Sword beam */ DMG_ENTRY(0, 0x0), - /* Normal Roll */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0), - /* Unblockable */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0xF), +typedef enum { + /* 0 */ EN_JSO_ACTION_HANDLE_INTRO_CUTSCENE, + /* 1 */ EN_JSO_ACTION_REAPPEAR, + /* 2 */ EN_JSO_ACTION_CIRCLE_PLAYER, + /* 3 */ EN_JSO_ACTION_GUARD, + /* 4 */ EN_JSO_ACTION_SPIN_BEFORE_ATTACK, + /* 5 */ EN_JSO_ACTION_DASH_ATTACK, + /* 6 */ EN_JSO_ACTION_SLASH, + /* 7 */ EN_JSO_ACTION_WAIT_AFTER_SLASH, + /* 8 */ EN_JSO_ACTION_STUNNED, + /* 9 */ EN_JSO_ACTION_KNOCKED_BACK, + /* 10 */ EN_JSO_ACTION_COWER, + /* 11 */ EN_JSO_ACTION_DAMAGED, + /* 12 */ EN_JSO_ACTION_JUMP_BACK, + /* 13 */ EN_JSO_ACTION_DEAD, + /* 14 */ EN_JSO_ACTION_FALL_DOWN_AND_TALK, + /* 15 */ EN_JSO_ACTION_UNK_15 // Checked in EnJso_Update, but never actually used +} EnJsoAction; + +typedef enum { + /* 0 */ EN_JSO_INTRO_SPIN_UP_FROM_GROUND, + /* 1 */ EN_JSO_INTRO_JUMP_OUT_FROM_GROUND, + /* 2 */ EN_JSO_INTRO_LAND_FROM_ABOVE, + /* 3 */ EN_JSO_INTRO_SCALE_UP +} EnJsoIntroType; + +typedef enum { + // Either the cutscene started (in which case, we'll transition to the next state on the next frame) or it's done. + /* 0 */ EN_JSO_INTRO_CS_STATE_DONE_OR_STARTED, + // Waits for the Garo to finish their intro animation and open the first textbox. + /* 1 */ EN_JSO_INTRO_CS_STATE_WAITING_FOR_TEXTBOX_TO_APPEAR, + // Waits for the player to press a button to continue on from the Garo's first textbox. + /* 2 */ EN_JSO_INTRO_CS_STATE_WAITING_FOR_TEXTBOX_TO_CONTINUE, + // Lifts the Garo's right arm such that, when they draw their sword, it's pointed at the player. Waits until the + // player has finished reading all of the Garo's dialogue before continuing. + /* 3 */ EN_JSO_INTRO_CS_STATE_RAISE_ARM_AND_DRAW_RIGHT_SWORD, + // Waits 10 frames, then the Garo draws its left sword and continues to the next state. + /* 4 */ EN_JSO_INTRO_CS_STATE_DRAW_LEFT_SWORD, + // Waits 10 frames, then the Garo jumps back and the cutscene ends. + /* 5 */ EN_JSO_INTRO_CS_STATE_ENDING +} EnJsoIntroCsState; + +typedef enum { + /* 0 */ EN_JSO_SWORD_STATE_BOTH_DRAWN, + /* 1 */ EN_JSO_SWORD_STATE_KNOCKED_OUT_OF_HANDS, + /* 2 */ EN_JSO_SWORD_STATE_RIGHT_DRAWN, + /* 3 */ EN_JSO_SWORD_STATE_LEFT_DRAWN, + /* 5 */ EN_JSO_SWORD_STATE_NONE_DRAWN = 5 +} EnJsoSwordState; + +// Seemingly a duplicate of the isAttacking instance variable. Its purpose is unknown. +static s32 sIsAttacking = false; + +// Seemingly a duplicate of the isPlayerLockedOn instance variable. Its purpose is unknown. +static s32 sIsPlayerLockedOn = false; + +typedef enum { + /* 0x0 */ EN_JSO_DMGEFF_IMMUNE, // Deals no damage and has no special effect + /* 0x1 */ EN_JSO_DMGEFF_STUN, // Deals no damage but stuns the Garo + /* 0x2 */ EN_JSO_DMGEFF_FIRE, // Damages and sets the Garo on fire + /* 0x3 */ EN_JSO_DMGEFF_FREEZE, // Damages and surrounds the Garo with ice + /* 0x4 */ EN_JSO_DMGEFF_LIGHT_ORB, // Damages and surrounds the Garo with light orbs + /* 0x5 */ EN_JSO_DMGEFF_ELECTRIC_STUN, // Deals no damage but stuns the Garo and surrounds them with electric sparks + /* 0xF */ EN_JSO_DMGEFF_NONE = 0xF // Damages the Garo and has no special effect +} EnJsoDamageEffect; + +static DamageTable sDamageTable = { + /* Deku Nut */ DMG_ENTRY(0, EN_JSO_DMGEFF_STUN), + /* Deku Stick */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Explosives */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Zora boomerang */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Hookshot */ DMG_ENTRY(0, EN_JSO_DMGEFF_STUN), + /* Goron punch */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Sword */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Fire arrow */ DMG_ENTRY(2, EN_JSO_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(2, EN_JSO_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, EN_JSO_DMGEFF_LIGHT_ORB), + /* Goron spikes */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Deku spin */ DMG_ENTRY(0, EN_JSO_DMGEFF_STUN), + /* Deku bubble */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(2, EN_JSO_DMGEFF_NONE), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_JSO_DMGEFF_STUN), + /* Zora barrier */ DMG_ENTRY(0, EN_JSO_DMGEFF_ELECTRIC_STUN), + /* Normal shield */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Light ray */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Thrown object */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Normal Roll */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Unblockable */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_JSO_DMGEFF_IMMUNE), + /* Powder Keg */ DMG_ENTRY(1, EN_JSO_DMGEFF_NONE), }; ActorInit En_Jso_InitVars = { @@ -81,106 +159,1560 @@ ActorInit En_Jso_InitVars = { (ActorFunc)NULL, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_809B0F88 = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x08, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_HARD | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x08, 0x04 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 22, 55, 0, { 0, 0, 0 } }, }; -// static ColliderQuadInit sQuadInit = { -static ColliderQuadInit D_809B0FB4 = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_QUAD, }, - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x04, 0x08 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, BUMP_NONE, OCELEM_NONE, }, +static ColliderQuadInit sQuadInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_NONE, + OC1_NONE, + OC2_NONE, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x04, 0x08 }, + { 0x00000000, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, + BUMP_NONE, + OCELEM_NONE, + }, { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, }; -#endif +// These text IDs are the ones common to all Garos, regardless of which hint they provide. This includes their dialogue +// during their intro cutscene, as well as most of their dialogue when they are defeated. +static u16 sTextIds[] = { + 0x1396, + 0x1397, + 0x1398, + 0x1399, +}; -extern DamageTable D_809B0F48; -extern ColliderCylinderInit D_809B0F88; -extern ColliderQuadInit D_809B0FB4; +typedef enum { + /* 0 */ EN_JSO_ANIM_APPEAR, + /* 1 */ EN_JSO_ANIM_IDLE, + /* 2 */ EN_JSO_ANIM_BOUNCE, + /* 3 */ EN_JSO_ANIM_GUARD, + /* 4 */ EN_JSO_ANIM_DASH_ATTACK, + /* 5 */ EN_JSO_ANIM_SLASH_START, + /* 6 */ EN_JSO_ANIM_SLASH_LOOP, + /* 7 */ EN_JSO_ANIM_KNOCKED_BACK, + /* 8 */ EN_JSO_ANIM_COWER, + /* 9 */ EN_JSO_ANIM_DAMAGED, + /* 10 */ EN_JSO_ANIM_JUMP_BACK, + /* 11 */ EN_JSO_ANIM_FALL_DOWN, + /* 12 */ EN_JSO_ANIM_MAX +} EnJsoAnimation; -extern UNK_TYPE D_060081F4; +static AnimationHeader* sAnimations[EN_JSO_ANIM_MAX] = { + &gGaroAppearAnim, // EN_JSO_ANIM_APPEAR + &gGaroIdleAnim, // EN_JSO_ANIM_IDLE + &gGaroBounceAnim, // EN_JSO_ANIM_BOUNCE + &gGaroGuardAnim, // EN_JSO_ANIM_GUARD + &gGaroDashAttackAnim, // EN_JSO_ANIM_DASH_ATTACK + &gGaroSlashStartAnim, // EN_JSO_ANIM_SLASH_START + &gGaroSlashLoopAnim, // EN_JSO_ANIM_SLASH_LOOP + &gGaroKnockedBackAnim, // EN_JSO_ANIM_KNOCKED_BACK + &gGaroCowerAnim, // EN_JSO_ANIM_COWER + &gGaroDamagedAnim, // EN_JSO_ANIM_DAMAGED + &gGaroJumpBackAnim, // EN_JSO_ANIM_JUMP_BACK + &gGaroFallDownAnim, // EN_JSO_ANIM_FALL_DOWN +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/EnJso_Init.s") +static u8 sAnimationModes[EN_JSO_ANIM_MAX] = { + ANIMMODE_ONCE, // EN_JSO_ANIM_APPEAR + ANIMMODE_LOOP, // EN_JSO_ANIM_IDLE + ANIMMODE_LOOP, // EN_JSO_ANIM_BOUNCE + ANIMMODE_ONCE, // EN_JSO_ANIM_GUARD + ANIMMODE_ONCE, // EN_JSO_ANIM_DASH_ATTACK + ANIMMODE_ONCE, // EN_JSO_ANIM_SLASH_START + ANIMMODE_LOOP, // EN_JSO_ANIM_SLASH_LOOP + ANIMMODE_ONCE, // EN_JSO_ANIM_KNOCKED_BACK + ANIMMODE_LOOP, // EN_JSO_ANIM_COWER + ANIMMODE_LOOP, // EN_JSO_ANIM_DAMAGED + ANIMMODE_ONCE, // EN_JSO_ANIM_JUMP_BACK + ANIMMODE_ONCE, // EN_JSO_ANIM_FALL_DOWN +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/EnJso_Destroy.s") +void EnJso_Init(Actor* thisx, PlayState* play) { + EnJso* this = THIS; + EffectBlureInit1 rightSwordBlureInit; + EffectBlureInit1 leftSwordBlureInit; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809ADBC8.s") + this->actor.hintId = TATL_HINT_ID_GARO; + this->actor.targetMode = TARGET_MODE_5; + this->actor.colChkInfo.mass = 80; + this->actor.colChkInfo.health = 3; + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f); + this->actor.colChkInfo.damageTable = &sDamageTable; + this->actor.shape.shadowScale = 0.0f; + SkelAnime_InitFlex(play, &this->skelAnime, &gGaroSkel, &gGaroAppearAnim, this->jointTable, this->morphTable, + GARO_LIMB_MAX); + this->actor.focus.pos = this->actor.world.pos; + Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->actor, &sCylinderInit); + Collider_InitAndSetQuad(play, &this->rightSwordCollider, &this->actor, &sQuadInit); + Collider_InitAndSetQuad(play, &this->leftSwordCollider, &this->actor, &sQuadInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809ADC7C.s") + rightSwordBlureInit.p1StartColor[0] = leftSwordBlureInit.p1StartColor[0] = rightSwordBlureInit.p1StartColor[1] = + leftSwordBlureInit.p1StartColor[1] = rightSwordBlureInit.p1StartColor[2] = leftSwordBlureInit.p1StartColor[2] = + rightSwordBlureInit.p1StartColor[3] = leftSwordBlureInit.p1StartColor[3] = + rightSwordBlureInit.p2StartColor[0] = leftSwordBlureInit.p2StartColor[0] = + rightSwordBlureInit.p2StartColor[1] = leftSwordBlureInit.p2StartColor[1] = + rightSwordBlureInit.p2StartColor[2] = leftSwordBlureInit.p2StartColor[2] = + rightSwordBlureInit.p1EndColor[0] = leftSwordBlureInit.p1EndColor[0] = + rightSwordBlureInit.p1EndColor[1] = leftSwordBlureInit.p1EndColor[1] = + rightSwordBlureInit.p1EndColor[2] = leftSwordBlureInit.p1EndColor[2] = + rightSwordBlureInit.p2EndColor[0] = leftSwordBlureInit.p2EndColor[0] = + rightSwordBlureInit.p2EndColor[1] = leftSwordBlureInit.p2EndColor[1] = + rightSwordBlureInit.p2EndColor[2] = leftSwordBlureInit.p2EndColor[2] = + 255; + leftSwordBlureInit.p2StartColor[3] = rightSwordBlureInit.p2StartColor[3] = 64; + rightSwordBlureInit.p1EndColor[3] = leftSwordBlureInit.p1EndColor[3] = rightSwordBlureInit.p2EndColor[3] = + leftSwordBlureInit.p2EndColor[3] = 0; + rightSwordBlureInit.elemDuration = leftSwordBlureInit.elemDuration = 8; + rightSwordBlureInit.unkFlag = leftSwordBlureInit.unkFlag = 0; + rightSwordBlureInit.calcMode = leftSwordBlureInit.calcMode = 2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809ADCB8.s") + Effect_Add(play, &this->rightSwordBlureIndex, EFFECT_BLURE1, 0, 0, &rightSwordBlureInit); + Effect_Add(play, &this->leftSwordBlureIndex, EFFECT_BLURE1, 0, 0, &leftSwordBlureInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AE754.s") + this->actor.gravity = -3.0f; + this->scale = 0.035f; + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + this->hintType = EN_JSO_GET_HINT_TYPE(&this->actor); + this->introCsType = this->hintType & EN_JSO_INTRO_SCALE_UP; + EnJso_SetupHandleIntroCutscene(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AE87C.s") +void EnJso_Destroy(Actor* thisx, PlayState* play) { + EnJso* this = THIS; + EnEncount3* parent; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AE9B0.s") + Collider_DestroyCylinder(play, &this->bodyCollider); + Collider_DestroyQuad(play, &this->rightSwordCollider); + Collider_DestroyQuad(play, &this->leftSwordCollider); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AEA08.s") + if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) { + parent = (EnEncount3*)this->actor.parent; + if (parent->actor.update != NULL) { + parent->child = NULL; + if (parent->unk14E > 0) { + parent->unk14E--; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AECA8.s") + Effect_Destroy(play, this->rightSwordBlureIndex); + Effect_Destroy(play, this->leftSwordBlureIndex); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AED00.s") +void EnJso_ChangeAnim(EnJso* this, s32 animIndex) { + f32 morphFrames = -4.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AED54.s") + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + if ((animIndex == EN_JSO_ANIM_GUARD) || (animIndex == EN_JSO_ANIM_DAMAGED)) { + morphFrames = 0.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AEDAC.s") + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[animIndex], morphFrames); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AEE44.s") +void EnJso_SetupHandleIntroCutscene(EnJso* this) { + EnEncount3* parent = (EnEncount3*)this->actor.parent; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AEEC0.s") + this->csId = parent->csId; + this->swordState = EN_JSO_SWORD_STATE_NONE_DRAWN; + this->action = EN_JSO_ACTION_HANDLE_INTRO_CUTSCENE; + this->actor.flags |= ACTOR_FLAG_100000; + this->actionFunc = EnJso_HandleIntroCutscene; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF064.s") +/** + * Responsible for handling all aspects of the intro cutscene, including manipulating the sub-camera, making the Garo + * appear in one of four different ways, activating the ring of fire, etc. When the cutscene is over, the Garo will + * jump back to start the fight. + */ +void EnJso_HandleIntroCutscene(EnJso* this, PlayState* play) { + Player* player = GET_PLAYER(play); + f32 curFrame = this->skelAnime.curFrame; + s16 showTextbox; + s16 diffToTargetRobeRightRot; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF110.s") + switch (this->introCsState) { + case EN_JSO_INTRO_CS_STATE_DONE_OR_STARTED: + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF28C.s") + CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); + func_800B7298(play, &this->actor, PLAYER_CSMODE_21); + this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId); + player->actor.world.pos.x = this->actor.home.pos.x + 30.0f; + player->actor.world.pos.z = this->actor.home.pos.z + 30.0f; + this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; + this->subCamEyeNext.x = player->actor.world.pos.x; + this->subCamEyeNext.y = player->actor.world.pos.y; + this->subCamEyeNext.z = player->actor.world.pos.z; + this->subCamAtNext.x = player->actor.world.pos.x; + this->subCamAtNext.y = player->actor.world.pos.y; + this->subCamAtNext.z = player->actor.world.pos.z; + player->actor.shape.rot.y = player->actor.world.rot.y = + Math_Vec3f_Yaw(&player->actor.world.pos, &this->actor.world.pos); + Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext); + Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext); + EnJso_ChangeAnim(this, EN_JSO_ANIM_IDLE); + this->actor.draw = EnJso_Draw; + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_ENTRY); + this->actor.shape.yOffset = 970.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF2F8.s") + switch (this->introCsType) { + case EN_JSO_INTRO_SPIN_UP_FROM_GROUND: + this->actor.shape.yOffset = -300.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF368.s") + case EN_JSO_INTRO_JUMP_OUT_FROM_GROUND: + EnJso_ChangeAnim(this, EN_JSO_ANIM_APPEAR); + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, + 1, 8.0f, 500, 10, true); + this->actor.shape.rot.y = this->actor.world.rot.y = this->actor.yawTowardsPlayer; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF3C0.s") + case EN_JSO_INTRO_LAND_FROM_ABOVE: + this->actor.shape.rot.y = this->actor.world.rot.y = this->actor.yawTowardsPlayer; + this->actor.world.pos.y = this->actor.home.pos.y + 200.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF3FC.s") + case EN_JSO_INTRO_SCALE_UP: + this->scale = 0.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF440.s") + default: + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF470.s") + this->introCsTimer = 0; + this->introCsState++; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF53C.s") + case EN_JSO_INTRO_CS_STATE_WAITING_FOR_TEXTBOX_TO_APPEAR: + player->actor.world.pos.x = this->actor.home.pos.x + 30.0f; + player->actor.world.pos.z = this->actor.home.pos.z + 90.0f; + this->subCamEyeNext.x = player->actor.world.pos.x - 170.0f; + this->subCamEyeNext.y = player->actor.world.pos.y + 30.0f; + this->subCamEyeNext.z = player->actor.world.pos.z - 80.0f; + this->subCamAtNext.x = player->actor.world.pos.x + 200.0f; + this->subCamAtNext.y = player->actor.world.pos.y + 10.0f; + this->subCamAtNext.z = player->actor.world.pos.z; + Math_ApproachF(&this->actor.shape.shadowScale, 16.0f, 0.4f, 4.0f); + showTextbox = false; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF5F8.s") + switch (this->introCsType) { + case EN_JSO_INTRO_SPIN_UP_FROM_GROUND: + Math_ApproachF(&this->actor.shape.yOffset, 970.0f, 0.5f, 100.0f); + this->actor.shape.rot.y += 0x1770; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF714.s") + if (this->actor.shape.yOffset >= 969.0f) { + showTextbox = true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF76C.s") + if ((play->gameplayFrames % 4) == 0) { + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, + this->actor.shape.shadowScale, 1, 8.0f, 500, 10, true); + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF7F4.s") + case EN_JSO_INTRO_JUMP_OUT_FROM_GROUND: + if (curFrame >= this->animEndFrame) { + showTextbox = true; + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, + this->actor.shape.shadowScale, 1, 8.0f, 500, 10, true); + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF8D0.s") + case EN_JSO_INTRO_LAND_FROM_ABOVE: + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + showTextbox = true; + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, + this->actor.shape.shadowScale, 1, 8.0f, 500, 10, true); + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AF99C.s") + case EN_JSO_INTRO_SCALE_UP: + Math_ApproachF(&this->scale, 0.035f, 0.2f, 0.03f); + if (this->scale >= 0.034f) { + this->scale = 0.035f; + showTextbox = true; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AFA58.s") + default: + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AFAF4.s") + if (showTextbox) { + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); + Message_StartTextbox(play, sTextIds[this->textIndex], &this->actor); + this->textIndex++; + this->actor.shape.yOffset = 970.0f; + this->introCsTimer = 0; + this->introCsState++; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AFC10.s") + case EN_JSO_INTRO_CS_STATE_WAITING_FOR_TEXTBOX_TO_CONTINUE: + this->subCamEyeNext.x = player->actor.world.pos.x - 30.0f; + this->subCamEyeNext.y = player->actor.world.pos.y + 30.0f; + this->subCamEyeNext.z = player->actor.world.pos.z + 70.0f; + this->subCamAtNext.x = player->actor.world.pos.x - 20.0f; + this->subCamAtNext.y = player->actor.world.pos.y + 20.0f; + this->subCamAtNext.z = player->actor.world.pos.z; + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 0xBB8, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809AFE38.s") + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + Message_CloseTextbox(play); + Message_ContinueTextbox(play, sTextIds[this->textIndex]); + this->introCsTimer = 0; + this->textIndex++; + this->introCsState++; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809B0034.s") + case EN_JSO_INTRO_CS_STATE_RAISE_ARM_AND_DRAW_RIGHT_SWORD: + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 0xBB8, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/EnJso_Update.s") + if (Message_GetState(&play->msgCtx) == TEXT_STATE_10) { + this->targetRobeRightRot.x = -0x2710; + this->targetRobeRightRot.z = -0x2710; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809B0734.s") + diffToTargetRobeRightRot = this->targetRobeRightRot.x - this->robeRightRot.x; + diffToTargetRobeRightRot = ABS_ALT(diffToTargetRobeRightRot); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809B0820.s") + if (this->targetRobeRightRot.x != 0) { + if ((ABS_ALT(diffToTargetRobeRightRot) < 0x64) && (this->swordState == EN_JSO_SWORD_STATE_NONE_DRAWN)) { + this->swordState = EN_JSO_SWORD_STATE_RIGHT_DRAWN; + this->targetRightArmRot.x = -0x32C8; + this->targetRightArmRot.y = -0xBB8; + this->rightArmRot.z = this->targetRightArmRot.z = -0x32C8; + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_SWORD); + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809B0B70.s") + this->subCamEyeNext.x = player->actor.world.pos.x + 100.0f; + this->subCamEyeNext.y = player->actor.world.pos.y + 60.0f; + this->subCamEyeNext.z = player->actor.world.pos.z - 30.0f; + this->subCamAtNext.x = player->actor.world.pos.x - 35.0f; + this->subCamAtNext.y = player->actor.world.pos.y + 30.0f; + this->subCamAtNext.z = player->actor.world.pos.z - 40.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Jso/func_809B0BB0.s") + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + Message_CloseTextbox(play); + this->targetRightArmRot.x = this->targetRightArmRot.y = this->targetRightArmRot.z = + this->targetRobeRightRot.x = this->targetRobeRightRot.y = this->targetRobeRightRot.z = 0; + this->introCsTimer = 0; + this->introCsState++; + } + break; + + case EN_JSO_INTRO_CS_STATE_DRAW_LEFT_SWORD: + this->subCamEyeNext.x = player->actor.world.pos.x - 40.0f; + this->subCamEyeNext.y = player->actor.world.pos.y + 20.0f; + this->subCamEyeNext.z = player->actor.world.pos.z; + this->subCamAtNext.x = player->actor.world.pos.x - 30.0f; + this->subCamAtNext.y = player->actor.world.pos.y + 40.0f; + this->subCamAtNext.z = player->actor.world.pos.z - 130.0f; + this->introCsTimer++; + + if (this->introCsTimer >= 10) { + this->swordState = EN_JSO_SWORD_STATE_BOTH_DRAWN; + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_SWORD); + if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) { + EnEncount3* parent = (EnEncount3*)this->actor.parent; + + if (parent->actor.update != NULL) { + parent->unk148 = 1; + play->unk_18880 = 1; + } + } + + EnJso_ChangeAnim(this, EN_JSO_ANIM_IDLE); + this->introCsTimer = 0; + this->introCsState++; + } + break; + + case EN_JSO_INTRO_CS_STATE_ENDING: + this->subCamEyeNext.x = player->actor.world.pos.x - 40.0f; + this->subCamEyeNext.y = player->actor.world.pos.y + 20.0f; + this->subCamEyeNext.z = player->actor.world.pos.z; + this->subCamAtNext.x = player->actor.world.pos.x - 30.0f; + this->subCamAtNext.y = player->actor.world.pos.y + 40.0f; + this->subCamAtNext.z = player->actor.world.pos.z - 130.0f; + this->introCsTimer++; + + if (this->introCsTimer >= 10) { + func_800B7298(play, &this->actor, PLAYER_CSMODE_END); + CutsceneManager_Stop(this->csId); + this->rightArmRot.x = this->rightArmRot.y = this->rightArmRot.z = this->robeRightRot.x = + this->robeRightRot.y = this->robeRightRot.z = 0; + this->introCsState = EN_JSO_INTRO_CS_STATE_DONE_OR_STARTED; + this->subCamId = SUB_CAM_ID_DONE; + this->actor.flags &= ~ACTOR_FLAG_100000; + this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; + this->actor.flags |= ACTOR_FLAG_TARGETABLE; + this->actor.world.rot.y = this->actor.yawTowardsPlayer; + EnJso_SetupJumpBack(this); + } + break; + } + + Math_SmoothStepToS(&this->rightArmRot.x, this->targetRightArmRot.x, 1, 0xBB8, 0); + Math_SmoothStepToS(&this->rightArmRot.y, this->targetRightArmRot.y, 1, 0xBB8, 0); + Math_SmoothStepToS(&this->rightArmRot.z, this->targetRightArmRot.z, 1, 0xBB8, 0); + Math_SmoothStepToS(&this->robeRightRot.x, this->targetRobeRightRot.x, 1, 0xBB8, 0); + Math_SmoothStepToS(&this->robeRightRot.y, this->targetRobeRightRot.y, 1, 0xBB8, 0); + Math_SmoothStepToS(&this->robeRightRot.z, this->targetRobeRightRot.z, 1, 0xBB8, 0); + Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext); + Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext); + + if (this->subCamId != SUB_CAM_ID_DONE) { + this->subCamUp.x = 0.0f; + this->subCamUp.y = 1.0f; + this->subCamUp.z = 0.0f; + Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); + } +} + +void EnJso_SetupReappear(EnJso* this, PlayState* play) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_APPEAR); + this->actor.speed = 0.0f; + this->actor.velocity.y = 0.0f; + + if (this->isPlayerLockedOn) { + this->isPlayerLockedOn = false; + sIsPlayerLockedOn = false; + } + + if (this->isAttacking) { + this->isAttacking = false; + sIsAttacking = false; + } + + if (this->swordState != EN_JSO_SWORD_STATE_BOTH_DRAWN) { + this->swordState = EN_JSO_SWORD_STATE_BOTH_DRAWN; + } + + this->actor.shape.rot.x = this->actor.world.rot.x = 0; + this->actor.shape.rot.y = this->actor.world.rot.y = this->actor.yawTowardsPlayer; + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); + this->actor.floorHeight = this->actor.home.pos.y; + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f, 500, + 10, true); + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_ENTRY); + this->afterimageCount = 0; + this->action = EN_JSO_ACTION_REAPPEAR; + this->actor.gravity = 0.0f; + this->actionFunc = EnJso_Reappear; +} + +/** + * This function makes the Garo jump out of the ground from its home position. It's intended to be used if the Garo gets + * too far away from the player (for example, if the Garo's dash attack makes it fall off a ledge); this will ensure the + * Garo is back inside the ring of fire, so the player can interact with them again. + */ +void EnJso_Reappear(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (this->actor.colChkInfo.health <= 0) { + Player* player = GET_PLAYER(play); + + player->actor.freezeTimer = 3; + } + + Math_ApproachF(&this->actor.shape.shadowScale, 16.0f, 0.4f, 4.0f); + Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xBB8, 0x14); + + if ((play->gameplayFrames % 8) == 0) { + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f, + 500, 10, true); + } + + if (curFrame >= this->animEndFrame) { + this->actor.gravity = -3.0f; + if (this->actor.colChkInfo.health > 0) { + this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; + EnJso_SetupCirclePlayer(this, play); + } else { + EnJso_SetupFallDownAndTalk(this, play); + } + } +} + +void EnJso_SetupCirclePlayer(EnJso* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + EnJso_ChangeAnim(this, EN_JSO_ANIM_BOUNCE); + this->circlingAngularVelocity = 0x258; + this->action = EN_JSO_ACTION_CIRCLE_PLAYER; + this->circlingAngle = player->actor.shape.rot.y; + this->actionFunc = EnJso_CirclePlayer; +} + +/** + * Makes the Garo bounce in a circle around the player, sometimes randomly switching the direction it's traveling, until + * the attack wait timer reaches 0. Once it does, then the Garo will prepare to attack. + */ +void EnJso_CirclePlayer(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + Player* player = GET_PLAYER(play); + Vec3f targetPos; + s32 pad; + + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_MOVING - SFX_FLAG); + if ((this->action != EN_JSO_ACTION_REAPPEAR) && (this->action != EN_JSO_ACTION_HANDLE_INTRO_CUTSCENE) && + (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) > 60.0f)) { + EnJso_SetupReappear(this, play); + return; + } + + if (curFrame < this->animEndFrame) { + SkelAnime_Update(&this->skelAnime); + } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + SkelAnime_Update(&this->skelAnime); + } + + if (Animation_OnFrame(&this->skelAnime, 6.0f)) { + this->actor.velocity.y = 10.0f; + if ((play->gameplayFrames % 2) == 0) { + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_CRYING); + } + } + + if (Animation_OnFrame(&this->skelAnime, 12.0f)) { + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_SKIP); + this->actor.speed = 0.0f; + if (Rand_ZeroFloat(1.0f) < 0.5f) { + this->circlingAngularVelocity = -this->circlingAngularVelocity; + } + } + + //! @note: Since sIsPlayerLockedOn always mirrors the value of this->isPlayerLockedOn, the last part of this + //! if-statement is always true and has no impact on the logic. In other words, the Garo doesn't care whether or not + //! the player is locked on; it will attack regardless as long as the other conditions are met. + if ((this->attackWaitTimer == 0) && !sIsAttacking && (!sIsPlayerLockedOn || this->isPlayerLockedOn)) { + sIsAttacking = true; + this->isAttacking = true; + this->action = EN_JSO_ACTION_SPIN_BEFORE_ATTACK; + this->actor.speed = 0.0f; + EnJso_SetupSpinBeforeAttack(this); + return; + } + + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0x14); + Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 2.0f); + this->circlingAngle += this->circlingAngularVelocity; + targetPos.x = (Math_SinS(this->circlingAngle) * 200.0f) + player->actor.world.pos.x; + targetPos.y = this->actor.world.pos.y; + targetPos.z = (Math_CosS(this->circlingAngle) * 200.0f) + player->actor.world.pos.z; + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &targetPos), 0xA, 0xFA0, 0x14); +} + +void EnJso_SetupGuard(EnJso* this) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_GUARD); + this->action = EN_JSO_ACTION_GUARD; + this->actor.world.rot.y = this->actor.yawTowardsPlayer; + Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_BOUND); + this->bodyCollider.base.acFlags |= AC_HARD; + this->actionFunc = EnJso_Guard; +} + +/** + * Plays the guard animation to completion, then goes back to circling the player. + */ +void EnJso_Guard(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + this->isGuarding = false; + + if (this->isAttacking) { + this->isAttacking = false; + sIsAttacking = false; + } + + EnJso_SetupCirclePlayer(this, play); + } +} + +void EnJso_SetupSpinBeforeAttack(EnJso* this) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_DASH_ATTACK); + this->actor.world.rot.y = -this->actor.yawTowardsPlayer; + this->actor.speed = 10.0f; + this->actor.velocity.y = 20.0f; + this->actionFunc = EnJso_SpinBeforeAttack; +} + +/** + * Leaps into the air while spinning forward. Once the Garo touches the ground, it will begin a dash attack. + */ +void EnJso_SpinBeforeAttack(EnJso* this, PlayState* play) { + this->actor.world.rot.x += 0x1770; + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0x14); + + if (this->actor.velocity.y > 0.0f) { + return; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->actor.world.rot.x = 0; + this->actor.velocity.y = 0.0f; + this->actor.speed = 0.0f; + this->actor.world.rot.y = this->actor.shape.rot.y = this->actor.yawTowardsPlayer; + EnJso_SetupDashAttack(this); + } +} + +void EnJso_SetupDashAttack(EnJso* this) { + this->action = EN_JSO_ACTION_DASH_ATTACK; + this->dashAttackTimer = 40; + this->bodyCollider.base.colType = COLTYPE_HIT2; + this->bodyCollider.base.acFlags &= ~AC_HARD; + this->actor.speed = 15.0f; + this->actor.velocity.y = 13.0f; + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_ENTRY); + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_DASH_2); + this->actionFunc = EnJso_DashAttack; +} + +/** + * Dashes toward the player with its swords out. If the player shields the attack, the Garo will be knocked back and + * drop its swords. The Garo will stop dashing and perform a slash if it's close enough to the player, if the difference + * between its y-rotation and the yaw towards the player is large enough (usually indicating that it has dashed past the + * player), or if 40 frames have passed, whichever comes first. + */ +void EnJso_DashAttack(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + s16 yawDiff; + s16 absYawDiff; + Vec3f knockbackVelocity; + + if ((this->rightSwordCollider.base.atFlags & AT_BOUNCED) || (this->leftSwordCollider.base.atFlags & AT_BOUNCED)) { + this->rightSwordCollider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); + this->leftSwordCollider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); + if (this->swordState == EN_JSO_SWORD_STATE_BOTH_DRAWN) { + Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); + knockbackVelocity.x = 0.0f; + knockbackVelocity.y = 0.0f; + knockbackVelocity.z = -10.0f; + Matrix_MultVec3f(&knockbackVelocity, &this->knockbackVelocity); + this->swordState = EN_JSO_SWORD_STATE_KNOCKED_OUT_OF_HANDS; + this->dashAttackTimer = 0; + this->disableBlure = true; + AudioSfx_SetChannelIO(&this->actor.projectedPos, NA_SE_EN_ANSATSUSYA_DASH_2, 0); + EnJso_SetupKnockedBack(this); + return; + } + } + + if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + this->actor.velocity.y = 13.0f; + } + + if (curFrame < this->animEndFrame) { + return; + } + + yawDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; + absYawDiff = ABS_ALT(yawDiff); + + if ((this->dashAttackTimer == 0) || (this->actor.xzDistToPlayer < 100.0f) || (absYawDiff > 0x4300)) { + AudioSfx_SetChannelIO(&this->actor.projectedPos, NA_SE_EN_ANSATSUSYA_DASH_2, 0); + Math_ApproachZeroF(&this->actor.speed, 0.3f, 3.0f); + EnJso_SetupSlash(this, play); + } +} + +void EnJso_SetupSlash(EnJso* this, PlayState* play) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_SLASH_START); + this->action = EN_JSO_ACTION_SLASH; + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f, 500, + 10, true); + Math_ApproachZeroF(&this->actor.speed, 0.3f, 3.0f); + this->swordHitSomething = false; + Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_SWING_HARD); + this->actionFunc = EnJso_Slash; +} + +/** + * Slash in place with both swords. If the player shields the attack, the Garo will be knocked back and drop its swords. + * Once the slash animation ends, this function will transition the Garo to a waiting state. + */ +void EnJso_Slash(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_ApproachZeroF(&this->actor.speed, 0.5f, 5.0f); + + if ((play->gameplayFrames % 8) == 0) { + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f, + 500, 10, true); + } + + if ((this->rightSwordCollider.base.atFlags & AT_HIT) || (this->leftSwordCollider.base.atFlags & AT_HIT)) { + this->swordHitSomething = true; + this->rightSwordCollider.base.atFlags &= ~AT_HIT; + this->leftSwordCollider.base.atFlags &= ~AT_HIT; + } + + if ((this->rightSwordCollider.base.atFlags & AT_BOUNCED) || (this->leftSwordCollider.base.atFlags & AT_BOUNCED)) { + this->rightSwordCollider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); + this->leftSwordCollider.base.atFlags &= ~(AT_HIT | AT_BOUNCED); + + if (this->swordState == EN_JSO_SWORD_STATE_BOTH_DRAWN) { + Vec3f knockbackVelocity; + + Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); + knockbackVelocity.x = 0.0f; + knockbackVelocity.y = 0.0f; + knockbackVelocity.z = -10.0f; + Matrix_MultVec3f(&knockbackVelocity, &this->knockbackVelocity); + this->swordState = EN_JSO_SWORD_STATE_KNOCKED_OUT_OF_HANDS; + this->disableBlure = true; + EnJso_SetupKnockedBack(this); + return; + } + } + + if (curFrame >= this->animEndFrame) { + this->actor.speed = 0.0f; + this->disableBlure = true; + EnJso_SetupWaitAfterSlash(this); + } +} + +void EnJso_SetupWaitAfterSlash(EnJso* this) { + if (this->swordHitSomething) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_SLASH_LOOP); + this->timer = 20; + } else { + EnJso_ChangeAnim(this, EN_JSO_ANIM_SLASH_LOOP); + this->timer = 40; + } + + this->action = EN_JSO_ACTION_WAIT_AFTER_SLASH; + this->actionFunc = EnJso_WaitAfterSlash; +} + +/** + * Waits either 20 or 40 frames, depending on whether or not the Garo hit the player with its slash attack. Once this + * waiting period ends, the Garo starts circling the player again. + */ +void EnJso_WaitAfterSlash(EnJso* this, PlayState* play) { + if (this->timer == 0) { + this->attackWaitTimer = Rand_S16Offset(30, 30); + this->bodyCollider.base.colType = COLTYPE_NONE; + this->bodyCollider.base.acFlags |= AC_HARD; + this->swordHitSomething = false; + sIsAttacking = false; + this->isAttacking = false; + EnJso_SetupCirclePlayer(this, play); + } +} + +void EnJso_SetupKnockedBack(EnJso* this) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_KNOCKED_BACK); + this->bodyCollider.base.acFlags &= ~AC_HARD; + this->timer = 30; + this->action = EN_JSO_ACTION_KNOCKED_BACK; + this->actor.speed = 0.0f; + this->actionFunc = EnJso_KnockedBack; +} + +/** + * Plays the knocked back animation to completion, then transitions to cowering on the ground. + */ +void EnJso_KnockedBack(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + EnJso_SetupCower(this); + } +} + +void EnJso_SetupCower(EnJso* this) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_COWER); + this->action = EN_JSO_ACTION_COWER; + this->timer = 30; + this->actionFunc = EnJso_Cower; +} + +/** + * Cower on the ground for 30 frames, then jump back. + */ +void EnJso_Cower(EnJso* this, PlayState* play) { + if (this->timer == 0) { + EnJso_SetupJumpBack(this); + } +} + +/** + * Unlike most enemies, this will make the Garo play its damaged animation rather than stopping all animations. + */ +void EnJso_SetupStunned(EnJso* this) { + Vec3f knockbackVelocity; + + AudioSfx_SetChannelIO(&this->actor.projectedPos, NA_SE_EN_ANSATSUSYA_DASH_2, 0); + EnJso_ChangeAnim(this, EN_JSO_ANIM_DAMAGED); + + // This assignment is immediately overriden below. + this->timer = 30; + this->actor.speed = 0.0f; + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->drawDmgEffAlpha == 0)) { + this->drawDmgEffAlpha = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + this->timer = 40; + Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); + Matrix_MultVecZ(-10.0f, &knockbackVelocity); + Math_Vec3f_Copy(&this->knockbackVelocity, &knockbackVelocity); + this->action = EN_JSO_ACTION_STUNNED; + this->bodyCollider.base.acFlags &= ~AC_HARD; + this->actionFunc = EnJso_Stunned; +} + +/** + * Makes the Garo play its damaged animation and stop moving until 40 frames have passed, then it jumps back. + */ +void EnJso_Stunned(EnJso* this, PlayState* play) { + if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) { + if ((this->drawDmgEffAlpha != 0) && (this->drawDmgEffAlpha < 60)) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; + } + } + + if ((this->timer == 0) && (this->drawDmgEffAlpha == 0)) { + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_JSO_BODYPART_MAX, 2, 0.3f, 0.2f); + this->drawDmgEffAlpha = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + EnJso_SetupJumpBack(this); + } +} + +void EnJso_SetupDamaged(EnJso* this, PlayState* play) { + Vec3f knockbackVelocity; + + AudioSfx_SetChannelIO(&this->actor.projectedPos, NA_SE_EN_ANSATSUSYA_DASH_2, 0); + EnJso_ChangeAnim(this, EN_JSO_ANIM_DAMAGED); + this->swordHitSomething = false; + this->actor.velocity.y = 10.0f; + this->actor.speed = 0.0f; + Matrix_RotateYS(this->actor.yawTowardsPlayer, MTXMODE_NEW); + Matrix_MultVecZ(-20.0f, &knockbackVelocity); + Math_Vec3f_Copy(&this->knockbackVelocity, &knockbackVelocity); + + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->drawDmgEffAlpha != 0)) { + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_JSO_BODYPART_MAX, 2, 0.3f, 0.2f); + this->drawDmgEffAlpha = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8); + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_DAMAGE); + this->action = EN_JSO_ACTION_DAMAGED; + this->actionFunc = EnJso_Damaged; +} + +/** + * Plays the damaged animation until the Garo is touching the ground and no longer has its red color filter, at which + * point it will jump back. + */ +void EnJso_Damaged(EnJso* this, PlayState* play) { + if (this->actor.velocity.y > 0.0f) { + return; + } + + if ((this->actor.colorFilterTimer == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + EnJso_SetupJumpBack(this); + } +} + +void EnJso_SetupJumpBack(EnJso* this) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_JUMP_BACK); + this->action = EN_JSO_ACTION_JUMP_BACK; + this->timer = 30; + this->actor.speed = 7.0f; + this->actor.velocity.y = 20.0f; + + if (this->swordState != EN_JSO_SWORD_STATE_BOTH_DRAWN) { + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_SWORD); + this->swordState = EN_JSO_SWORD_STATE_BOTH_DRAWN; + } + + this->actor.world.rot.y += 0x8000; + this->actionFunc = EnJso_JumpBack; +} + +/** + * Jump backwards away from the player. After the Garo touches the ground, the jump back animation completes, and 30 + * frames have passed, the Garo will transition to circling the player. + */ +void EnJso_JumpBack(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xBB8, 0x14); + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->actor.speed = 0.0f; + } + + if ((this->timer == 0) || ((curFrame >= this->animEndFrame) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + this->actor.world.rot.x = 0; + this->actor.velocity.y = 0.0f; + this->actor.speed = 0.0f; + this->timer = 0; + sIsAttacking = false; + this->isAttacking = false; + this->actor.world.rot.y = this->actor.shape.rot.y; + this->attackWaitTimer = Rand_S16Offset(10, 10); + EnJso_SetupCirclePlayer(this, play); + } +} + +void EnJso_SetupDead(EnJso* this, PlayState* play) { + AudioSfx_SetChannelIO(&this->actor.projectedPos, NA_SE_EN_ANSATSUSYA_DASH_2, 0); + EnJso_ChangeAnim(this, EN_JSO_ANIM_DAMAGED); + + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->drawDmgEffAlpha == 0)) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + this->actor.flags &= ~(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY); + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + this->actor.speed = 0.0f; + this->disableBlure = true; + this->timer = 30; + Enemy_StartFinishingBlow(play, &this->actor); + Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_DEAD); + this->action = EN_JSO_ACTION_DEAD; + this->actionFunc = EnJso_Dead; +} + +/** + * Plays the damaged animation for 30 frames, then the Garo falls down and starts talking to the player. + */ +void EnJso_Dead(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + if (this->drawDmgEffAlpha != 0) { + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, EN_JSO_BODYPART_MAX, 2, 0.3f, 0.2f); + this->drawDmgEffAlpha = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } else { + return; + } + } + + if ((curFrame >= this->animEndFrame) && (this->timer == 0)) { + EnJso_SetupFallDownAndTalk(this, play); + } +} + +void EnJso_SetupFallDownAndTalk(EnJso* this, PlayState* play) { + EnJso_ChangeAnim(this, EN_JSO_ANIM_FALL_DOWN); + this->textIndex = 2; + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + this->actor.flags |= (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY); + func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_NPC); + this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; + this->actor.flags &= ~ACTOR_FLAG_100000; + this->action = EN_JSO_ACTION_FALL_DOWN_AND_TALK; + this->actionFunc = EnJso_FallDownAndTalk; +} + +/** + * Handles the first part of the dialogue the Garo gives when defeated. + */ +void EnJso_FallDownAndTalk(EnJso* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + Player* player = GET_PLAYER(play); + + if (curFrame < this->animEndFrame) { + return; + } + + if (!Play_InCsMode(play) && (play->msgCtx.msgLength == 0)) { + if (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 60.0f) { + Player* player2 = GET_PLAYER(play); + + this->actor.textId = sTextIds[this->textIndex]; + Message_StartTextbox(play, this->actor.textId, &this->actor); + player2->stateFlags1 |= PLAYER_STATE1_10000000; + player2->actor.freezeTimer = 3; + this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; + this->actionFunc = EnJso_TellHint; + } else { + EnJso_SetupReappear(this, play); + } + } +} + +/** + * Handles the second part of the dialogue the Garo gives when defeated involving its specific hint. If the player has + * the Elegy of Emptiness, then the Garo ignore its specific hint and will instead always tell them that the Elegy can + * be used to climb Stone Tower. Once the Garo has given its hint, this function will have it say one final piece of + * dialogue and prepare for it to burst into flames. + */ +void EnJso_TellHint(EnJso* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + player->actor.freezeTimer = 3; + + // Checking for Dawn of the Second Day, Night of the First Day, etc. messages + if ((play->msgCtx.currentTextId >= 0x1BB2) && (play->msgCtx.currentTextId < 0x1BB7)) { + this->actor.textId = sTextIds[this->textIndex]; + Message_StartTextbox(play, this->actor.textId, &this->actor); + return; + } + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + Message_CloseTextbox(play); + if (this->textIndex == 2) { + u16 textId = 0x139C; // Hint about using Elegy to climb Stone Tower + + switch (this->hintType) { + case EN_JSO_HINT_FREEZE_OCTOROKS: + textId = 0x139A; // Hint about freezing the Octoroks + break; + + case EN_JSO_HINT_FLATS_LOCATION: + textId = 0x139B; // Hint about Flat being in the Graveyard + break; + + case EN_JSO_HINT_VARIABLE_1: + textId = 0x139D; // Hint about Pamela's family being in the house with the waterwheel + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { + textId = 0x13A1; // Hint about using the Song of Healing on Pamela's father + } + break; + + case EN_JSO_HINT_VARIABLE_2: + textId = 0x139E; // Hint about Pamela leaving her house to check something + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { + textId = 0x13A2; // Hint about the well being connected to Ikana Castle + } + break; + + case EN_JSO_HINT_VARIABLE_3: + textId = 0x139F; // Hint about restoring the river by going into Sharp's cave + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { + textId = 0x13A3; // Hint about the Gibdos in the well wanting items + } + break; + + case EN_JSO_HINT_VARIABLE_4: + textId = 0x13A0; // Hint about needing the Song of Storms to pacify Sharp + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { + textId = 0x13A4; // Hint about the items the Gibdos want being in the well + } + break; + + case EN_JSO_HINT_DANCING_REDEADS: + textId = 0x13A5; // Hint about the Redeads being able to dance + break; + + case EN_JSO_HINT_DESTRUCTIBLE_CEILING_IN_CASTLE: + textId = 0x13A6; // Hint about the destructible ceiling in Ikana Castle + break; + + case EN_JSO_HINT_SECOND_ENTRANCE_TO_CASTLE: + textId = 0x13A7; // Hint about the second entrance to Ikana Castle + break; + + case EN_JSO_HINT_KING_WEAK_TO_MIRROR_SHIELD: + textId = 0x13A8; // Hint about using the Mirror Shield on Igos du Ikana + break; + + default: + break; + } + + if (CHECK_QUEST_ITEM(QUEST_SONG_ELEGY)) { + textId = 0x139C; // Hint about using Elegy to climb Stone Tower + } + + Message_ContinueTextbox(play, textId); + this->textIndex++; + } else if (this->textIndex == 3) { + Message_ContinueTextbox(play, sTextIds[this->textIndex]); + this->actionFunc = EnJso_BurstIntoFlames; + } + } +} + +/** + * Once the player closes the Garo's final textbox, this function will spawn nine green flames to obscure the Garo and + * kill the actor. + */ +void EnJso_BurstIntoFlames(EnJso* this, PlayState* play) { + Vec3f firePos; + Vec3f fireVelocityAndAccel[] = { + { 1.0f, 0.0f, 0.5f }, { 1.0f, 0.0f, -0.5f }, { -1.0f, 0.0f, 0.5f }, + { -1.0f, 0.0f, -0.5f }, { 0.5f, 0.0f, 1.0f }, { -0.5f, 0.0f, 1.0f }, + { 0.5f, 0.0f, -1.0f }, { -0.5f, 0.0f, -1.0f }, { 0.0f, 0.0f, 0.0f }, + }; + Player* player = GET_PLAYER(play); + f32 scale; + f32 scaleStep; + s32 i; + + player->actor.freezeTimer = 3; + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + Player* player2 = GET_PLAYER(play); + + Message_CloseTextbox(play); + for (i = 0; i < ARRAY_COUNT(fireVelocityAndAccel); i++) { + Math_Vec3f_Copy(&firePos, &this->actor.world.pos); + firePos.x += Rand_CenteredFloat(30.0f); + firePos.y = this->actor.floorHeight; + firePos.z += Rand_CenteredFloat(30.0f); + scale = (Rand_ZeroFloat(1.0f) * 100.0f) + 100.0f; + scaleStep = 20.0f; + func_800B3030(play, &firePos, &fireVelocityAndAccel[i], &fireVelocityAndAccel[i], scale, scaleStep, 1); + } + + SoundSource_PlaySfxEachFrameAtFixedWorldPos(play, &this->actor.world.pos, 10, + NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); + + sIsAttacking = false; + this->isAttacking = false; + if (this->isPlayerLockedOn) { + this->isPlayerLockedOn = false; + sIsPlayerLockedOn = false; + } + + player2->stateFlags1 &= ~PLAYER_STATE1_10000000; + Actor_Kill(&this->actor); + } +} + +void EnJso_UpdateDamage(EnJso* this, PlayState* play) { + s32 attackDealsDamage = false; + + if (this->bodyCollider.base.acFlags & AC_HIT) { + this->bodyCollider.base.acFlags &= ~AC_HIT; + if ((this->actor.colChkInfo.damageEffect == EN_JSO_DMGEFF_STUN) || + (this->actor.colChkInfo.damageEffect == EN_JSO_DMGEFF_ELECTRIC_STUN)) { + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->drawDmgEffAlpha == 0)) { + Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40); + if (this->actor.colChkInfo.damageEffect == EN_JSO_DMGEFF_ELECTRIC_STUN) { + this->drawDmgEffAlpha = 40; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL; + } + + EnJso_SetupStunned(this); + } + } else { + switch (this->action) { + case EN_JSO_ACTION_CIRCLE_PLAYER: + case EN_JSO_ACTION_GUARD: + this->actor.speed = 0.0f; + EnJso_SetupGuard(this); + attackDealsDamage = false; + break; + + case EN_JSO_ACTION_DASH_ATTACK: + case EN_JSO_ACTION_SLASH: + case EN_JSO_ACTION_WAIT_AFTER_SLASH: + case EN_JSO_ACTION_STUNNED: + case EN_JSO_ACTION_COWER: + switch (this->actor.colChkInfo.damageEffect) { + case EN_JSO_DMGEFF_NONE: + attackDealsDamage = true; + break; + + case EN_JSO_DMGEFF_FIRE: + this->drawDmgEffAlpha = 40; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + attackDealsDamage = true; + break; + + case EN_JSO_DMGEFF_LIGHT_ORB: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->drawDmgEffAlpha == 0)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, + this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, + CLEAR_TAG_PARAMS(CLEAR_TAG_LARGE_LIGHT_RAYS)); + this->drawDmgEffAlpha = 20; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; + attackDealsDamage = true; + } + break; + + case EN_JSO_DMGEFF_FREEZE: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->drawDmgEffAlpha == 0)) { + attackDealsDamage = false; + Actor_ApplyDamage(&this->actor); + this->drawDmgEffAlpha = 80; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX; + this->drawDmgEffScale = 0.0f; + this->drawDmgEffFrozenSteamScale = 1.5f; + } + + if (this->actor.colChkInfo.health <= 0) { + EnJso_SetupDead(this, play); + attackDealsDamage = false; + } else { + EnJso_SetupStunned(this); + attackDealsDamage = false; + } + break; + + default: + break; + } + break; + + default: + break; + } + + if (attackDealsDamage) { + Actor_ApplyDamage(&this->actor); + this->bodyCollider.base.colType = COLTYPE_NONE; + this->bodyCollider.base.acFlags |= AC_HARD; + if (this->actor.colChkInfo.health > 0) { + EnJso_SetupDamaged(this, play); + } else { + EnJso_SetupDead(this, play); + } + } + } + } +} + +void EnJso_Update(Actor* thisx, PlayState* play) { + EnJso* this = THIS; + s32 pad; + + if ((this->action != EN_JSO_ACTION_CIRCLE_PLAYER) && !this->disableAnimations) { + SkelAnime_Update(&this->skelAnime); + } + + EnJso_UpdateDamage(this, play); + if (this->actor.isLockedOn) { + sIsPlayerLockedOn = true; + this->isPlayerLockedOn = true; + } else if (this->isPlayerLockedOn) { + this->isPlayerLockedOn = false; + sIsPlayerLockedOn = false; + } + + this->actionFunc(this, play); + DECR(this->dashAttackTimer); + DECR(this->attackWaitTimer); + DECR(this->timer); + DECR(this->drawDmgEffAlpha); + + if (this->action != EN_JSO_ACTION_FALL_DOWN_AND_TALK) { + Actor_SetFocus(&this->actor, 50.0f); + } else { + Actor_SetFocus(&this->actor, 30.0f); + } + + Actor_SetScale(&this->actor, this->scale); + Actor_MoveWithGravity(&this->actor); + this->actor.world.pos.x += this->knockbackVelocity.x; + this->actor.world.pos.z += this->knockbackVelocity.z; + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + Math_ApproachZeroF(&this->knockbackVelocity.x, 1.0f, 2.0f); + Math_ApproachZeroF(&this->knockbackVelocity.z, 1.0f, 2.0f); + } + + if (this->action != EN_JSO_ACTION_REAPPEAR) { + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); + } + + if ((this->action == EN_JSO_ACTION_SPIN_BEFORE_ATTACK) || (this->action == EN_JSO_ACTION_DASH_ATTACK)) { + this->afterimageIndex++; + if (this->afterimageIndex >= EN_JSO_AFTERIMAGE_COUNT) { + this->afterimageIndex = 0; + } + + if (this->afterimageCount < EN_JSO_AFTERIMAGE_COUNT - 1) { + this->afterimageCount++; + } + + this->afterimagePos[this->afterimageIndex] = this->actor.world.pos; + this->afterimagePos[this->afterimageIndex].y += 40.0f; + this->afterimageRot[this->afterimageIndex] = this->actor.world.rot; + + { + s32 i; + + for (i = 0; i < EN_JSO_AFTERIMAGE_COUNT; i++) { + this->afterimageJointTable[this->afterimageIndex][i] = this->jointTable[i]; + } + } + } else { + this->afterimageCount = 0; + } + + if ((this->action != EN_JSO_ACTION_HANDLE_INTRO_CUTSCENE) && (this->action != EN_JSO_ACTION_CIRCLE_PLAYER) && + (this->action != EN_JSO_ACTION_SPIN_BEFORE_ATTACK) && (this->action != EN_JSO_ACTION_DAMAGED) && + (this->action != EN_JSO_ACTION_JUMP_BACK)) { + this->actor.shape.rot.y = this->actor.world.rot.y; + } + + this->actor.shape.rot.x = this->actor.world.rot.x; + Collider_UpdateCylinder(&this->actor, &this->bodyCollider); + + if ((this->action != EN_JSO_ACTION_HANDLE_INTRO_CUTSCENE) && (this->action != EN_JSO_ACTION_REAPPEAR) && + (this->action != EN_JSO_ACTION_DAMAGED) && (this->action != EN_JSO_ACTION_SPIN_BEFORE_ATTACK) && + (this->action != EN_JSO_ACTION_DEAD) && (this->action != EN_JSO_ACTION_FALL_DOWN_AND_TALK) && + (this->action != EN_JSO_ACTION_UNK_15)) { + CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base); + + if ((this->action == EN_JSO_ACTION_SLASH) && !this->swordHitSomething && + (this->swordState == EN_JSO_SWORD_STATE_BOTH_DRAWN)) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->rightSwordCollider.base); + CollisionCheck_SetAT(play, &play->colChkCtx, &this->leftSwordCollider.base); + } + } +} + +s32 EnJso_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnJso* this = THIS; + + if (limbIndex == GARO_LIMB_RIGHT_ARM) { + rot->x += this->rightArmRot.x; + rot->y += this->rightArmRot.y; + rot->z += this->rightArmRot.z; + } + + if (limbIndex == GARO_LIMB_ROBE_RIGHT) { + rot->x += this->robeRightRot.x; + rot->y += this->robeRightRot.y; + rot->z += this->robeRightRot.z; + } + + if ((limbIndex == GARO_LIMB_LEFT_SWORD) || (limbIndex == GARO_LIMB_RIGHT_SWORD)) { + if (this->swordState == EN_JSO_SWORD_STATE_NONE_DRAWN) { + *dList = NULL; + } else if (limbIndex == GARO_LIMB_LEFT_SWORD) { + if (this->swordState == EN_JSO_SWORD_STATE_RIGHT_DRAWN) { + *dList = NULL; + } + } else if ((limbIndex == GARO_LIMB_RIGHT_SWORD) && (this->swordState == EN_JSO_SWORD_STATE_LEFT_DRAWN)) { + *dList = NULL; + } + } + + return false; +} + +void EnJso_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + static Vec3f sSwordTipOffset = { 1600.0f, 0.0f, 0.0f }; + static Vec3f sSwordBaseOffset = { 0.0f, 0.0f, 0.0f }; + static Vec3f sSwordTipQuadOffset = { 1700.0f, 0.0f, 0.0f }; + static Vec3f sSwordBaseQuadOffset = { 0.0f, 0.0f, 0.0f }; + EnJso* this = THIS; + Vec3f swordTipPos; + Vec3f swordBasePos; + + Matrix_Push(); + + if (limbIndex == GARO_LIMB_LEFT_SWORD) { + if (this->swordState == EN_JSO_SWORD_STATE_KNOCKED_OUT_OF_HANDS) { + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_15), dList); + } + + Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); + Math_Vec3f_Copy(&this->leftSwordCollider.dim.quad[3], &this->leftSwordCollider.dim.quad[1]); + Math_Vec3f_Copy(&this->leftSwordCollider.dim.quad[2], &this->leftSwordCollider.dim.quad[0]); + Matrix_MultVec3f(&sSwordTipQuadOffset, &this->leftSwordCollider.dim.quad[1]); + Matrix_MultVec3f(&sSwordBaseQuadOffset, &this->leftSwordCollider.dim.quad[0]); + Collider_SetQuadVertices(&this->leftSwordCollider, &this->leftSwordCollider.dim.quad[0], + &this->leftSwordCollider.dim.quad[1], &this->leftSwordCollider.dim.quad[2], + &this->leftSwordCollider.dim.quad[3]); + Matrix_MultVec3f(&sSwordTipOffset, &swordTipPos); + Matrix_MultVec3f(&sSwordBaseOffset, &swordBasePos); + + if (((this->action == EN_JSO_ACTION_SLASH) || (this->action == EN_JSO_ACTION_DASH_ATTACK)) && + !this->disableBlure) { + EffectBlure_AddVertex(Effect_GetByIndex(this->leftSwordBlureIndex), &swordTipPos, &swordBasePos); + } else if (this->disableBlure == true) { + EffectBlure_AddSpace(Effect_GetByIndex(this->leftSwordBlureIndex)); + } + } + + if (limbIndex == GARO_LIMB_RIGHT_SWORD) { + if (this->swordState == EN_JSO_SWORD_STATE_KNOCKED_OUT_OF_HANDS) { + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_15), dList); + this->swordState = EN_JSO_SWORD_STATE_NONE_DRAWN; + } + + Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); + Math_Vec3f_Copy(&this->rightSwordCollider.dim.quad[3], &this->rightSwordCollider.dim.quad[1]); + Math_Vec3f_Copy(&this->rightSwordCollider.dim.quad[2], &this->rightSwordCollider.dim.quad[0]); + Matrix_MultVec3f(&sSwordTipQuadOffset, &this->rightSwordCollider.dim.quad[1]); + Matrix_MultVec3f(&sSwordBaseQuadOffset, &this->rightSwordCollider.dim.quad[0]); + Collider_SetQuadVertices(&this->rightSwordCollider, &this->rightSwordCollider.dim.quad[0], + &this->rightSwordCollider.dim.quad[1], &this->rightSwordCollider.dim.quad[2], + &this->rightSwordCollider.dim.quad[3]); + Matrix_MultVec3f(&sSwordTipOffset, &swordTipPos); + Matrix_MultVec3f(&sSwordBaseOffset, &swordBasePos); + + if (((this->action == EN_JSO_ACTION_SLASH) || (this->action == EN_JSO_ACTION_DASH_ATTACK)) && + !this->disableBlure) { + EffectBlure_AddVertex(Effect_GetByIndex(this->rightSwordBlureIndex), &swordTipPos, &swordBasePos); + } else if (this->disableBlure == true) { + EffectBlure_AddSpace(Effect_GetByIndex(this->rightSwordBlureIndex)); + this->disableBlure = false; + } + } + + if ((limbIndex == GARO_LIMB_LEFT_SWORD) || (limbIndex == GARO_LIMB_RIGHT_SWORD) || + (limbIndex == GARO_LIMB_ROBE_TOP) || (limbIndex == GARO_LIMB_ROBE_BACK) || (limbIndex == GARO_LIMB_ROBE_LEFT) || + (limbIndex == GARO_LIMB_ROBE_RIGHT) || (limbIndex == GARO_LIMB_ROBE_FRONT) || (limbIndex == GARO_LIMB_HEAD) || + (limbIndex == GARO_LIMB_RIGHT_THIGH) || (limbIndex == GARO_LIMB_RIGHT_FOOT) || + (limbIndex == GARO_LIMB_LEFT_THIGH) || (limbIndex == GARO_LIMB_LEFT_FOOT)) { + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartIndex]); + this->bodyPartIndex++; + if (this->bodyPartIndex >= EN_JSO_BODYPART_MAX) { + this->bodyPartIndex = 0; + } + } + + Matrix_Pop(); +} + +Gfx* EnJso_SetAfterimageRenderMode(GraphicsContext* gfxCtx) { + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; + + gDPSetRenderMode( + gfx++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A, + AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); + gSPEndDisplayList(gfx++); + + return gfxHead; +} + +void EnJso_Draw(Actor* thisx, PlayState* play) { + static s16 sAfterimageAlpha[EN_JSO_AFTERIMAGE_COUNT] = { + 128, 0, 0, 0, 0, 128, 0, 0, 0, 0, 128, 0, 0, 0, 0, 128, 0, 0, 0, 0, + }; + EnJso* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x0C, D_801AEFA0); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnJso_OverrideLimbDraw, EnJso_PostLimbDraw, &this->actor); + + if (this->afterimageCount > 0) { + s32 i; + s32 index = this->afterimageIndex; + + for (i = 0; i < this->afterimageCount; i++) { + if (sAfterimageAlpha[i] == 0) { + continue; + } + + Matrix_Translate(this->afterimagePos[index].x, this->afterimagePos[index].y, this->afterimagePos[index].z, + MTXMODE_NEW); + Matrix_Scale(this->scale, this->scale, this->scale, MTXMODE_APPLY); + //! @bug: These matrix rotation functions are supposed to be passed binangs, so using BINANG_TO_RAD here + //! is incorrect. Specifically, it results in rotation values far smaller than expected, since + //! BINANG_TO_RAD divides the angle by 0x8000. In-game, this bug manifests as the Garo's afterimages + //! looking the "wrong way", as they have a rotation close to (0, 0, 0) instead of matching the Garo's + //! rotation as intended. This bug can be fixed by using the correct matrix rotation functions (e.g., + //! Matrix_RotateYF instead of Matrix_RotateYS) or by removing BINANG_TO_RAD entirely. + Matrix_RotateYS(BINANG_TO_RAD(this->afterimageRot[index].y), MTXMODE_APPLY); + Matrix_RotateXS(BINANG_TO_RAD(this->afterimageRot[index].x), MTXMODE_APPLY); + Matrix_RotateZS(BINANG_TO_RAD(this->afterimageRot[index].z), MTXMODE_APPLY); + + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, sAfterimageAlpha[i]); + gSPSegment(POLY_XLU_DISP++, 0x0C, EnJso_SetAfterimageRenderMode(play->state.gfxCtx)); + POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->afterimageJointTable[index], + this->skelAnime.dListCount, NULL, NULL, &this->actor, POLY_XLU_DISP); + + index--; + if (index < 0) { + index = EN_JSO_AFTERIMAGE_COUNT - 1; + } + } + } + + if (this->drawDmgEffAlpha != 0) { + f32 drawDmgEffAlpha = this->drawDmgEffAlpha * 0.05f; + + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + this->drawDmgEffScale += 0.3f; + if (this->drawDmgEffScale > 0.5f) { + this->drawDmgEffScale = 0.5f; + } + + Math_ApproachF(&this->drawDmgEffFrozenSteamScale, this->drawDmgEffScale, 0.1f, 0.04f); + } else { + this->drawDmgEffScale = 0.8f; + this->drawDmgEffFrozenSteamScale = 0.8f; + } + + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, EN_JSO_BODYPART_MAX, this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, this->drawDmgEffType); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.h b/src/overlays/actors/ovl_En_Jso/z_en_jso.h index 7f5db0757..7f97e5008 100644 --- a/src/overlays/actors/ovl_En_Jso/z_en_jso.h +++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.h @@ -2,16 +2,107 @@ #define Z_EN_JSO_H #include "global.h" +#include "assets/objects/object_jso/object_jso.h" struct EnJso; +#define EN_JSO_GET_HINT_TYPE(thisx) ((thisx)->params) + +#define EN_JSO_AFTERIMAGE_COUNT 20 + typedef void (*EnJsoActionFunc)(struct EnJso*, PlayState*); +// For the four `VARIABLE` hint types, the former hint is used if the player hasn't restored the river in +// Ikana Canyon yet, and the latter hint is used if the player has. If the player has the Elegy of Emptiness, +// then all hints will be replaced with a hint telling the player to use the song to climb Stone Tower. +typedef enum { + /* 0 */ EN_JSO_HINT_FREEZE_OCTOROKS, + /* 1 */ EN_JSO_HINT_FLATS_LOCATION, + /* 2 */ EN_JSO_HINT_VARIABLE_1, // Hints that Pamela's family is in the house or that the Song of Healing can heal Pamela's father + /* 3 */ EN_JSO_HINT_VARIABLE_2, // Hints that Pamela leaves the house to check something or that the well is connected to Ikana Castle + /* 4 */ EN_JSO_HINT_VARIABLE_3, // Hints that they can restore the river by going to Sharp's cave or that the Gidbos in the well want items + /* 5 */ EN_JSO_HINT_VARIABLE_4, // Hints that they need to Song of Storms to stop Sharp or that the items the Gibdos want can be found in the well + /* 6 */ EN_JSO_HINT_DANCING_REDEADS, + /* 7 */ EN_JSO_HINT_DESTRUCTIBLE_CEILING_IN_CASTLE, + /* 8 */ EN_JSO_HINT_SECOND_ENTRANCE_TO_CASTLE, + /* 9 */ EN_JSO_HINT_KING_WEAK_TO_MIRROR_SHIELD +} EnJsoHintType; + +typedef enum { + /* 0 */ EN_JSO_BODYPART_LEFT_SWORD, + /* 1 */ EN_JSO_BODYPART_RIGHT_SWORD, + /* 2 */ EN_JSO_BODYPART_ROBE_TOP, + /* 3 */ EN_JSO_BODYPART_ROBE_BACK, + /* 4 */ EN_JSO_BODYPART_ROBE_LEFT, + /* 5 */ EN_JSO_BODYPART_ROBE_RIGHT, + /* 6 */ EN_JSO_BODYPART_ROBE_FRONT, + /* 7 */ EN_JSO_BODYPART_HEAD, + /* 8 */ EN_JSO_BODYPART_RIGHT_THIGH, + /* 9 */ EN_JSO_BODYPART_RIGHT_FOOT, + /* 10 */ EN_JSO_BODYPART_LEFT_THIGH, + /* 11 */ EN_JSO_BODYPART_LEFT_FOOT, + /* 12 */ EN_JSO_BODYPART_MAX +} EnJsoBodyPart; + + typedef struct EnJso { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x134]; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ Vec3s jointTable[GARO_LIMB_MAX]; + /* 0x200 */ Vec3s morphTable[GARO_LIMB_MAX]; /* 0x278 */ EnJsoActionFunc actionFunc; - /* 0x27C */ char unk_27C[0xD70]; + /* 0x27C */ s16 action; + /* 0x27E */ s16 circlingAngle; + /* 0x280 */ s16 circlingAngularVelocity; + /* 0x282 */ s16 dashAttackTimer; + /* 0x284 */ UNK_TYPE1 unk_284[0x2]; + /* 0x286 */ s16 attackWaitTimer; // while bouncing, the Garo cannot start an attack until this reaches 0 + /* 0x288 */ s16 timer; + /* 0x28A */ s16 isGuarding; // Set to false when the guard animation ends, never checked or set otherwise. Name is inferred based on how it's being set. + /* 0x28C */ s16 isPlayerLockedOn; + /* 0x28E */ s16 isAttacking; + /* 0x290 */ Vec3s robeRightRot; + /* 0x296 */ Vec3s targetRobeRightRot; + /* 0x29C */ Vec3s rightArmRot; + /* 0x2A2 */ Vec3s targetRightArmRot; + /* 0x2A8 */ s16 drawDmgEffAlpha; + /* 0x2AA */ s16 drawDmgEffType; + /* 0x2AC */ f32 drawDmgEffScale; + /* 0x2B0 */ f32 drawDmgEffFrozenSteamScale; + /* 0x2B4 */ Vec3f bodyPartsPos[EN_JSO_BODYPART_MAX]; + /* 0x344 */ s16 bodyPartIndex; + /* 0x346 */ s16 disableAnimations; // Checked but never set, so it's implicitly always false. Name is inferred based on how it's being checked. + /* 0x348 */ s16 textIndex; + /* 0x34A */ s16 hintType; + /* 0x34C */ u8 disableBlure; + /* 0x34D */ u8 swordState; + /* 0x34E */ u8 swordHitSomething; + /* 0x350 */ f32 animEndFrame; + /* 0x354 */ f32 scale; + /* 0x358 */ UNK_TYPE1 unk_358[0x4]; + /* 0x35C */ ColliderCylinder bodyCollider; + /* 0x3A8 */ ColliderQuad rightSwordCollider; + /* 0x428 */ ColliderQuad leftSwordCollider; + /* 0x4A8 */ s32 rightSwordBlureIndex; + /* 0x4AC */ s32 leftSwordBlureIndex; + /* 0x4B0 */ s16 afterimageIndex; + /* 0x4B4 */ s32 afterimageCount; + /* 0x4B8 */ s16 csId; + /* 0x4BC */ u32 introCsTimer; + /* 0x4C0 */ s16 introCsState; + /* 0x4C2 */ s16 subCamId; + /* 0x4C4 */ UNK_TYPE1 unk_4C4[0x4]; + /* 0x4C8 */ Vec3f subCamEye; + /* 0x4D4 */ Vec3f subCamAt; + /* 0x4E0 */ Vec3f subCamUp; + /* 0x4EC */ Vec3f subCamEyeNext; + /* 0x4F8 */ Vec3f subCamAtNext; + /* 0x504 */ UNK_TYPE1 unk_504[0x10]; + /* 0x514 */ s16 introCsType; + /* 0x518 */ Vec3f afterimagePos[EN_JSO_AFTERIMAGE_COUNT]; + /* 0x608 */ Vec3s afterimageRot[EN_JSO_AFTERIMAGE_COUNT]; + /* 0x680 */ Vec3s afterimageJointTable[EN_JSO_AFTERIMAGE_COUNT][GARO_LIMB_MAX]; + /* 0xFE0 */ Vec3f knockbackVelocity; // Adds a little push backwards when the Garo is bounced off the player's shield, damaged, or stunned } EnJso; // size = 0xFEC #endif // Z_EN_JSO_H diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.h b/src/overlays/actors/ovl_En_Part/z_en_part.h index 5bd4de503..4a766276d 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.h +++ b/src/overlays/actors/ovl_En_Part/z_en_part.h @@ -5,6 +5,8 @@ struct EnPart; +#define ENPART_PARAMS(type) (type) + typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*); typedef enum { diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index 226aec92b..fdda7ed14 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -5,8 +5,9 @@ */ #include "z_en_rail_skb.h" -#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #include "objects/object_skb/object_skb.h" +#include "overlays/actors/ovl_En_Part/z_en_part.h" +#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10) @@ -1119,10 +1120,10 @@ void EnRailSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Collider_UpdateSpheres(limbIndex, &this->collider); if ((limbIndex == 11) && (this->unk_402 & 1) && !(this->unk_402 & 2)) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); this->unk_402 |= 2; } else if ((this->unk_402 & 0x40) && ((limbIndex != 11) || !(this->unk_402 & 1)) && (limbIndex != 12)) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); } if (this->drawDmgEffTimer != 0) { diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index 08b1ad240..eaf5b88d3 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -6,6 +6,7 @@ #include "z_en_sb.h" #include "objects/object_sb/object_sb.h" +#include "overlays/actors/ovl_En_Part/z_en_part.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) @@ -388,13 +389,13 @@ void EnSb_Update(Actor* thisx, PlayState* play) { } void EnSb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { - s8 phi_a2; + s8 partParams; EnSb* this = THIS; if (this->isDrawn) { if (limbIndex < 7) { - phi_a2 = (this->actor.depthInWater > 0) ? 4 : 1; - Actor_SpawnBodyParts(thisx, play, phi_a2, dList); + partParams = (this->actor.depthInWater > 0) ? ENPART_PARAMS(ENPART_TYPE_4) : ENPART_PARAMS(ENPART_TYPE_1); + Actor_SpawnBodyParts(thisx, play, partParams, dList); } if (limbIndex == 6) { this->isDrawn = false; diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 98223faea..e2f40f35c 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -5,9 +5,10 @@ */ #include "z_en_skb.h" -#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" -#include "overlays/actors/ovl_En_Encount4/z_en_encount4.h" #include "objects/object_skb/object_skb.h" +#include "overlays/actors/ovl_En_Encount4/z_en_encount4.h" +#include "overlays/actors/ovl_En_Part/z_en_part.h" +#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) @@ -1106,12 +1107,12 @@ void EnSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Collider_UpdateSpheres(limbIndex, &this->collider); if ((this->unk_3D8 & 1) && !(this->unk_3D8 & 2)) { if (limbIndex == 11) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); this->unk_3D8 |= 2; } } else if ((this->unk_3D8 & 0x40) && !(this->unk_3D8 & 0x80) && ((limbIndex != 11) || !(this->unk_3D8 & 1)) && (limbIndex != 12)) { - Actor_SpawnBodyParts(&this->actor, play, 1, dList); + Actor_SpawnBodyParts(&this->actor, play, ENPART_PARAMS(ENPART_TYPE_1), dList); } if (this->drawDmgEffTimer != 0) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index a902899ea..323b6a014 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8846,45 +8846,45 @@ 0x809AD614:("EnEncount3_Draw",), 0x809AD8E0:("EnJso_Init",), 0x809ADB24:("EnJso_Destroy",), - 0x809ADBC8:("func_809ADBC8",), - 0x809ADC7C:("func_809ADC7C",), - 0x809ADCB8:("func_809ADCB8",), - 0x809AE754:("func_809AE754",), - 0x809AE87C:("func_809AE87C",), - 0x809AE9B0:("func_809AE9B0",), - 0x809AEA08:("func_809AEA08",), - 0x809AECA8:("func_809AECA8",), - 0x809AED00:("func_809AED00",), - 0x809AED54:("func_809AED54",), - 0x809AEDAC:("func_809AEDAC",), - 0x809AEE44:("func_809AEE44",), - 0x809AEEC0:("func_809AEEC0",), - 0x809AF064:("func_809AF064",), - 0x809AF110:("func_809AF110",), - 0x809AF28C:("func_809AF28C",), - 0x809AF2F8:("func_809AF2F8",), - 0x809AF368:("func_809AF368",), - 0x809AF3C0:("func_809AF3C0",), - 0x809AF3FC:("func_809AF3FC",), - 0x809AF440:("func_809AF440",), - 0x809AF470:("func_809AF470",), - 0x809AF53C:("func_809AF53C",), - 0x809AF5F8:("func_809AF5F8",), - 0x809AF714:("func_809AF714",), - 0x809AF76C:("func_809AF76C",), - 0x809AF7F4:("func_809AF7F4",), - 0x809AF8D0:("func_809AF8D0",), - 0x809AF99C:("func_809AF99C",), - 0x809AFA58:("func_809AFA58",), - 0x809AFAF4:("func_809AFAF4",), - 0x809AFC10:("func_809AFC10",), - 0x809AFE38:("func_809AFE38",), - 0x809B0034:("func_809B0034",), + 0x809ADBC8:("EnJso_ChangeAnim",), + 0x809ADC7C:("EnJso_SetupHandleIntroCutscene",), + 0x809ADCB8:("EnJso_HandleIntroCutscene",), + 0x809AE754:("EnJso_SetupReappear",), + 0x809AE87C:("EnJso_Reappear",), + 0x809AE9B0:("EnJso_SetupCirclePlayer",), + 0x809AEA08:("EnJso_CirclePlayer",), + 0x809AECA8:("EnJso_SetupGuard",), + 0x809AED00:("EnJso_Guard",), + 0x809AED54:("EnJso_SetupSpinBeforeAttack",), + 0x809AEDAC:("EnJso_SpinBeforeAttack",), + 0x809AEE44:("EnJso_SetupDashAttack",), + 0x809AEEC0:("EnJso_DashAttack",), + 0x809AF064:("EnJso_SetupSlash",), + 0x809AF110:("EnJso_Slash",), + 0x809AF28C:("EnJso_SetupWaitAfterSlash",), + 0x809AF2F8:("EnJso_WaitAfterSlash",), + 0x809AF368:("EnJso_SetupKnockedBack",), + 0x809AF3C0:("EnJso_KnockedBack",), + 0x809AF3FC:("EnJso_SetupCower",), + 0x809AF440:("EnJso_Cower",), + 0x809AF470:("EnJso_SetupStunned",), + 0x809AF53C:("EnJso_Stunned",), + 0x809AF5F8:("EnJso_SetupDamaged",), + 0x809AF714:("EnJso_Damaged",), + 0x809AF76C:("EnJso_SetupJumpBack",), + 0x809AF7F4:("EnJso_JumpBack",), + 0x809AF8D0:("EnJso_SetupDead",), + 0x809AF99C:("EnJso_Dead",), + 0x809AFA58:("EnJso_SetupFallDownAndTalk",), + 0x809AFAF4:("EnJso_FallDownAndTalk",), + 0x809AFC10:("EnJso_TellHint",), + 0x809AFE38:("EnJso_BurstIntoFlames",), + 0x809B0034:("EnJso_UpdateDamage",), 0x809B02CC:("EnJso_Update",), - 0x809B0734:("func_809B0734",), - 0x809B0820:("func_809B0820",), - 0x809B0B70:("func_809B0B70",), - 0x809B0BB0:("func_809B0BB0",), + 0x809B0734:("EnJso_OverrideLimbDraw",), + 0x809B0820:("EnJso_PostLimbDraw",), + 0x809B0B70:("EnJso_SetAfterimageRenderMode",), + 0x809B0BB0:("EnJso_Draw",), 0x809B1550:("func_809B1550",), 0x809B162C:("ObjChikuwa_Init",), 0x809B179C:("ObjChikuwa_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index ad17bf28b..2602149cf 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9487,21 +9487,21 @@ 0x809AD82C:("D_809AD82C","f32","",0x4), 0x809AD830:("D_809AD830","f32","",0x4), 0x809AD834:("D_809AD834","f32","",0x4), - 0x809B0F40:("D_809B0F40","UNK_TYPE4","",0x4), - 0x809B0F44:("D_809B0F44","UNK_TYPE4","",0x4), - 0x809B0F48:("D_809B0F48","UNK_TYPE1","",0x1), - 0x809B0F68:("En_Jso_InitVars","UNK_TYPE1","",0x1), - 0x809B0F88:("D_809B0F88","UNK_TYPE1","",0x1), - 0x809B0FB4:("D_809B0FB4","UNK_TYPE1","",0x1), - 0x809B1004:("D_809B1004","UNK_TYPE1","",0x1), - 0x809B100C:("D_809B100C","UNK_TYPE1","",0x1), - 0x809B103C:("D_809B103C","UNK_TYPE1","",0x1), - 0x809B1048:("D_809B1048","UNK_TYPE4","",0x4), - 0x809B10B4:("D_809B10B4","UNK_TYPE1","",0x1), - 0x809B10C0:("D_809B10C0","UNK_TYPE1","",0x1), - 0x809B10CC:("D_809B10CC","UNK_TYPE1","",0x1), - 0x809B10D8:("D_809B10D8","UNK_TYPE1","",0x1), - 0x809B10E4:("D_809B10E4","UNK_TYPE2","",0x2), + 0x809B0F40:("sIsAttacking","s32","",0x4), + 0x809B0F44:("sIsPlayerLockedOn","s32","",0x4), + 0x809B0F48:("sDamageTable","DamageTable","",0x20), + 0x809B0F68:("En_Jso_InitVars","ActorInit","",0x20), + 0x809B0F88:("sCylinderInit","ColliderCylinderInit","",0x2C), + 0x809B0FB4:("sQuadInit","ColliderQuadInit","",0x50), + 0x809B1004:("sTextIds","u16","[4]",0x8), + 0x809B100C:("sAnimations","AnimationHeader*","[12]",0x30), + 0x809B103C:("sAnimationModes","u8","[12]",0xC), + 0x809B1048:("fireVelocityAndAccel","Vec3f","[9]",0x6C), + 0x809B10B4:("sSwordTipOffset","Vec3f","",0xC), + 0x809B10C0:("sSwordBaseOffset","Vec3f","",0xC), + 0x809B10CC:("sSwordTipQuadOffset","Vec3f","",0xC), + 0x809B10D8:("sSwordBaseQuadOffset","Vec3f","",0xC), + 0x809B10E4:("sAfterimageAlpha","s16","[20]",0x28), 0x809B1110:("D_809B1110","f32","",0x4), 0x809B1114:("jtbl_809B1114","UNK_PTR","",0x4), 0x809B112C:("D_809B112C","f32","",0x4), diff --git a/undefined_syms.txt b/undefined_syms.txt index 010f94c05..3a630cd3d 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -462,11 +462,6 @@ D_06015C28 = 0x06015C28; D_060156D8 = 0x060156D8; D_06016720 = 0x06016720; -// ovl_En_Jso - -D_060081F4 = 0x060081F4; -D_0600AA00 = 0x0600AA00; - // ovl_En_Jso2 D_06002ED8 = 0x06002ED8; From f545f164b4bd26a3438b6f5251042b558986268f Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 15 Oct 2023 19:59:25 +1100 Subject: [PATCH 72/74] Switch Flag "None" macro (#1412) * switch flag none * cleanup brackets * individual actor switch flag none * missed some, small cleanup * <= 0x80 --- include/z64actor.h | 2 ++ src/code/z_actor.c | 6 +++--- .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 4 ++-- src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c | 6 +++--- src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c | 6 +++--- src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c | 6 +++--- src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c | 6 +++--- src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c | 6 +++--- src/overlays/actors/ovl_En_Bal/z_en_bal.c | 2 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 4 ++-- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 6 ++++-- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 12 +++++------ .../actors/ovl_En_Daiku2/z_en_daiku2.h | 1 + src/overlays/actors/ovl_En_Egol/z_en_egol.c | 8 ++++---- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 1 + .../actors/ovl_En_Encount2/z_en_encount2.c | 8 ++++---- .../actors/ovl_En_Encount2/z_en_encount2.h | 6 ++++-- .../actors/ovl_En_Encount3/z_en_encount3.c | 10 +++++----- .../actors/ovl_En_Encount3/z_en_encount3.h | 2 ++ .../actors/ovl_En_Encount4/z_en_encount4.c | 20 +++++++++---------- .../actors/ovl_En_Encount4/z_en_encount4.h | 6 ++++-- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 8 ++++---- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 1 + .../z_en_invisible_ruppe.c | 8 ++++---- .../z_en_invisible_ruppe.h | 2 ++ .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 8 ++++---- .../actors/ovl_En_Kaizoku/z_en_kaizoku.h | 8 +++++--- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 8 ++++---- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.h | 3 ++- src/overlays/actors/ovl_En_Mnk/z_en_mnk.c | 2 +- src/overlays/actors/ovl_En_Mnk/z_en_mnk.h | 1 + .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 8 ++++---- .../ovl_En_Okarina_Tag/z_en_okarina_tag.h | 2 ++ .../actors/ovl_En_Onpuman/z_en_onpuman.c | 4 ++-- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 10 +++++----- src/overlays/actors/ovl_En_Raf/z_en_raf.h | 2 ++ .../actors/ovl_En_S_Goro/z_en_s_goro.c | 4 ++-- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 6 +++--- .../ovl_En_Stop_heishi/z_en_stop_heishi.h | 2 ++ .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 8 ++++---- .../ovl_En_Talk_Gibud/z_en_talk_gibud.h | 2 ++ src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 8 ++++---- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 ++ src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c | 2 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 6 +++--- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h | 2 ++ .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 6 +++--- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h | 2 ++ src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c | 2 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 2 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 14 +++++++------ .../actors/ovl_Obj_Syokudai/z_obj_syokudai.h | 12 ++++++----- 52 files changed, 160 insertions(+), 123 deletions(-) diff --git a/include/z64actor.h b/include/z64actor.h index b3e1fe77e..5d072d253 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -370,6 +370,8 @@ typedef struct ActorSharedMemoryEntry { /* 0x4 */ void* ptr; } ActorSharedMemoryEntry; // size = 0x8 +#define SWITCH_FLAG_NONE -1 + typedef struct ActorContextSceneFlags { /* 0x00 */ u32 switches[4]; // First 0x40 are permanent, second 0x40 are temporary /* 0x10 */ u32 chest; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index e1c13ae4a..b48484687 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -728,7 +728,7 @@ void Target_Update(TargetContext* targetCtx, Player* player, Actor* lockOnActor, * Tests if a current scene switch flag is set. */ s32 Flags_GetSwitch(PlayState* play, s32 flag) { - if ((flag >= 0) && (flag < 0x80)) { + if ((flag > SWITCH_FLAG_NONE) && (flag < 0x80)) { return play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F)); } return 0; @@ -738,7 +738,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { * Sets a current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { - if ((flag >= 0) && (flag < 0x80)) { + if ((flag > SWITCH_FLAG_NONE) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F); } } @@ -747,7 +747,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) { * Unsets a current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { - if ((flag >= 0) && (flag < 0x80)) { + if ((flag > SWITCH_FLAG_NONE) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] &= ~(1 << (flag & 0x1F)); } } diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c index 18063efce..cbeea4911 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c @@ -74,7 +74,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { } if (actorAsSwitch->isPressed) { switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(&actorAsSwitch->dyna.actor); - if ((switchFlag >= 0) && (switchFlag < 0x80)) { + if ((switchFlag > SWITCH_FLAG_NONE) && (switchFlag < 0x80)) { pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F); if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) && !Flags_GetSwitch(play, switchFlag)) { @@ -88,7 +88,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && (actor->update != NULL)) { switchFlag = BGF40SWITCH_GET_SWITCH_FLAG(actor); - if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && + if ((switchFlag > SWITCH_FLAG_NONE) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && !(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) { Flags_UnsetSwitch(play, switchFlag); } diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c index f2089ca03..eb1d5761e 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c @@ -40,8 +40,8 @@ void ElfMsg_SetupAction(ElfMsg* this, ElfMsgActionFunc actionFunc) { } s32 func_8092DF9C(ElfMsg* this, PlayState* play) { - if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && - (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { + if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y <= 0x80) && + Flags_GetSwitch(play, this->actor.home.rot.y - 1)) { (void)"共倒れ"; // "Collapse together" if (ELFMSG_GET_SWITCH_FLAG(&this->actor) != 0x7F) { Flags_SetSwitch(play, ELFMSG_GET_SWITCH_FLAG(&this->actor)); @@ -144,7 +144,7 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) { } if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) || - (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) { + Flags_GetSwitch(play, -1 - this->actor.home.rot.y)) { this->actionFunc(this, play); } } diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c index 552478ace..409202468 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -40,8 +40,8 @@ void ElfMsg2_SetupAction(ElfMsg2* this, ElfMsg2ActionFunc actionFunc) { } s32 func_8096EC4C(ElfMsg2* this, PlayState* play) { - if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && - (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { + if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y <= 0x80) && + Flags_GetSwitch(play, this->actor.home.rot.y - 1)) { (void)"共倒れ"; // "Collapse together" if (ELFMSG2_GET_SWITCH_FLAG(&this->actor) != 0x7F) { Flags_SetSwitch(play, ELFMSG2_GET_SWITCH_FLAG(&this->actor)); @@ -135,7 +135,7 @@ void func_8096EF98(ElfMsg2* this, PlayState* play) { void func_8096EFD0(ElfMsg2* this, PlayState* play) { if ((this->actor.home.rot.y < 0) && (this->actor.home.rot.y >= -0x80) && - (Flags_GetSwitch(play, -this->actor.home.rot.y - 1))) { + Flags_GetSwitch(play, -this->actor.home.rot.y - 1)) { ElfMsg2_SetupAction(this, func_8096EF98); this->actor.flags |= (ACTOR_FLAG_40000 | ACTOR_FLAG_TARGETABLE); this->actor.textId = func_8096EE50(this); diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c index b7b349dfe..ba8256361 100644 --- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c +++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c @@ -39,8 +39,8 @@ void ElfMsg3_SetupAction(ElfMsg3* this, ElfMsg3ActionFunc actionFunc) { } s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) { - if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && - (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { + if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y <= 0x80) && + Flags_GetSwitch(play, this->actor.home.rot.y - 1)) { (void)"共倒れ"; // "Collapse together" if (ELFMSG3_GET_SWITCH_FLAG(&this->actor) != 0x7F) { Flags_SetSwitch(play, ELFMSG3_GET_SWITCH_FLAG(&this->actor)); @@ -142,7 +142,7 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play) { } if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) || - (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) { + Flags_GetSwitch(play, -1 - this->actor.home.rot.y)) { this->actionFunc(this, play); } } diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c index 423f8c351..5f1f0d3dc 100644 --- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c +++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c @@ -40,8 +40,8 @@ static InitChainEntry sInitChain[] = { }; s32 func_80AFD380(ElfMsg4* this, PlayState* play) { - if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && - (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { + if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y <= 0x80) && + Flags_GetSwitch(play, this->actor.home.rot.y - 1)) { (void)"共倒れ"; // "Collapse together" if (ELFMSG4_GET_SWITCH_FLAG(&this->actor) != 0x7F) { Flags_SetSwitch(play, ELFMSG4_GET_SWITCH_FLAG(&this->actor)); @@ -169,7 +169,7 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) { } if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) || - (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) { + Flags_GetSwitch(play, -1 - this->actor.home.rot.y)) { this->actionFunc(this, play); } } diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c index c44ab8e0a..236933fc9 100644 --- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c +++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c @@ -35,8 +35,8 @@ static InitChainEntry sInitChainsInitChain[] = { }; s32 func_80AFD990(ElfMsg5* this, PlayState* play) { - if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y < 0x81) && - (Flags_GetSwitch(play, this->actor.home.rot.y - 1))) { + if ((this->actor.home.rot.y > 0) && (this->actor.home.rot.y <= 0x80) && + Flags_GetSwitch(play, this->actor.home.rot.y - 1)) { (void)"共倒れ"; // Collapse together if (ELFMSG5_GET_SWITCH_FLAG(&this->actor) != 0x7F) { Flags_SetSwitch(play, ELFMSG5_GET_SWITCH_FLAG(&this->actor)); @@ -87,7 +87,7 @@ void ElfMsg5_Update(Actor* thisx, PlayState* play) { ElfMsg5* this = THIS; if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) || - (Flags_GetSwitch(play, -this->actor.home.rot.y - 1))) { + Flags_GetSwitch(play, -this->actor.home.rot.y - 1)) { this->actionFunc(this, play); } } diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.c b/src/overlays/actors/ovl_En_Bal/z_en_bal.c index 490517e09..95b495124 100644 --- a/src/overlays/actors/ovl_En_Bal/z_en_bal.c +++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.c @@ -864,7 +864,7 @@ void EnBal_TryPurchaseMap(EnBal* this, PlayState* play) { void EnBal_HandleConversation(EnBal* this, PlayState* play) { if (((this->textId != 0x1D07) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && - (Message_ShouldAdvance(play))) { + Message_ShouldAdvance(play)) { switch (this->textId) { case 0x1D00: Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, TINGLE_ANIM_TALK); diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index e754ff5b8..4fa521de3 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -222,7 +222,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) { this->mainColor.b = 210; this->mainColor.a = 0; // fully invisible - if ((this->switchFlag != 0xFF) && (Flags_GetSwitch(play, this->switchFlag))) { + if ((this->switchFlag != BIG_POE_SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); } @@ -756,7 +756,7 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) { void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND || this->actor.floorHeight == BGCHECK_Y_MIN) { - if (this->switchFlag != 0xFF) { + if (this->switchFlag != BIG_POE_SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index d5bdaf1e8..6fd0db8a3 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -8,6 +8,10 @@ struct EnBigpo; typedef void (*EnBigPoActionFunc)(struct EnBigpo*, PlayState*); +#define BIG_POE_GET_SWITCH_FLAG(thisx) (u8)((thisx)->params >> 0x8) + +#define BIG_POE_SWITCH_FLAG_NONE 0xFF + typedef enum BigPoeBodyPart { /* 0 */ BIG_POE_BODYPART_0, /* 1 */ BIG_POE_BODYPART_1, @@ -75,6 +79,4 @@ typedef enum EnBigpoType { /* 5 */ BIG_POE_TYPE_UNK5 } EnBigpoType; -#define BIG_POE_GET_SWITCH_FLAG(thisx) (u8)((thisx)->params >> 0x8) - #endif // Z_EN_BIGPO_H diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index 1e322650e..90d8673f6 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -97,8 +97,8 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { return; } - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENDAIKU2_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } else if (Flags_GetSwitch(play, this->switchFlag)) { this->unk_25C = this->path->count - 1; func_80BE61D0(this); @@ -185,7 +185,7 @@ s32 func_80BE64C0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); bomb = (EnBom*)Actor_FindNearby(play, &this->actor, -1, ACTORCAT_EXPLOSIVES, BREG(7) + 240.0f); Math_Vec3f_Copy(&this->actor.world.pos, &sp30); - if ((this->switchFlag >= 0) && !Flags_GetSwitch(play, this->switchFlag) && (bomb != NULL) && + if ((this->switchFlag > SWITCH_FLAG_NONE) && !Flags_GetSwitch(play, this->switchFlag) && (bomb != NULL) && (bomb->actor.id == ACTOR_EN_BOM)) { if (!bomb->isPowderKeg) { this->actor.textId = 0x32D3; @@ -228,7 +228,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { } this->unk_264 = 1.0f; - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -251,7 +251,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0); if (sp98 != 2) { - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); @@ -433,7 +433,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3); } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->unk_28A = 5; if (this->animIndex != ENDAIKU2_ANIM_10) { EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10); diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index c047b6577..a462d854f 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -12,6 +12,7 @@ typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); #define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F) #define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1) +#define ENDAIKU2_SWITCH_FLAG_NONE 0x7F #define ENDAIKU2_PATH_INDEX_NONE 0x3F typedef struct EnDaiku2Effect { diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 775a14eb5..9d5c148f9 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -482,10 +482,10 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[5], 2100, -300, 0, 37, 1.0f); this->switchFlag = EYEGORE_GET_SWITCH_FLAG(&this->actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == EYEGORE_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag > -1) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -1096,7 +1096,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { Play_SetCameraAtEye(play, this->subCamId, &this->subCamEye, &this->subCamAt); Play_SetCameraFov(play, this->subCamId, this->subCamFov); if ((this->action == EYEGORE_ACTION_DEAD) && (this->waitTimer == 1)) { - if (this->switchFlag > -1) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } CutsceneManager_Stop(this->actor.csId); diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index 0861ce580..66c828922 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -12,6 +12,7 @@ typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); #define EYEGORE_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) #define EYEGORE_PATH_INDEX_NONE 0x3F +#define EYEGORE_SWITCH_FLAG_NONE 0x7F #define EYEGORE_PARAMS(switch, pathIndex) ((((switch) & 0x7F) << 6) | ((pathIndex) & 0x3F)) diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c index c840c33e1..e56252b43 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -117,11 +117,11 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) { this->scale = 0.1f; this->switchFlag = ENCOUNT2_GET_SWITCH_FLAG(&this->dyna.actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENCOUNT2_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->dyna.actor); return; } @@ -180,7 +180,7 @@ void EnEncount2_Popped(EnEncount2* this, PlayState* play) { void EnEncount2_Die(EnEncount2* this, PlayState* play) { if (this->deathTimer == 0) { - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } Actor_Kill(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h index 0a9cb1394..12eb62428 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h @@ -7,6 +7,10 @@ struct EnEncount2; typedef void (*EnEncount2ActionFunc)(struct EnEncount2*, PlayState*); +#define ENCOUNT2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + +#define ENCOUNT2_SWITCH_FLAG_NONE 0x7F + typedef struct EnEncount2Effect{ /* 0x00 */ u8 isEnabled; /* 0x04 */ Vec3f pos; @@ -33,6 +37,4 @@ typedef struct EnEncount2 { /* 0x01D0 */ EnEncount2Effect effects[EN_ENCOUNT2_EFFECT_COUNT]; } EnEncount2; // size = 0x2A70 -#define ENCOUNT2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) - #endif // Z_EN_ENCOUNT2_H diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c index fa37bcb38..61ff3039f 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c @@ -49,10 +49,10 @@ void EnEncount3_Init(Actor* thisx, PlayState* play) { } else if (this->unk16C > 1000.0f) { this->unk16C = 1000.0f; } - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENCOUNT3_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; @@ -71,7 +71,7 @@ void func_809AD058(EnEncount3* this) { } void func_809AD084(EnEncount3* this, PlayState* play) { - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -94,7 +94,7 @@ void func_809AD084(EnEncount3* this, PlayState* play) { void func_809AD194(EnEncount3* this, PlayState* play) { if (this->unk14E == 0) { this->unk178 = 0.0f; - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } this->actionFunc = func_809AD1EC; diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h index 9e8bd01ad..cd1df694b 100644 --- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h +++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h @@ -13,6 +13,8 @@ typedef void (*EnEncount3ActionFunc)(struct EnEncount3*, PlayState*); #define ENCOUNT3_GET_ROTZ(thisx) ((thisx)->world.rot.z) +#define ENCOUNT3_SWITCH_FLAG_NONE 0x7F + typedef struct EnEncount3 { /* 0x000 */ Actor actor; /* 0x144 */ EnEncount3ActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 077273309..376401ae4 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -43,12 +43,12 @@ void EnEncount4_Init(Actor* thisx, PlayState* play) { s32 pad; EnEncount4* this = THIS; - this->unk_148 = ENENCOUNT4_GET_F000(thisx); - this->switchFlag = ENENCOUNT4_GET_FLAG(thisx); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + this->unk_148 = ENCOUNT4_GET_F000(thisx); + this->switchFlag = ENCOUNT4_GET_SWITCH_FLAG(thisx); + if (this->switchFlag == ENCOUNT4_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -64,7 +64,7 @@ void func_809C3FD8(EnEncount4* this, PlayState* play) { Actor* actor; this->unk_14E = 0; - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->timer = 100; this->actionFunc = func_809C464C; } else { @@ -89,7 +89,7 @@ void func_809C4078(EnEncount4* this, PlayState* play) { s32 i; EnBsb* captainKeeta = this->captainKeeta; - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->timer = 100; this->actionFunc = func_809C464C; } else if (BREG(1) == 0) { @@ -135,7 +135,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { CollisionPoly* colPoly; s32 bgId; - if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->timer = 100; this->actionFunc = func_809C464C; @@ -185,12 +185,12 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { } void func_809C4598(EnEncount4* this, PlayState* play) { - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { this->timer = 100; this->actionFunc = func_809C464C; } else if (this->unk_14E >= 2) { this->timer = 100; - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } this->actionFunc = func_809C464C; diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h index a692f796a..64dfdff92 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h @@ -10,8 +10,10 @@ struct EnEncount4; typedef void (*EnEncount4ActionFunc)(struct EnEncount4*, PlayState*); -#define ENENCOUNT4_GET_FLAG(thisx) ((thisx)->params & 0x7F) -#define ENENCOUNT4_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) +#define ENCOUNT4_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define ENCOUNT4_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) + +#define ENCOUNT4_SWITCH_FLAG_NONE 0x7F typedef struct EnEncount4 { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 48f75aa68..ef88474f8 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -115,11 +115,11 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor); this->switchFlag = ENHIDDENNUTS_GET_SWITCH_FLAG(&this->actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENHIDDENNUTS_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -411,7 +411,7 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) { } void func_80BDBE70(EnHiddenNuts* this, PlayState* play) { - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } EnHiddenNuts_ChangeAnim(this, ENHIDDENNUTS_ANIM_8); diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index 7df4b5f01..517ade964 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -11,6 +11,7 @@ typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); #define ENHIDDENNUTS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) +#define ENHIDDENNUTS_SWITCH_FLAG_NONE 0x7F #define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F #define ENHIDDENNUTS_PATH_INDEX_NONE_ALT 0x3F diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c index dcecdac43..a9cf2e351 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c @@ -80,7 +80,7 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { break; } - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } @@ -98,11 +98,11 @@ void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) { this->switchFlag = INVISIBLERUPPE_GET_SWITCH_FLAG(&this->actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == INVISIBLERUPPE_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h index 2257a649a..1e6ae328e 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h @@ -10,6 +10,8 @@ typedef void (*EnInvisibleRuppeActionFunc)(struct EnInvisibleRuppe*, PlayState*) #define INVISIBLERUPPE_GET_3(thisx) ((thisx)->params & 3) #define INVISIBLERUPPE_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0x1FC) >> 2) +#define INVISIBLERUPPE_SWITCH_FLAG_NONE 0x7F + typedef struct EnInvisibleRuppe { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index abba3efac..59ba5feb4 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -287,11 +287,11 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->picto.actor, 0.0125f); this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->picto.actor.flags &= ~ACTOR_FLAG_TARGETABLE; - if (this->switchFlag == 127) { - this->switchFlag = -1; + if (this->switchFlag == KAIZOKU_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->picto.actor); return; } @@ -867,7 +867,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); CutsceneManager_Stop(this->csId); - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } Actor_Kill(&this->picto.actor); diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index 423819eb3..15562ee2e 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -5,13 +5,15 @@ #include "z64snap.h" #include "objects/object_kz/object_kz.h" -#define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F) -#define KAIZOKU_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) - struct EnKaizoku; typedef void (*EnKaizokuActionFunc)(struct EnKaizoku*, PlayState*); +#define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F) +#define KAIZOKU_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 6) & 0x7F) + +#define KAIZOKU_SWITCH_FLAG_NONE 0x7F + typedef enum EnKaizokuAnimation { /* 0 */ EN_KAIZOKU_ANIM_0, /* 1 */ EN_KAIZOKU_ANIM_1, diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 880f48e82..09358e034 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -113,13 +113,13 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor); - this->switchFlag = LOOKNUTS_GET_SCENE_FLAG(&this->actor); + this->switchFlag = LOOKNUTS_GET_SWITCH_FLAG(&this->actor); this->spawnIndex = LOOKNUTS_GET_SPAWN_INDEX(&this->actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == LOOKNUTS_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h index 92c24cfbd..1cce177d4 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h @@ -9,9 +9,10 @@ struct EnLookNuts; typedef void (*EnLookNutsActionFunc)(struct EnLookNuts*, PlayState*); #define LOOKNUTS_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF) -#define LOOKNUTS_GET_SCENE_FLAG(thisx) ((thisx)->params & 0x7F) +#define LOOKNUTS_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define LOOKNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 0x7) & 0x1F) +#define LOOKNUTS_SWITCH_FLAG_NONE 0x7F #define LOOKNUTS_PATH_INDEX_NONE 0x1F typedef struct EnLookNuts { diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c index 82e25a95d..1a2925f65 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c @@ -897,7 +897,7 @@ void EnMnk_Monkey_Run(EnMnk* this, PlayState* play) { this->picto.actor.speed = 0.0f; if (MONKEY_GET_TYPE(&this->picto.actor) == MONKEY_OUTSIDECHAMBER) { switchFlag = MONKEY_GET_SWITCH_FLAG(&this->picto.actor); - if (switchFlag != 0x7F) { + if (switchFlag != MONKEY_SWITCH_FLAG_NONE) { Flags_SetSwitch(play, switchFlag + 1); } Actor_Kill(&this->picto.actor); diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h index a9493208f..42a23f99c 100644 --- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h +++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h @@ -14,6 +14,7 @@ typedef void (*EnMnkFunc)(PlayState*, struct EnMnk*); #define MONKEY_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define MONKEY_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF800) >> 11) +#define MONKEY_SWITCH_FLAG_NONE 0x7F #define MONKEY_PATH_INDEX_NONE 0x1F typedef enum { diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index 9119e0609..4b225880b 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -50,8 +50,8 @@ void EnOkarinaTag_Init(Actor* thisx, PlayState* play) { } this->unk154 = zRot * 50.0f; this->unk158 = i * 50.0f; - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENOKARINATAG_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } if (this->unk14A == 0xF) { this->unk14A = -1; @@ -66,7 +66,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { s16 yDiff; u16 var_v1; - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { if (this->unk148 == 0) { if (Flags_GetSwitch(play, this->switchFlag)) { return; @@ -122,7 +122,7 @@ void func_8093E68C(EnOkarinaTag* this, PlayState* play) { (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_SUNS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_PLAYED_STORMS) || (play->msgCtx.ocarinaMode == OCARINA_MODE_F)))) { - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { switch (this->unk148) { case 0: Flags_SetSwitch(play, this->switchFlag); diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h index 4c968b362..649f3b3da 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h @@ -11,6 +11,8 @@ typedef void (*EnOkarinaTagActionFunc)(struct EnOkarinaTag*, PlayState*); #define ENOKARINATAG_GET_780(thisx) (((thisx)->params >> 0x7) & 0xF) #define ENOKARINATAG_GET_F800(thisx) (((thisx)->params >> 0xB) & 0x1F) +#define ENOKARINATAG_SWITCH_FLAG_NONE 0x7F + typedef struct EnOkarinaTag { /* 0x000 */ Actor actor; /* 0x144 */ EnOkarinaTagActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c index 4e666ed5c..eb6907c7c 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -102,7 +102,7 @@ void func_80B11F78(EnOnpuman* this, PlayState* play) { void func_80B1202C(EnOnpuman* this, PlayState* play2) { PlayState* play = play2; - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && (Message_ShouldAdvance(play))) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0x8D4: this->unk_2A4 |= 1; @@ -138,7 +138,7 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) { } void func_80B1217C(EnOnpuman* this, PlayState* play) { - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && (Message_ShouldAdvance(play))) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { this->actionFunc = func_80B121D8; Message_CloseTextbox(play); } diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index 1c6a669a2..a7b7d9c13 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -225,8 +225,8 @@ void EnRaf_Init(Actor* thisx, PlayState* play) { this->mainType = EN_RAF_GET_TYPE(&this->dyna.actor); this->reviveTimer = EN_RAF_GET_REVIVE_TIMER(&this->dyna.actor); this->switchFlag = EN_RAF_GET_SWITCH_FLAG(&this->dyna.actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == EN_RAF_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } if (this->reviveTimer == 31) { @@ -235,7 +235,7 @@ void EnRaf_Init(Actor* thisx, PlayState* play) { this->reviveTimer = 30; } - if (((this->switchFlag >= 0) || (this->mainType == EN_RAF_TYPE_DORMANT) || + if (((this->switchFlag > SWITCH_FLAG_NONE) || (this->mainType == EN_RAF_TYPE_DORMANT) || CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) && (Flags_GetSwitch(play, this->switchFlag) || (this->mainType == EN_RAF_TYPE_DORMANT))) { s32 i; @@ -515,7 +515,7 @@ void EnRaf_Explode(EnRaf* this, PlayState* play) { CLEAR_TAG_PARAMS(CLEAR_TAG_SMALL_EXPLOSION)); Actor_PlaySfx(&this->dyna.actor, NA_SE_IT_BOMB_EXPLOSION); Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_DEAD); - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } @@ -579,7 +579,7 @@ void EnRaf_Convulse(EnRaf* this, PlayState* play) { if (this->endFrame <= curFrame) { this->chewCount++; if (this->chewCount > (BREG(2) + 2)) { - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.h b/src/overlays/actors/ovl_En_Raf/z_en_raf.h index a025046ab..ca6091233 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.h +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.h @@ -8,6 +8,8 @@ #define EN_RAF_GET_REVIVE_TIMER(thisx) (((thisx)->params >> 7) & 0x1F) #define EN_RAF_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define EN_RAF_SWITCH_FLAG_NONE 0x7F + typedef enum { /* 0 */ EN_RAF_TYPE_NORMAL, /* 1 */ EN_RAF_TYPE_DORMANT, // Spawns without trap, so it can't eat bombs/player diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index f7ec8f509..cd2b36634 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -1122,7 +1122,7 @@ void EnSGoro_WinterShrineGoron_Idle(EnSGoro* this, PlayState* play) { } void EnSGoro_WinterShrineGoron_Talk(EnSGoro* this, PlayState* play) { - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && (Message_ShouldAdvance(play))) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { if (this->actionFlags & EN_S_GORO_ACTIONFLAG_LASTMESSAGE) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_LASTMESSAGE; this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_ENGAGED; @@ -1230,7 +1230,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) { this->textId = EnSGoro_BombshopGoron_NextTextId(this, play); Message_StartTextbox(play, this->textId, &this->actor); } - } else if ((talkState == TEXT_STATE_CHOICE) && (Message_ShouldAdvance(play))) { + } else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: this->bombbuyFlags |= EN_S_GORO_BOMBBUYFLAG_YESBUY; diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index 6a1b68bbc..99c5441a6 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -107,10 +107,10 @@ void EnStopheishi_Init(Actor* thisx, PlayState* play) { this->switchFlag = ENSTOPHEISHI_GET_SWITCH_FLAG(&this->actor); this->unk_288 = (this->actor.world.rot.z * 40.0f) + 50.0f; this->actor.world.rot.z = 0; - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == ENSTOPHEISHI_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h index 651a66496..34cb9bf56 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h @@ -11,6 +11,8 @@ typedef void (*EnStopheishiActionFunc)(struct EnStopheishi*, PlayState*); #define ENSTOPHEISHI_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x3F) #define ENSTOPHEISHI_GET_F000(thisx) ((((thisx)->params) >> 0xC) & 0xF) +#define ENSTOPHEISHI_SWITCH_FLAG_NONE 0x7F + typedef struct EnStopheishi { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 34ebe1d80..667f5d8c4 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -264,11 +264,11 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK; } - if (this->switchFlag == 0xFF) { - this->switchFlag = -1; + if (this->switchFlag == EN_TALK_GIBUD_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag != SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); } @@ -880,7 +880,7 @@ void EnTalkGibud_Disappear(EnTalkGibud* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20000000; this->disappearanceTimer--; } else { - if (this->switchFlag != -1) { + if (this->switchFlag != SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } player->stateFlags1 &= ~PLAYER_STATE1_20; diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index 06ccd3914..eb1121801 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -7,6 +7,8 @@ #define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF) #define EN_TALK_GIBUD_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4) +#define EN_TALK_GIBUD_SWITCH_FLAG_NONE 0xFF + struct EnTalkGibud; typedef void (*EnTalkGibudActionFunc)(struct EnTalkGibud*, PlayState*); diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 8ae7b0de4..c44ec1442 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -339,8 +339,8 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { this->switchFlag = EN_WIZ_GET_SWITCH_FLAG(&this->actor); this->type = EN_WIZ_GET_TYPE(&this->actor); - if (this->switchFlag == 0x7F) { - this->switchFlag = -1; + if (this->switchFlag == EN_WIZ_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } if ((this->type == EN_WIZ_TYPE_FIRE) || (this->type == EN_WIZ_TYPE_FIRE_NO_BGM)) { @@ -352,7 +352,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 6; } - if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { + if ((this->switchFlag > SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); return; } @@ -1201,7 +1201,7 @@ void EnWiz_Dead(EnWiz* this, PlayState* play) { EnWiz_SelectPlatform(this, play); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_EXTINCT); Actor_Kill(&this->actor); - if (this->switchFlag >= 0) { + if (this->switchFlag > SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } } diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index fa7156fc5..ea17a254d 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -7,6 +7,8 @@ #define EN_WIZ_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) #define EN_WIZ_GET_TYPE(thisx) (((thisx)->params >> 8) & 0xFF) +#define EN_WIZ_SWITCH_FLAG_NONE 0x7F + typedef enum { /* 0 */ EN_WIZ_TYPE_FIRE, /* 1 */ EN_WIZ_TYPE_ICE, 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 a809da57a..ba4782d02 100644 --- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c +++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c @@ -33,7 +33,7 @@ void ObjDemo_Init(Actor* thisx, PlayState* play) { ObjDemo* this = THIS; thisx->params = OBJDEMO_GET_SWITCH_FLAG_MASK(thisx); - if ((OBJDEMO_GET_SWITCH_FLAG(thisx) != 0xFF) && (Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(thisx)))) { + if ((OBJDEMO_GET_SWITCH_FLAG(thisx) != 0xFF) && Flags_GetSwitch(play, OBJDEMO_GET_SWITCH_FLAG(thisx))) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index 8802a257d..a76476bde 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -115,11 +115,11 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { this->switchFlag = OBJHAKAISI_GET_SWITCH_FLAG(thisx); this->csId = this->dyna.actor.csId; - if (this->switchFlag == 0xFF) { - this->switchFlag = -1; + if (this->switchFlag == OBJHAKAISI_SWITCH_FLAG_NONE) { + this->switchFlag = SWITCH_FLAG_NONE; } - if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag != SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h index 7ee84768a..937b3d64e 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h @@ -10,6 +10,8 @@ typedef void (*ObjHakaisiActionFunc)(struct ObjHakaisi*, PlayState*); #define OBJHAKAISI_GET_FF(thisx) ((thisx)->params & 0xFF) #define OBJHAKAISI_GET_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF00) >> 8) +#define OBJHAKAISI_SWITCH_FLAG_NONE 0xFF + typedef struct ObjHakaisi { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjHakaisiActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index 8df527f37..c98645d17 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -115,7 +115,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { thisx->shape.rot.x = 0x500; thisx->shape.rot.z = -0x500; - if (((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) || + if (((this->switchFlag != OBJICEPOLY_SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) || ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { Actor_Kill(thisx); return; @@ -219,7 +219,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) { } } while (actor != NULL); } - } else if ((this->switchFlag != 0xFF) && Flags_GetSwitch(play, this->switchFlag)) { + } else if ((this->switchFlag != OBJICEPOLY_SWITCH_FLAG_NONE) && Flags_GetSwitch(play, this->switchFlag)) { CutsceneManager_Queue(this->actor.csId); this->unk_14A = 1; this->actionFunc = func_80931E58; @@ -328,7 +328,7 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) { if (this->unk_14A == 0) { CutsceneManager_Stop(this->actor.csId); - if (this->switchFlag != 0xFF) { + if (this->switchFlag != OBJICEPOLY_SWITCH_FLAG_NONE) { Flags_SetSwitch(play, this->switchFlag); } Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h index 3e59cd92e..acf62bb91 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h @@ -9,6 +9,8 @@ typedef void (*ObjIcePolyActionFunc)(struct ObjIcePoly*, PlayState*); #define OBJICEPOLY_GET_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0xFF) +#define OBJICEPOLY_SWITCH_FLAG_NONE 0xFF + typedef struct ObjIcePoly { /* 0x000 */ Actor actor; /* 0x144 */ ObjIcePolyActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c index 9e92dcb11..61822bde7 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -101,7 +101,7 @@ void ObjLift_Init(Actor* thisx, PlayState* play) { this->unk_178 = this->dyna.actor.home.rot.z; this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z; DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { + if ((this->unk_178 <= 0) && Flags_GetSwitch(play, OBJLIFT_GET_SWITCH_FLAG(&this->dyna.actor))) { Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c index b5ba51418..569a6e6f2 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -75,7 +75,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) { this->unk170 = Lib_SegmentedToVirtual(path->points); func_80AC94C0(this, this->unk168); if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) && - (Flags_GetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { + Flags_GetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor))) { func_80AC96B4(this); } else { func_80AC9AB8(this); diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index cbd94d808..43bf3cb21 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -105,8 +105,8 @@ void ObjSyokudai_Init(Actor* thisx, PlayState* play) { this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); if (OBJ_SYOKUDAI_GET_START_LIT(thisx) || - ((type != OBJ_SYOKUDAI_TYPE_NO_SWITCH || switchFlag != 0x7F) && Flags_GetSwitch(play, switchFlag))) { - + (((type != OBJ_SYOKUDAI_TYPE_NO_SWITCH) || (switchFlag != OBJ_SYOKUDAI_SWITCH_FLAG_NONE)) && + Flags_GetSwitch(play, switchFlag))) { s32 groupSize = OBJ_SYOKUDAI_GET_GROUP_SIZE(thisx); this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; @@ -239,7 +239,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { player->unk_B28 = 0xC8; } if (groupSize == 0) { - if ((type == OBJ_SYOKUDAI_TYPE_NO_SWITCH) && (switchFlag == 0x7F)) { + if ((type == OBJ_SYOKUDAI_TYPE_NO_SWITCH) && (switchFlag == OBJ_SYOKUDAI_SWITCH_FLAG_NONE)) { this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER; } else if (thisx->csId >= 0) { this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH; @@ -267,9 +267,11 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->standCollider.base); Collider_UpdateCylinder(thisx, &this->flameCollider); CollisionCheck_SetAC(play, &play->colChkCtx, &this->flameCollider.base); - if ((this->snuffTimer > OBJ_SYOKUDAI_SNUFF_OUT) && (--this->snuffTimer == OBJ_SYOKUDAI_SNUFF_OUT) && - (type != OBJ_SYOKUDAI_TYPE_SWITCH_CAUSES_FLAME)) { - sNumLitTorchesInGroup--; + if (this->snuffTimer > OBJ_SYOKUDAI_SNUFF_OUT) { + this->snuffTimer--; + if ((this->snuffTimer == OBJ_SYOKUDAI_SNUFF_OUT) && (type != OBJ_SYOKUDAI_TYPE_SWITCH_CAUSES_FLAME)) { + sNumLitTorchesInGroup--; + } } if (this->snuffTimer != OBJ_SYOKUDAI_SNUFF_OUT) { s32 pad2; 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 d49f38289..2ea8dc2fc 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h @@ -5,6 +5,13 @@ struct ObjSyokudai; +#define OBJ_SYOKUDAI_GET_TYPE(thisx) ((thisx)->params >> 0xC) +#define OBJ_SYOKUDAI_GET_START_LIT(thisx) ((thisx)->params & 0x800) +#define OBJ_SYOKUDAI_GET_GROUP_SIZE(thisx) (((thisx)->params >> 7) & 0xF) +#define OBJ_SYOKUDAI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) + +#define OBJ_SYOKUDAI_SWITCH_FLAG_NONE 0x7F + typedef struct ObjSyokudai { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder standCollider; @@ -48,11 +55,6 @@ typedef enum { #define OBJ_SYOKUDAI_SNUFF_TIMER_JUST_LIT_BONUS 10 #define OBJ_SYOKUDAI_LIGHT_RADIUS_MAX 250 -#define OBJ_SYOKUDAI_GET_TYPE(thisx) ((thisx)->params >> 0xC) -#define OBJ_SYOKUDAI_GET_START_LIT(thisx) ((thisx)->params & 0x800) -#define OBJ_SYOKUDAI_GET_GROUP_SIZE(thisx) (((thisx)->params >> 7) & 0xF) -#define OBJ_SYOKUDAI_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) - #define OBJ_SYOKUDAI_SNUFF_TIMER_INITIAL(groupSize) ((groupSize * 50) + 100) #endif // Z_OBJ_SYOKUDAI_H From 9e5777e473225436803a1ec2325b099963083ee5 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sun, 15 Oct 2023 12:02:31 +0200 Subject: [PATCH 73/74] object_po (#1426) * naming * typos and sLimbToBodyParts * POE_LIMB_MAX instead of 21 * typos * EnumName * prefix --- assets/xml/objects/object_po.xml | 110 ++++++++++++---------- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 94 +++++++++--------- src/overlays/actors/ovl_En_Poh/z_en_poh.h | 29 +++--- 3 files changed, 122 insertions(+), 111 deletions(-) diff --git a/assets/xml/objects/object_po.xml b/assets/xml/objects/object_po.xml index 98dbc61b1..a430d178b 100644 --- a/assets/xml/objects/object_po.xml +++ b/assets/xml/objects/object_po.xml @@ -1,53 +1,65 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index 1c301a8bf..f0109b40a 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -7,7 +7,6 @@ #include "prevent_bss_reordering.h" #include "z_en_poh.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#include "objects/object_po/object_po.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_200 | ACTOR_FLAG_IGNORE_QUAKE) @@ -167,8 +166,7 @@ void EnPoh_Init(Actor* thisx, PlayState* play) { this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); Lights_PointGlowSetInfo(&this->lightInfo, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, 255, 255, 255, 0); - SkelAnime_Init(play, &this->skelAnime, &object_po_Skel_0050D0, &object_po_Anim_000A60, this->jointTable, - this->morphTable, 21); + SkelAnime_Init(play, &this->skelAnime, &gPoeSkel, &gPoeFloatAnim, this->jointTable, this->morphTable, POE_LIMB_MAX); this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; func_80B2D0E8(this); } @@ -215,7 +213,7 @@ void func_80B2C9B8(EnPoh* this, PlayState* play) { } void func_80B2CA4C(EnPoh* this) { - Animation_PlayLoop(&this->skelAnime, &object_po_Anim_0015B0); + Animation_PlayLoop(&this->skelAnime, &gPoeDisappearAnim); this->unk_18E = Rand_S16Offset(2, 3); this->actionFunc = func_80B2CAA4; this->actor.speed = 0.0f; @@ -241,7 +239,7 @@ void func_80B2CAA4(EnPoh* this, PlayState* play) { } void func_80B2CB60(EnPoh* this) { - Animation_PlayLoop(&this->skelAnime, &object_po_Anim_000A60); + Animation_PlayLoop(&this->skelAnime, &gPoeFloatAnim); this->unk_18E = Rand_S16Offset(15, 3); this->colliderCylinder.base.acFlags |= AC_ON; this->actionFunc = func_80B2CBBC; @@ -276,7 +274,7 @@ void func_80B2CBBC(EnPoh* this, PlayState* play) { } void func_80B2CD14(EnPoh* this) { - Animation_PlayLoop(&this->skelAnime, &object_po_Anim_000A60); + Animation_PlayLoop(&this->skelAnime, &gPoeFloatAnim); this->actionFunc = func_80B2CD64; this->unk_18E = 0; this->actor.speed = 2.0f; @@ -315,7 +313,7 @@ void func_80B2CD64(EnPoh* this, PlayState* play) { } void func_80B2CEC8(EnPoh* this) { - Animation_MorphToLoop(&this->skelAnime, &object_po_Anim_0001A8, -6.0f); + Animation_MorphToLoop(&this->skelAnime, &gPoeAttackAnim, -6.0f); this->unk_18E = 12; this->actor.speed = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH); @@ -344,7 +342,7 @@ void func_80B2CF28(EnPoh* this, PlayState* play) { } void func_80B2CFF8(EnPoh* this) { - Animation_MorphToPlayOnce(&this->skelAnime, &object_po_Anim_0004EC, -6.0f); + Animation_MorphToPlayOnce(&this->skelAnime, &gPoeDamagedAnim, -6.0f); func_800BE504(&this->actor, &this->colliderCylinder); this->colliderCylinder.base.acFlags &= ~AC_ON; this->actor.speed = 5.0f; @@ -366,7 +364,7 @@ void func_80B2D07C(EnPoh* this, PlayState* play) { void func_80B2D0E8(EnPoh* this) { this->unk_197 = 0; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; - Animation_PlayOnceSetSpeed(&this->skelAnime, &object_po_Anim_0011C4, 0.0f); + Animation_PlayOnceSetSpeed(&this->skelAnime, &gPoeAppearAnim, 0.0f); this->actionFunc = func_80B2D140; } @@ -445,7 +443,7 @@ void func_80B2D300(EnPoh* this, PlayState* play) { } void func_80B2D5DC(EnPoh* this) { - Animation_PlayOnce(&this->skelAnime, &object_po_Anim_000A60); + Animation_PlayOnce(&this->skelAnime, &gPoeFloatAnim); this->actionFunc = func_80B2D628; this->actor.speed = -5.0f; } @@ -462,7 +460,7 @@ void func_80B2D628(EnPoh* this, PlayState* play) { } void func_80B2D694(EnPoh* this) { - Animation_PlayLoop(&this->skelAnime, &object_po_Anim_0015B0); + Animation_PlayLoop(&this->skelAnime, &gPoeDisappearAnim); this->unk_192 = BINANG_ROT180(this->actor.world.rot.y); this->actionFunc = func_80B2D6EC; this->actor.speed = 0.0f; @@ -540,7 +538,7 @@ void func_80B2D980(EnPoh* this, PlayState* play) { } void func_80B2DAD0(EnPoh* this) { - Animation_MorphToLoop(&this->skelAnime, &object_po_Anim_0006E0, -5.0f); + Animation_MorphToLoop(&this->skelAnime, &gPoeFleeAnim, -5.0f); this->actor.speed = 5.0f; this->actor.world.rot.y = BINANG_ROT180(this->actor.shape.rot.y); this->colliderCylinder.base.acFlags |= AC_ON; @@ -585,7 +583,7 @@ void func_80B2DC50(EnPoh* this, PlayState* play) { void func_80B2DD2C(EnPoh* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight <= BGCHECK_Y_MIN)) { - EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_PO, 10, object_po_DL_002D28); + EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_PO, 10, gPoeLanternDL); func_80B2E0B0(this); } @@ -864,34 +862,34 @@ s32 EnPoh_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p return false; } -static s8 sLimbToBodyParts[OBJECT_PO_LIMB_MAX] = { - BODYPART_NONE, // OBJECT_PO_LIMB_NONE - BODYPART_NONE, // OBJECT_PO_LIMB_01 - BODYPART_NONE, // OBJECT_PO_LIMB_02 - BODYPART_NONE, // OBJECT_PO_LIMB_03 - ENPOH_BODYPART_4, // OBJECT_PO_LIMB_04 - ENPOH_BODYPART_5, // OBJECT_PO_LIMB_05 - BODYPART_NONE, // OBJECT_PO_LIMB_06 - BODYPART_NONE, // OBJECT_PO_LIMB_07 - BODYPART_NONE, // OBJECT_PO_LIMB_08 - ENPOH_BODYPART_0, // OBJECT_PO_LIMB_09 - ENPOH_BODYPART_1, // OBJECT_PO_LIMB_0A - BODYPART_NONE, // OBJECT_PO_LIMB_0B - BODYPART_NONE, // OBJECT_PO_LIMB_0C - BODYPART_NONE, // OBJECT_PO_LIMB_0D - BODYPART_NONE, // OBJECT_PO_LIMB_0E - BODYPART_NONE, // OBJECT_PO_LIMB_0F - ENPOH_BODYPART_2, // OBJECT_PO_LIMB_10 - BODYPART_NONE, // OBJECT_PO_LIMB_11 - BODYPART_NONE, // OBJECT_PO_LIMB_12 - ENPOH_BODYPART_3, // OBJECT_PO_LIMB_13 - BODYPART_NONE, // OBJECT_PO_LIMB_14 +static s8 sLimbToBodyParts[POE_LIMB_MAX] = { + BODYPART_NONE, // POE_LIMB_NONE + BODYPART_NONE, // POE_LIMB_ROOT + BODYPART_NONE, // POE_LIMB_ROOT_WRAPPER + BODYPART_NONE, // POE_LIMB_BOTTOM_CLOAK_ROOT + POE_BODYPART_BOTTOM_CLOAK, // POE_LIMB_BOTTOM_CLOAK + POE_BODYPART_TOP_CLOAK, // POE_LIMB_TOP_CLOAK + BODYPART_NONE, // POE_LIMB_LEFT_ARM_ROOT + BODYPART_NONE, // POE_LIMB_LEFT_ARM_WRAPPER + BODYPART_NONE, // POE_LIMB_LEFT_FOREARM_ROOT + POE_BODYPART_LEFT_FOREARM, // POE_LIMB_LEFT_FOREARM + POE_BODYPART_LEFT_UPPER_ARM, // POE_LIMB_LEFT_UPPER_ARM + BODYPART_NONE, // POE_LIMB_FACE + BODYPART_NONE, // POE_LIMB_RIGHT_ARM_ROOT + BODYPART_NONE, // POE_LIMB_RIGHT_ARM_WRAPPER + BODYPART_NONE, // POE_LIMB_RIGHT_FOREARM_ROOT + BODYPART_NONE, // POE_LIMB_RIGHT_ARM_HAND_ROOT + POE_BODYPART_RIGHT_ARM_HAND, // POE_LIMB_RIGHT_ARM_HAND + BODYPART_NONE, // POE_LIMB_LANTERN_ROOT + BODYPART_NONE, // POE_LIMB_LANTERN + POE_BODYPART_RIGHT_FOREARM, // POE_LIMB_RIGHT_FOREARM + BODYPART_NONE, // POE_LIMB_RIGHT_UPPER_ARM }; static Vec3f D_80B2F734[] = { - { -600.0f, 500.0f, 1700.0f }, // ENPOH_BODYPART_7 - { -600.0f, 500.0f, -1700.0f }, // ENPOH_BODYPART_8 - { 1000.0f, 1700.0f, 0.0f }, // ENPOH_BODYPART_9 + { -600.0f, 500.0f, 1700.0f }, // POE_BODYPART_7 + { -600.0f, 500.0f, -1700.0f }, // POE_BODYPART_8 + { 1000.0f, 1700.0f, 0.0f }, // POE_BODYPART_9 }; void EnPoh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) { @@ -903,7 +901,7 @@ void EnPoh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Collider_UpdateSpheres(limbIndex, &this->colliderSph); if ((this->actionFunc == func_80B2D300) && (this->unk_18E >= 2) && (limbIndex == 5)) { gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList((*gfx)++, object_po_DL_002608); + gSPDisplayList((*gfx)++, gPoeBurnDL); } if (limbIndex == 18) { @@ -921,19 +919,19 @@ void EnPoh_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, bodyPartIndex = sLimbToBodyParts[limbIndex]; if (bodyPartIndex != BODYPART_NONE) { - if (bodyPartIndex <= ENPOH_BODYPART_3) { + if (bodyPartIndex <= POE_BODYPART_RIGHT_FOREARM) { Matrix_MultZero(&this->bodyPartsPos[bodyPartIndex]); - } else if (bodyPartIndex == ENPOH_BODYPART_4) { + } else if (bodyPartIndex == POE_BODYPART_BOTTOM_CLOAK) { Matrix_MultVecX(2000.0f, &this->bodyPartsPos[bodyPartIndex]); } else { s32 i; Vec3f* vec = &this->bodyPartsPos[bodyPartIndex + 2]; Vec3f* vec2 = &D_80B2F734[0]; - Matrix_MultVecX(-2000.0f, &this->bodyPartsPos[bodyPartIndex]); // ENPOH_BODYPART_5 - Matrix_MultVecY(-2000.0f, &this->bodyPartsPos[bodyPartIndex + 1]); // ENPOH_BODYPART_6 + Matrix_MultVecX(-2000.0f, &this->bodyPartsPos[bodyPartIndex]); // POE_BODYPART_TOP_CLOAK + Matrix_MultVecY(-2000.0f, &this->bodyPartsPos[bodyPartIndex + 1]); // POE_BODYPART_6 - for (i = bodyPartIndex + 2; i < ENPOH_BODYPART_MAX; i++, vec++, vec2++) { + for (i = bodyPartIndex + 2; i < POE_BODYPART_MAX; i++, vec++, vec2++) { Matrix_MultVec3f(vec2, vec); } } @@ -978,10 +976,10 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { Matrix_Put(&this->unk_3D8); gSPMatrix(&gfx[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(&gfx[3], object_po_DL_002D28); + gSPDisplayList(&gfx[3], gPoeLanternDL); POLY_OPA_DISP = &gfx[4]; - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ENPOH_BODYPART_MAX, + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, POE_BODYPART_MAX, this->actor.scale.x * 100.0f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); @@ -1018,7 +1016,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { this->actor.world.pos.z + sp7C.z, this->unk_198, this->unk_199, this->unk_19A, 200); gSPMatrix(&gfx[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(&gfx[3], object_po_DL_002D28); + gSPDisplayList(&gfx[3], gPoeLanternDL); POLY_OPA_DISP = &gfx[4]; } else { @@ -1033,7 +1031,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { Matrix_RotateYF(BINANG_TO_RAD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, object_po_DL_003850); + gSPDisplayList(POLY_XLU_DISP++, gPoeSoulDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.h b/src/overlays/actors/ovl_En_Poh/z_en_poh.h index 5f7439e4a..7c3e47eed 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.h +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.h @@ -2,23 +2,24 @@ #define Z_EN_POH_H #include "global.h" +#include "objects/object_po/object_po.h" struct EnPoh; typedef void (*EnPohActionFunc)(struct EnPoh*, PlayState*); typedef enum EnPohBodyPart { - /* 0 */ ENPOH_BODYPART_0, - /* 1 */ ENPOH_BODYPART_1, - /* 2 */ ENPOH_BODYPART_2, - /* 3 */ ENPOH_BODYPART_3, - /* 4 */ ENPOH_BODYPART_4, - /* 5 */ ENPOH_BODYPART_5, - /* 6 */ ENPOH_BODYPART_6, - /* 7 */ ENPOH_BODYPART_7, - /* 8 */ ENPOH_BODYPART_8, - /* 9 */ ENPOH_BODYPART_9, - /* 10 */ ENPOH_BODYPART_MAX + /* 0 */ POE_BODYPART_LEFT_FOREARM, + /* 1 */ POE_BODYPART_LEFT_UPPER_ARM, + /* 2 */ POE_BODYPART_RIGHT_ARM_HAND, + /* 3 */ POE_BODYPART_RIGHT_FOREARM, + /* 4 */ POE_BODYPART_BOTTOM_CLOAK, + /* 5 */ POE_BODYPART_TOP_CLOAK, + /* 6 */ POE_BODYPART_6, + /* 7 */ POE_BODYPART_7, + /* 8 */ POE_BODYPART_8, + /* 9 */ POE_BODYPART_9, + /* 10 */ POE_BODYPART_MAX } EnPohBodyPart; typedef struct EnPoh { @@ -38,11 +39,11 @@ typedef struct EnPoh { /* 0x199 */ u8 unk_199; /* 0x19A */ u8 unk_19A; /* 0x19B */ u8 unk_19B; - /* 0x19C */ Vec3s jointTable[21]; - /* 0x21A */ Vec3s morphTable[21]; + /* 0x19C */ Vec3s jointTable[POE_LIMB_MAX]; + /* 0x21A */ Vec3s morphTable[POE_LIMB_MAX]; /* 0x298 */ f32 drawDmgEffAlpha; /* 0x29C */ f32 drawDmgEffScale; - /* 0x2A0 */ Vec3f bodyPartsPos[ENPOH_BODYPART_MAX]; + /* 0x2A0 */ Vec3f bodyPartsPos[POE_BODYPART_MAX]; /* 0x318 */ LightNode* lightNode; /* 0x31C */ LightInfo lightInfo; /* 0x32C */ ColliderCylinder colliderCylinder; From 1d3f38dcaae480b7dc7f22ab75e606492583f9d1 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 16 Oct 2023 00:01:04 +0200 Subject: [PATCH 74/74] object_zoraegg (#1439) * naming * improvements * bss order --- assets/xml/objects/object_zoraegg.xml | 74 +++++++++++-------- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 50 ++++++------- .../actors/ovl_En_Zoraegg/z_en_zoraegg.h | 9 ++- .../actors/ovl_player_actor/z_player.c | 1 + 4 files changed, 74 insertions(+), 60 deletions(-) diff --git a/assets/xml/objects/object_zoraegg.xml b/assets/xml/objects/object_zoraegg.xml index 175c6aeb2..0fd05641d 100644 --- a/assets/xml/objects/object_zoraegg.xml +++ b/assets/xml/objects/object_zoraegg.xml @@ -1,34 +1,48 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index 6440493cf..099f75a57 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -6,7 +6,6 @@ #include "z_en_zoraegg.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "objects/object_zoraegg/object_zoraegg.h" #define FLAGS (ACTOR_FLAG_10) @@ -81,9 +80,9 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { }; Actor_SetScale(&this->actor, 0.006f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_zoraegg_Skel_004C90, &object_zoraegg_Anim_005098, - this->jointTable, this->morphTable, 7); - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_005098); + SkelAnime_InitFlex(play, &this->skelAnime, &gZoraBabySkel, &gZoraBabySwimAnim, this->jointTable, this->morphTable, + ZORA_BABY_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gZoraBabySwimAnim); ActorShape_Init(&this->actor.shape, 1100.0f, NULL, 0.0f); this->actionFunc = func_80B32084; @@ -166,7 +165,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { case ZORA_EGG_TYPE_08: case ZORA_EGG_TYPE_09: this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_03]; - Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08); + Animation_PlayOnce(&this->skelAnime, &gZoraBabyHatchAnim); this->unk_1EC = 1; this->unk_1EE = 0; this->unk_1EF = 0; @@ -187,7 +186,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { this->cueType = cueTypes[ZORA_EGG_GET_TYPE(&this->actor) - ZORA_EGG_TYPE_0A]; this->unk_1EC = 2; this->actionFunc = func_80B324B0; - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); + Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim); this->unk_1EE = 0; this->unk_1ED = 0; this->unk_1EA |= 3; @@ -426,13 +425,13 @@ void func_80B324B0(EnZoraegg* this, PlayState* play) { if (this->unk_1EA & 4) { if (Cutscene_IsCueInChannel(play, this->cueType) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) { - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); + Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim); this->unk_1EA &= ~4; } } else { if (Cutscene_IsCueInChannel(play, this->cueType) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 4)) { - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004E04); + Animation_PlayLoop(&this->skelAnime, &gZoraBabySongLearnedAnim); this->unk_1EA |= 4; } } @@ -444,14 +443,14 @@ void func_80B324B0(EnZoraegg* this, PlayState* play) { this->unk_1E4 = Rand_ZeroFloat(5.0f); } } else if (this->unk_1EA & 4) { - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); + Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim); this->unk_1EA &= ~4; } } void func_80B32644(EnZoraegg* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { - Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4); + Animation_PlayLoop(&this->skelAnime, &gZoraBabyNoteAnim); this->unk_1EE = 0; this->unk_1EA |= 2; } @@ -474,8 +473,8 @@ void func_80B326F4(EnZoraegg* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, this->cueType) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) { - Animation_Change(&this->skelAnime, &object_zoraegg_Anim_004D20, 1.0f, 0.0f, - Animation_GetLastFrame(&object_zoraegg_Anim_004D20), ANIMMODE_ONCE, 5.0f); + Animation_Change(&this->skelAnime, &gZoraBabyFormNoteAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gZoraBabyFormNoteAnim), ANIMMODE_ONCE, 5.0f); this->unk_1E8 = 0; this->actionFunc = func_80B32644; SET_WEEKEVENTREG(WEEKEVENTREG_19_40); @@ -495,14 +494,14 @@ void func_80B32820(EnZoraegg* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { if (this->unk_1E8 >= 2) { this->actionFunc = func_80B326F4; - Animation_Change(&this->skelAnime, &object_zoraegg_Anim_005098, 1.0f, 0.0f, - Animation_GetLastFrame(&object_zoraegg_Anim_005098), ANIMMODE_LOOP, 10.0f); + Animation_Change(&this->skelAnime, &gZoraBabySwimAnim, 1.0f, 0.0f, + Animation_GetLastFrame(&gZoraBabySwimAnim), ANIMMODE_LOOP, 10.0f); this->unk_1E8 = 0; SkelAnime_Update(&this->skelAnime); return; } - Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4); + Animation_PlayOnce(&this->skelAnime, &gZoraBabySwimUpAnim); this->unk_1E8 += 1; SkelAnime_Update(&this->skelAnime); } @@ -520,7 +519,7 @@ void func_80B32928(EnZoraegg* this, PlayState* play) { } if (SkelAnime_Update(&this->skelAnime)) { - Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4); + Animation_PlayOnce(&this->skelAnime, &gZoraBabySwimUpAnim); this->unk_1EA |= 1; this->actionFunc = func_80B32820; this->unk_1E8 = 0; @@ -653,13 +652,13 @@ void EnZoraegg_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (DECR(this->unk_1F4) == 0) { - this->unk_1F4 = Rand_S16Offset(60, 60); + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); } - this->unk_1F2 = this->unk_1F4; - if (this->unk_1F2 >= 3) { - this->unk_1F2 = 0; + this->eyeIndex = this->blinkTimer; + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; } } @@ -730,14 +729,14 @@ void func_80B331C8(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250); + gSPDisplayList(POLY_OPA_DISP++, gZoraEggDL); } else { Gfx_SetupDL72(POLY_XLU_DISP++); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->unk_1ED); - gSPDisplayList(POLY_XLU_DISP++, object_zoraegg_DL_005250); + gSPDisplayList(POLY_XLU_DISP++, gZoraEggDL); } Matrix_Pop(); @@ -856,16 +855,15 @@ void EnZoraegg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* } } -TexturePtr D_80B33950[] = { object_zoraegg_Tex_003430, object_zoraegg_Tex_004430, object_zoraegg_Tex_004830 }; - void func_80B33818(Actor* thisx, PlayState* play) { + static TexturePtr sZoraBabyEyeTextures[] = { gZoraBabyEyeOpenTex, gZoraBabyEyeHalfTex, gZoraBabyEyeClosedTex }; EnZoraegg* this = THIS; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sZoraBabyEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnZoraegg_OverrideLimbDraw, EnZoraegg_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h index 84fce59df..a74c5a4c8 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h @@ -2,6 +2,7 @@ #define Z_EN_ZORAEGG_H #include "global.h" +#include "objects/object_zoraegg/object_zoraegg.h" struct EnZoraegg; @@ -44,8 +45,8 @@ typedef enum { typedef struct EnZoraegg { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[7]; - /* 0x1B2 */ Vec3s morphTable[7]; + /* 0x188 */ Vec3s jointTable[ZORA_BABY_LIMB_MAX]; + /* 0x1B2 */ Vec3s morphTable[ZORA_BABY_LIMB_MAX]; /* 0x1DC */ Actor* unk_1DC; /* 0x1E0 */ f32 unk_1E0; /* 0x1E4 */ f32 unk_1E4; @@ -56,8 +57,8 @@ typedef struct EnZoraegg { /* 0x1EE */ u8 unk_1EE; /* 0x1EF */ u8 unk_1EF; /* 0x1F0 */ u16 cueType; - /* 0x1F2 */ s16 unk_1F2; - /* 0x1F4 */ s16 unk_1F4; + /* 0x1F2 */ s16 eyeIndex; + /* 0x1F4 */ s16 blinkTimer; /* 0x1F8 */ EnZoraeggActionFunc actionFunc; } EnZoraegg; // size = 0x1FC diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 6e19ae832..43021a023 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,6 +4,7 @@ * Description: Player */ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" #include "z64quake.h"